diff options
Diffstat (limited to 'examples/web/models')
116 files changed, 0 insertions, 52437 deletions
diff --git a/examples/web/models/loader.html b/examples/web/models/loader.html deleted file mode 100644 index 86e0789..0000000 --- a/examples/web/models/loader.html +++ /dev/null @@ -1,236 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <title>loading...</title> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> - - <meta name="title" content="raylib - example"> - <meta name="description" content="raylib is a simple and easy-to-use library to enjoy videogames programming. This a small example of what you can do."> - <meta name="keywords" content="raylib, videogames, programming, C, C++, library, learn, study, simple, easy, free, open source, raysan"> - <meta name="viewport" content="width=device-width"> - - <!-- Open Graph metatags for sharing --> - <meta property="og:title" content="raylib - example"/> - <meta property="og:image" content="https://www.raylib.com/common/img/raylib_logo_card.png"/> - <meta property="og:url" content="https://www.raylib.com" /> - <meta property="og:site_name" content="raylib"/> - <meta property="og:description" content="This is a small example of what you can do with raylib"/> - - <!-- Add jQuery library --> - <script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script> - - <!-- hightlight.js - Syntax highlighting for the Web --> - <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.1/styles/default.min.css"> - <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.1/highlight.min.js"></script> - - <style type="text/css"> - @font-face { - font-family: 'grixel_acme_7_wide_xtnd'; - src: url('../../font/acme_7_wide_xtnd.eot'); - src: url('../../font/acme_7_wide_xtnd.eot?#iefix') format('embedded-opentype'), - url('../../font/acme_7_wide_xtnd.woff') format('woff'), - url('../../font/acme_7_wide_xtnd.ttf') format('truetype'); - font-weight: normal; - font-style: normal; - font-size-adjust:0.49; - } - #eximage { width: 802px; height: 452px; text-align: center; } - #eximage img { margin: 0 auto; border: 1px solid; border-color: black; } - #eximage canvas { position: relative; top: 1px; left: 1px; border: 1px solid red; background: black; } - pre { width: 802px!important;} - pre code{ border: 1px solid; border-color:#b0b0b0; height:auto; } - .exdownbtn{ margin-right: 20px; width:220px; height:30px; float:left; position: relative; cursor:pointer; font-weight:bold; font-size:10px; - line-height:30px; text-align: center; border-width:5px; background-color:#e1e1e1; color:#5c5a5a; - border:4px solid #898888; font-family: grixel_acme_7_wide_xtnd, Courier New, Verdana, Arial;} - #exdowncode .exdownbtn:hover{background-color:#f0d6d6; color:#c55757; border:4px solid #e66666;} - #exdownexec .exdownbtn:hover{background-color:#bedce8; color:#417794; border:4px solid #5d9cbd;} - - .fancybox-wrap fancybox-desktop fancybox-type-iframe fancybox-opened { width: 860px!important;} - .fancybox-inner { width: 850px!important; } - .fancybox-iframe { width: 830px!important; } - </style> - - <script type="text/javascript"> - $(document).ready(function() - { - window.addEventListener('keydown', function(e) - { - // Prevent SPACE key to scroll page - if ((e.keyCode == 32) && (e.target == document.body)) e.preventDefault(); - }); - - var mainUrl = $(location).attr('href'); - var name = mainUrl.slice(mainUrl.indexOf('=') + 1); - - document.title = "raylib - " + name.replace('_', ' '); - - var type = name.substring(0, name.indexOf("_")); - //var srcUrl = '../../src/' + type + '/' + name + '.c'; - //var imgUrl = '../' + type + '/' + name + '.png'; - - // Get example code and image directly from original raylib GitHub and avoid duplicate code to maintain - var srcUrl = 'https://raw.githubusercontent.com/raysan5/raylib/master/examples/' + type + '/' + name + '.c'; - var imgUrl = 'https://raw.githubusercontent.com/raysan5/raylib/master/examples/' + type + '/' + name + '.png'; - - $('#eximage img').attr('src', imgUrl); - - $.get(srcUrl, function(data) - { - $('pre code').text(data); - $('pre code').each(function(i, e) {hljs.highlightBlock(e)}); - }, 'text'); - - // Quick hack for some examples not working on web - if (name == "models_material_pbr") - { - $('#eximage').append('<img src="' + imgUrl + '" alt=" ">'); - } - else - { - // #eximage filling code: canvas sample and image - $('#eximage').append( - '<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()">' + - '<img src="' + imgUrl + '" alt=" ">' + - '</canvas>'); - - Module.canvas = document.getElementById('canvas'); - Module.canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false); - - var jsUrl = name + '.js'; - - // Run emscripten example - $.getScript(jsUrl, function() {}); - } - }); - </script> - <script type='text/javascript' src="https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js"> </script> - <script type='text/javascript'> - function saveFileFromMEMFSToDisk(memoryFSname, localFSname) // This can be called by C/C++ code - { - var isSafari = false; // Not supported, navigator.userAgent access is being restricted - var data = FS.readFile(memoryFSname); - var blob; - - if (isSafari) blob = new Blob([data.buffer], { type: "application/octet-stream" }); - else blob = new Blob([data.buffer], { type: "application/octet-binary" }); - - // NOTE: SaveAsDialog is a browser setting. For example, in Google Chrome, - // in Settings/Advanced/Downloads section you have a setting: - // 'Ask where to save each file before downloading' - which you can set true/false. - // If you enable this setting it would always ask you and bring the SaveAsDialog - saveAs(blob, localFSname); - } - </script> - </head> - - <body> - <div class="emscripten"> - <progress value="0" max="100" id="progress" hidden=1></progress> - </div> - - <!-- Canvas example or image, filled on loading --> - <div id="eximage"></div> - - <!--<textarea id="output" rows="8"></textarea>--> - - <pre><code class="cpp"></code></pre> - - <script type='text/javascript'> - //var statusElement = document.getElementById('status'); - //var progressElement = document.getElementById('progress'); - //var spinnerElement = document.getElementById('spinner'); - - var Module = { - preRun: [], - postRun: [], - print: (function() { - var element = document.getElementById('output'); - if (element) element.value = ''; // clear browser cache - return function(text) { - text = Array.prototype.slice.call(arguments).join(' '); - // These replacements are necessary if you render to raw HTML - //text = text.replace(/&/g, "&"); - //text = text.replace(/</g, "<"); - //text = text.replace(/>/g, ">"); - //text = text.replace('\n', '<br>', 'g'); - console.log(text); - if (element) { - element.value += text + "\n"; - element.scrollTop = element.scrollHeight; // focus on bottom - } - }; - })(), - printErr: function(text) { - text = Array.prototype.slice.call(arguments).join(' '); - if (0) { // XXX disabled for safety typeof dump == 'function') { - dump(text + '\n'); // fast, straight to the real console - } else { - console.error(text); - } - }, - canvas: (function() { - // NOTE: canvas element eventListener is added after appending! - - //var canvas = document.getElementById('canvas'); - - // As a default initial behavior, pop up an alert when webgl context is lost. To make your - // application robust, you may want to override this behavior before shipping! - // See https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2 - //canvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false); - - //return canvas; - })(), - setStatus: function(text) { - if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' }; - if (text === Module.setStatus.text) return; - var m = text.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/); - var now = Date.now(); - if (m && now - Date.now() < 30) return; // if this is a progress update, skip it if too soon - if (m) { - text = m[1]; - //progressElement.value = parseInt(m[2])*100; - //progressElement.max = parseInt(m[4])*100; - //progressElement.hidden = false; - //spinnerElement.hidden = false; - } else { - //progressElement.value = null; - //progressElement.max = null; - //progressElement.hidden = true; - //if (!text) spinnerElement.style.display = 'none'; - } - //statusElement.innerHTML = text; - }, - totalDependencies: 0, - monitorRunDependencies: function(left) { - this.totalDependencies = Math.max(this.totalDependencies, left); - Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.'); - } - }; - - Module.setStatus('Downloading...'); - - window.onerror = function(event) { - // TODO: do not warn on ok events like simulating an infinite loop or exitStatus - Module.setStatus('Exception thrown, see JavaScript console'); - //spinnerElement.style.display = 'none'; - Module.setStatus = function(text) { - if (text) Module.printErr('[post-exception status] ' + text); - }; - }; - </script> - - <!--<script async type="text/javascript" src="../examples/web/core_basic_window.js"></script>--> - - <!-- Google Analytics tracking code --> - <script> - (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ - (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), - m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) - })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); - - ga('create', 'UA-45733555-1', 'raylib.com'); - ga('require', 'linkid', 'linkid.js'); - ga('send', 'pageview'); - </script> - </body> -</html>
\ No newline at end of file diff --git a/examples/web/models/models_animation.c b/examples/web/models/models_animation.c deleted file mode 100644 index 89f01f7..0000000 --- a/examples/web/models/models_animation.c +++ /dev/null @@ -1,141 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Load 3d model with animations and play them -* -* This example has been created using raylib 2.5 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2019 Ramon Santamaria (@raysan5) and @culacant -* -********************************************************************************************/ - -#include "raylib.h" - -#include <stdlib.h> - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - -Camera camera = { 0 }; - -Model model = { 0 }; -Texture2D texture = { 0 }; - -Vector3 position = { 0.0f, 0.0f, 0.0f }; - -// Load animation data -int animsCount = 0; -ModelAnimation *anims = 0; -int animFrameCounter = 0; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - model animation"); - - // Define the camera to look into our 3d world - camera.position = (Vector3){ 10.0f, 10.0f, 10.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) - camera.fovy = 45.0f; // Camera field-of-view Y - camera.projection = CAMERA_PERSPECTIVE; // Camera mode type - - model = LoadModel("resources/guy/guy.iqm"); // Load the animated model mesh and basic data - texture = LoadTexture("resources/guy/guytex.png"); // Load model texture and set material - SetMaterialTexture(&model.materials[0], MAP_DIFFUSE, texture); // Set model material map texture - - // Load animation data - anims = LoadModelAnimations("resources/guy/guyanim.iqm", &animsCount); - - SetCameraMode(camera, CAMERA_FREE); // Set free camera mode - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Unload texture - - // Unload model animations data - for (int i = 0; i < animsCount; i++) UnloadModelAnimation(anims[i]); - RL_FREE(anims); - - UnloadModel(model); // Unload model - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera); - - // Play animation when spacebar is held down - if (IsKeyDown(KEY_SPACE)) - { - animFrameCounter++; - UpdateModelAnimation(model, anims[0], animFrameCounter); - if (animFrameCounter >= anims[0].frameCount) animFrameCounter = 0; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawModelEx(model, position, (Vector3){ 1.0f, 0.0f, 0.0f }, -90.0f, (Vector3){ 1.0f, 1.0f, 1.0f }, WHITE); - - for (int i = 0; i < model.boneCount; i++) - { - DrawCube(anims[0].framePoses[animFrameCounter][i].translation, 0.2f, 0.2f, 0.2f, RED); - } - - DrawGrid(10, 1.0f); // Draw a grid - - EndMode3D(); - - DrawText("PRESS SPACE to PLAY MODEL ANIMATION", 10, 10, 20, MAROON); - DrawText("(c) Guy IQM 3D model by @culacant", screenWidth - 200, screenHeight - 20, 10, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- -} diff --git a/examples/web/models/models_animation.data b/examples/web/models/models_animation.data Binary files differdeleted file mode 100644 index c7a884a..0000000 --- a/examples/web/models/models_animation.data +++ /dev/null diff --git a/examples/web/models/models_animation.html b/examples/web/models/models_animation.html deleted file mode 100644 index 5402f2f..0000000 --- a/examples/web/models/models_animation.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_animation.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_animation.js b/examples/web/models/models_animation.js deleted file mode 100644 index 27230f4..0000000 --- a/examples/web/models/models_animation.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){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 location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_animation.data";var REMOTE_PACKAGE_BASE="models_animation.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"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){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"]("/","resources",true,true);Module["FS_createPath"]("/resources","guy",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<files.length;++i){new DataRequest(files[i]["start"],files[i]["end"],files[i]["audio"]).open("GET",files[i]["filename"])}function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);DataRequest.prototype.byteArray=byteArray;var files=metadata["files"];for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_animation.data")}Module["addRunDependency"]("datafile_models/models_animation.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"filename":"/resources/guy/guy.iqm","start":0,"end":39408,"audio":0},{"filename":"/resources/guy/guytex.png","start":39408,"end":341343,"audio":0},{"filename":"/resources/guy/guyanim.iqm","start":341343,"end":359587,"audio":0}],"remote_package_size":359587,"package_uuid":"cfaac6d3-c1c7-4482-ba4a-0de0d82f2425"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||67108864;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_animation.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["ae"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["ee"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}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 PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd);if(size<cwdLengthInBytes+1)return-68;stringToUTF8(cwd,buf,size);return buf}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"a":___assert_fail,"Ta":___sys_chdir,"L":___sys_fcntl64,"Sa":___sys_getcwd,"Va":___sys_ioctl,"Xa":___sys_open,"C":_emscripten_exit_pointerlock,"aa":_emscripten_get_element_css_size,"X":_emscripten_get_gamepad_status,"Y":_emscripten_get_num_gamepads,"Jd":_emscripten_glActiveTexture,"Id":_emscripten_glAttachShader,"Zd":_emscripten_glBeginQueryEXT,"Hd":_emscripten_glBindAttribLocation,"Gd":_emscripten_glBindBuffer,"Fd":_emscripten_glBindFramebuffer,"Ed":_emscripten_glBindRenderbuffer,"Dd":_emscripten_glBindTexture,"Rd":_emscripten_glBindVertexArrayOES,"Cd":_emscripten_glBlendColor,"Bd":_emscripten_glBlendEquation,"Ad":_emscripten_glBlendEquationSeparate,"zd":_emscripten_glBlendFunc,"yd":_emscripten_glBlendFuncSeparate,"xd":_emscripten_glBufferData,"wd":_emscripten_glBufferSubData,"vd":_emscripten_glCheckFramebufferStatus,"ud":_emscripten_glClear,"td":_emscripten_glClearColor,"sd":_emscripten_glClearDepthf,"rd":_emscripten_glClearStencil,"qd":_emscripten_glColorMask,"pd":_emscripten_glCompileShader,"od":_emscripten_glCompressedTexImage2D,"nd":_emscripten_glCompressedTexSubImage2D,"md":_emscripten_glCopyTexImage2D,"ld":_emscripten_glCopyTexSubImage2D,"kd":_emscripten_glCreateProgram,"jd":_emscripten_glCreateShader,"id":_emscripten_glCullFace,"hd":_emscripten_glDeleteBuffers,"gd":_emscripten_glDeleteFramebuffers,"fd":_emscripten_glDeleteProgram,"T":_emscripten_glDeleteQueriesEXT,"ed":_emscripten_glDeleteRenderbuffers,"dd":_emscripten_glDeleteShader,"cd":_emscripten_glDeleteTextures,"Qd":_emscripten_glDeleteVertexArraysOES,"bd":_emscripten_glDepthFunc,"ad":_emscripten_glDepthMask,"$c":_emscripten_glDepthRangef,"_c":_emscripten_glDetachShader,"Zc":_emscripten_glDisable,"Yc":_emscripten_glDisableVertexAttribArray,"Xc":_emscripten_glDrawArrays,"Md":_emscripten_glDrawArraysInstancedANGLE,"Nd":_emscripten_glDrawBuffersWEBGL,"Wc":_emscripten_glDrawElements,"Ld":_emscripten_glDrawElementsInstancedANGLE,"Vc":_emscripten_glEnable,"Uc":_emscripten_glEnableVertexAttribArray,"Yd":_emscripten_glEndQueryEXT,"Tc":_emscripten_glFinish,"Sc":_emscripten_glFlush,"Rc":_emscripten_glFramebufferRenderbuffer,"Qc":_emscripten_glFramebufferTexture2D,"Pc":_emscripten_glFrontFace,"Oc":_emscripten_glGenBuffers,"Mc":_emscripten_glGenFramebuffers,"U":_emscripten_glGenQueriesEXT,"Lc":_emscripten_glGenRenderbuffers,"Kc":_emscripten_glGenTextures,"Pd":_emscripten_glGenVertexArraysOES,"Nc":_emscripten_glGenerateMipmap,"Ic":_emscripten_glGetActiveAttrib,"Hc":_emscripten_glGetActiveUniform,"Gc":_emscripten_glGetAttachedShaders,"Fc":_emscripten_glGetAttribLocation,"Ec":_emscripten_glGetBooleanv,"Dc":_emscripten_glGetBufferParameteriv,"Cc":_emscripten_glGetError,"Bc":_emscripten_glGetFloatv,"Ac":_emscripten_glGetFramebufferAttachmentParameteriv,"zc":_emscripten_glGetIntegerv,"xc":_emscripten_glGetProgramInfoLog,"yc":_emscripten_glGetProgramiv,"Td":_emscripten_glGetQueryObjecti64vEXT,"Vd":_emscripten_glGetQueryObjectivEXT,"Sd":_emscripten_glGetQueryObjectui64vEXT,"Ud":_emscripten_glGetQueryObjectuivEXT,"Wd":_emscripten_glGetQueryivEXT,"wc":_emscripten_glGetRenderbufferParameteriv,"uc":_emscripten_glGetShaderInfoLog,"tc":_emscripten_glGetShaderPrecisionFormat,"sc":_emscripten_glGetShaderSource,"vc":_emscripten_glGetShaderiv,"rc":_emscripten_glGetString,"qc":_emscripten_glGetTexParameterfv,"pc":_emscripten_glGetTexParameteriv,"mc":_emscripten_glGetUniformLocation,"oc":_emscripten_glGetUniformfv,"nc":_emscripten_glGetUniformiv,"jc":_emscripten_glGetVertexAttribPointerv,"lc":_emscripten_glGetVertexAttribfv,"kc":_emscripten_glGetVertexAttribiv,"ic":_emscripten_glHint,"hc":_emscripten_glIsBuffer,"gc":_emscripten_glIsEnabled,"fc":_emscripten_glIsFramebuffer,"ec":_emscripten_glIsProgram,"S":_emscripten_glIsQueryEXT,"dc":_emscripten_glIsRenderbuffer,"cc":_emscripten_glIsShader,"bc":_emscripten_glIsTexture,"Od":_emscripten_glIsVertexArrayOES,"ac":_emscripten_glLineWidth,"$b":_emscripten_glLinkProgram,"_b":_emscripten_glPixelStorei,"Zb":_emscripten_glPolygonOffset,"Xd":_emscripten_glQueryCounterEXT,"Yb":_emscripten_glReadPixels,"Xb":_emscripten_glReleaseShaderCompiler,"Vb":_emscripten_glRenderbufferStorage,"Ub":_emscripten_glSampleCoverage,"Tb":_emscripten_glScissor,"Sb":_emscripten_glShaderBinary,"Rb":_emscripten_glShaderSource,"Qb":_emscripten_glStencilFunc,"Pb":_emscripten_glStencilFuncSeparate,"Ob":_emscripten_glStencilMask,"Nb":_emscripten_glStencilMaskSeparate,"Mb":_emscripten_glStencilOp,"Kb":_emscripten_glStencilOpSeparate,"Jb":_emscripten_glTexImage2D,"Ib":_emscripten_glTexParameterf,"Hb":_emscripten_glTexParameterfv,"Gb":_emscripten_glTexParameteri,"Fb":_emscripten_glTexParameteriv,"Eb":_emscripten_glTexSubImage2D,"Db":_emscripten_glUniform1f,"Cb":_emscripten_glUniform1fv,"Bb":_emscripten_glUniform1i,"zb":_emscripten_glUniform1iv,"yb":_emscripten_glUniform2f,"xb":_emscripten_glUniform2fv,"wb":_emscripten_glUniform2i,"vb":_emscripten_glUniform2iv,"ub":_emscripten_glUniform3f,"tb":_emscripten_glUniform3fv,"sb":_emscripten_glUniform3i,"rb":_emscripten_glUniform3iv,"qb":_emscripten_glUniform4f,"ob":_emscripten_glUniform4fv,"nb":_emscripten_glUniform4i,"mb":_emscripten_glUniform4iv,"lb":_emscripten_glUniformMatrix2fv,"kb":_emscripten_glUniformMatrix3fv,"jb":_emscripten_glUniformMatrix4fv,"ib":_emscripten_glUseProgram,"hb":_emscripten_glValidateProgram,"gb":_emscripten_glVertexAttrib1f,"fb":_emscripten_glVertexAttrib1fv,"db":_emscripten_glVertexAttrib2f,"cb":_emscripten_glVertexAttrib2fv,"bb":_emscripten_glVertexAttrib3f,"ab":_emscripten_glVertexAttrib3fv,"$a":_emscripten_glVertexAttrib4f,"_a":_emscripten_glVertexAttrib4fv,"Kd":_emscripten_glVertexAttribDivisorANGLE,"Za":_emscripten_glVertexAttribPointer,"Ya":_emscripten_glViewport,"Pa":_emscripten_memcpy_big,"Qa":_emscripten_resize_heap,"x":_emscripten_run_script,"Z":_emscripten_sample_gamepad_data,"ya":_emscripten_set_click_callback_on_thread,"Aa":_emscripten_set_fullscreenchange_callback_on_thread,"ta":_emscripten_set_gamepadconnected_callback_on_thread,"sa":_emscripten_set_gamepaddisconnected_callback_on_thread,"za":_emscripten_set_keydown_callback_on_thread,"$d":_emscripten_set_main_loop,"ua":_emscripten_set_touchcancel_callback_on_thread,"wa":_emscripten_set_touchend_callback_on_thread,"va":_emscripten_set_touchmove_callback_on_thread,"xa":_emscripten_set_touchstart_callback_on_thread,"Ra":_emscripten_thread_sleep,"V":_exit,"M":_fd_close,"Ua":_fd_read,"Na":_fd_seek,"K":_fd_write,"q":_glActiveTexture,"D":_glAttachShader,"k":_glBindAttribLocation,"b":_glBindBuffer,"i":_glBindTexture,"Lb":_glBlendFunc,"e":_glBufferData,"o":_glBufferSubData,"N":_glClear,"O":_glClearColor,"eb":_glClearDepthf,"Fa":_glCompileShader,"La":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"Ab":_glCullFace,"m":_glDeleteBuffers,"G":_glDeleteProgram,"H":_glDeleteShader,"J":_glDeleteTextures,"Wb":_glDepthFunc,"I":_glDetachShader,"P":_glDisable,"h":_glDisableVertexAttribArray,"R":_glDrawArrays,"Q":_glDrawElements,"w":_glEnable,"c":_glEnableVertexAttribArray,"pb":_glFrontFace,"f":_glGenBuffers,"Oa":_glGenTextures,"v":_glGetAttribLocation,"Jc":_glGetFloatv,"Ba":_glGetProgramInfoLog,"F":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"E":_glGetShaderiv,"n":_glGetString,"u":_glGetUniformLocation,"Ca":_glLinkProgram,"Wa":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ma":_glTexImage2D,"p":_glTexParameteri,"y":_glUniform1i,"r":_glUniform4f,"s":_glUniformMatrix4fv,"l":_glUseProgram,"Ja":_glVertexAttrib2f,"Ka":_glVertexAttrib3f,"t":_glVertexAttrib4f,"d":_glVertexAttribPointer,"_d":_glViewport,"A":_glfwCreateWindow,"pa":_glfwDefaultWindowHints,"$":_glfwDestroyWindow,"B":_glfwGetPrimaryMonitor,"j":_glfwGetTime,"oa":_glfwGetVideoModes,"qa":_glfwInit,"da":_glfwMakeContextCurrent,"ia":_glfwSetCharCallback,"ea":_glfwSetCursorEnterCallback,"ga":_glfwSetCursorPosCallback,"ka":_glfwSetDropCallback,"ra":_glfwSetErrorCallback,"ja":_glfwSetKeyCallback,"ha":_glfwSetMouseButtonCallback,"fa":_glfwSetScrollCallback,"la":_glfwSetWindowFocusCallback,"ma":_glfwSetWindowIconifyCallback,"W":_glfwSetWindowShouldClose,"na":_glfwSetWindowSizeCallback,"_":_glfwSwapBuffers,"ca":_glfwSwapInterval,"z":_glfwTerminate,"g":_glfwWindowHint,"ba":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["be"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ce"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["de"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["fe"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ge"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["he"]).apply(null,arguments)};Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_animation.wasm b/examples/web/models/models_animation.wasm Binary files differdeleted file mode 100644 index 5ba9c14..0000000 --- a/examples/web/models/models_animation.wasm +++ /dev/null diff --git a/examples/web/models/models_billboard.c b/examples/web/models/models_billboard.c deleted file mode 100644 index af96569..0000000 --- a/examples/web/models/models_billboard.c +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Drawing billboards (adapted for HTML5 platform) -* -* This example has been created using raylib 1.3 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2015 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// Define the camera to look into our 3d world -Camera camera = { 0 }; - -Texture2D bill = { 0 }; // Our texture billboard -Vector3 billPosition = { 0.0f, 2.0f, 0.0f }; // Position where draw billboard - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - drawing billboards"); - - camera.position = (Vector3){ 5.0f, 4.0f, 5.0f }; - camera.target = (Vector3){ 0.0f, 2.0f, 0.0f }; - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; - camera.fovy = 45.0f; - camera.projection = CAMERA_PERSPECTIVE; - - bill = LoadTexture("resources/billboard.png"); // Our texture billboard - - SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(bill); // Unload texture - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera); // Update internal camera and our camera - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawGrid(10, 1.0f); // Draw a grid - DrawBillboard(camera, bill, billPosition, 2.0f, WHITE); - - EndMode3D(); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -}
\ No newline at end of file diff --git a/examples/web/models/models_billboard.data b/examples/web/models/models_billboard.data Binary files differdeleted file mode 100644 index 8c99118..0000000 --- a/examples/web/models/models_billboard.data +++ /dev/null diff --git a/examples/web/models/models_billboard.html b/examples/web/models/models_billboard.html deleted file mode 100644 index 0a18742..0000000 --- a/examples/web/models/models_billboard.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_billboard.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_billboard.js b/examples/web/models/models_billboard.js deleted file mode 100644 index 7f7d160..0000000 --- a/examples/web/models/models_billboard.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){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 location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_billboard.data";var REMOTE_PACKAGE_BASE="models_billboard.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"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){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"]("/","resources",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<files.length;++i){new DataRequest(files[i]["start"],files[i]["end"],files[i]["audio"]).open("GET",files[i]["filename"])}function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);DataRequest.prototype.byteArray=byteArray;var files=metadata["files"];for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_billboard.data")}Module["addRunDependency"]("datafile_models/models_billboard.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"filename":"/resources/billboard.png","start":0,"end":22374,"audio":0}],"remote_package_size":22374,"package_uuid":"33512a64-bd34-4445-b8cf-4bf3921d646a"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_billboard.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["Xd"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["_d"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"b":___assert_fail,"G":___sys_fcntl64,"Sa":___sys_ioctl,"Ta":___sys_open,"x":_emscripten_exit_pointerlock,"_":_emscripten_get_element_css_size,"V":_emscripten_get_gamepad_status,"W":_emscripten_get_num_gamepads,"Hd":_emscripten_glActiveTexture,"Gd":_emscripten_glAttachShader,"O":_emscripten_glBeginQueryEXT,"Fd":_emscripten_glBindAttribLocation,"Ed":_emscripten_glBindBuffer,"Dd":_emscripten_glBindFramebuffer,"Cd":_emscripten_glBindRenderbuffer,"Bd":_emscripten_glBindTexture,"Pd":_emscripten_glBindVertexArrayOES,"zd":_emscripten_glBlendColor,"yd":_emscripten_glBlendEquation,"xd":_emscripten_glBlendEquationSeparate,"wd":_emscripten_glBlendFunc,"vd":_emscripten_glBlendFuncSeparate,"ud":_emscripten_glBufferData,"td":_emscripten_glBufferSubData,"sd":_emscripten_glCheckFramebufferStatus,"rd":_emscripten_glClear,"qd":_emscripten_glClearColor,"od":_emscripten_glClearDepthf,"nd":_emscripten_glClearStencil,"md":_emscripten_glColorMask,"ld":_emscripten_glCompileShader,"kd":_emscripten_glCompressedTexImage2D,"jd":_emscripten_glCompressedTexSubImage2D,"id":_emscripten_glCopyTexImage2D,"hd":_emscripten_glCopyTexSubImage2D,"gd":_emscripten_glCreateProgram,"fd":_emscripten_glCreateShader,"ed":_emscripten_glCullFace,"dd":_emscripten_glDeleteBuffers,"cd":_emscripten_glDeleteFramebuffers,"bd":_emscripten_glDeleteProgram,"Q":_emscripten_glDeleteQueriesEXT,"ad":_emscripten_glDeleteRenderbuffers,"$c":_emscripten_glDeleteShader,"_c":_emscripten_glDeleteTextures,"Od":_emscripten_glDeleteVertexArraysOES,"Zc":_emscripten_glDepthFunc,"Yc":_emscripten_glDepthMask,"Xc":_emscripten_glDepthRangef,"Wc":_emscripten_glDetachShader,"Vc":_emscripten_glDisable,"Uc":_emscripten_glDisableVertexAttribArray,"Tc":_emscripten_glDrawArrays,"Kd":_emscripten_glDrawArraysInstancedANGLE,"Ld":_emscripten_glDrawBuffersWEBGL,"Sc":_emscripten_glDrawElements,"Jd":_emscripten_glDrawElementsInstancedANGLE,"Rc":_emscripten_glEnable,"Qc":_emscripten_glEnableVertexAttribArray,"N":_emscripten_glEndQueryEXT,"Pc":_emscripten_glFinish,"Oc":_emscripten_glFlush,"Nc":_emscripten_glFramebufferRenderbuffer,"Mc":_emscripten_glFramebufferTexture2D,"Lc":_emscripten_glFrontFace,"Kc":_emscripten_glGenBuffers,"Ic":_emscripten_glGenFramebuffers,"R":_emscripten_glGenQueriesEXT,"Hc":_emscripten_glGenRenderbuffers,"Gc":_emscripten_glGenTextures,"Nd":_emscripten_glGenVertexArraysOES,"Jc":_emscripten_glGenerateMipmap,"Fc":_emscripten_glGetActiveAttrib,"Ec":_emscripten_glGetActiveUniform,"Dc":_emscripten_glGetAttachedShaders,"Bc":_emscripten_glGetAttribLocation,"Ac":_emscripten_glGetBooleanv,"zc":_emscripten_glGetBufferParameteriv,"yc":_emscripten_glGetError,"xc":_emscripten_glGetFloatv,"wc":_emscripten_glGetFramebufferAttachmentParameteriv,"vc":_emscripten_glGetIntegerv,"tc":_emscripten_glGetProgramInfoLog,"uc":_emscripten_glGetProgramiv,"Rd":_emscripten_glGetQueryObjecti64vEXT,"Td":_emscripten_glGetQueryObjectivEXT,"Qd":_emscripten_glGetQueryObjectui64vEXT,"Sd":_emscripten_glGetQueryObjectuivEXT,"Ud":_emscripten_glGetQueryivEXT,"sc":_emscripten_glGetRenderbufferParameteriv,"qc":_emscripten_glGetShaderInfoLog,"pc":_emscripten_glGetShaderPrecisionFormat,"oc":_emscripten_glGetShaderSource,"rc":_emscripten_glGetShaderiv,"nc":_emscripten_glGetString,"mc":_emscripten_glGetTexParameterfv,"lc":_emscripten_glGetTexParameteriv,"ic":_emscripten_glGetUniformLocation,"kc":_emscripten_glGetUniformfv,"jc":_emscripten_glGetUniformiv,"fc":_emscripten_glGetVertexAttribPointerv,"hc":_emscripten_glGetVertexAttribfv,"gc":_emscripten_glGetVertexAttribiv,"ec":_emscripten_glHint,"dc":_emscripten_glIsBuffer,"cc":_emscripten_glIsEnabled,"bc":_emscripten_glIsFramebuffer,"ac":_emscripten_glIsProgram,"P":_emscripten_glIsQueryEXT,"$b":_emscripten_glIsRenderbuffer,"_b":_emscripten_glIsShader,"Zb":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"Yb":_emscripten_glLineWidth,"Xb":_emscripten_glLinkProgram,"Wb":_emscripten_glPixelStorei,"Vb":_emscripten_glPolygonOffset,"M":_emscripten_glQueryCounterEXT,"Ub":_emscripten_glReadPixels,"Tb":_emscripten_glReleaseShaderCompiler,"Sb":_emscripten_glRenderbufferStorage,"Rb":_emscripten_glSampleCoverage,"Qb":_emscripten_glScissor,"Ob":_emscripten_glShaderBinary,"Nb":_emscripten_glShaderSource,"Mb":_emscripten_glStencilFunc,"Lb":_emscripten_glStencilFuncSeparate,"Kb":_emscripten_glStencilMask,"Jb":_emscripten_glStencilMaskSeparate,"Ib":_emscripten_glStencilOp,"Hb":_emscripten_glStencilOpSeparate,"Gb":_emscripten_glTexImage2D,"Fb":_emscripten_glTexParameterf,"Db":_emscripten_glTexParameterfv,"Cb":_emscripten_glTexParameteri,"Bb":_emscripten_glTexParameteriv,"Ab":_emscripten_glTexSubImage2D,"zb":_emscripten_glUniform1f,"yb":_emscripten_glUniform1fv,"xb":_emscripten_glUniform1i,"wb":_emscripten_glUniform1iv,"vb":_emscripten_glUniform2f,"ub":_emscripten_glUniform2fv,"sb":_emscripten_glUniform2i,"rb":_emscripten_glUniform2iv,"qb":_emscripten_glUniform3f,"pb":_emscripten_glUniform3fv,"ob":_emscripten_glUniform3i,"nb":_emscripten_glUniform3iv,"mb":_emscripten_glUniform4f,"lb":_emscripten_glUniform4fv,"kb":_emscripten_glUniform4i,"jb":_emscripten_glUniform4iv,"hb":_emscripten_glUniformMatrix2fv,"gb":_emscripten_glUniformMatrix3fv,"fb":_emscripten_glUniformMatrix4fv,"eb":_emscripten_glUseProgram,"db":_emscripten_glValidateProgram,"cb":_emscripten_glVertexAttrib1f,"bb":_emscripten_glVertexAttrib1fv,"ab":_emscripten_glVertexAttrib2f,"$a":_emscripten_glVertexAttrib2fv,"_a":_emscripten_glVertexAttrib3f,"Ya":_emscripten_glVertexAttrib3fv,"Xa":_emscripten_glVertexAttrib4f,"Wa":_emscripten_glVertexAttrib4fv,"Id":_emscripten_glVertexAttribDivisorANGLE,"Va":_emscripten_glVertexAttribPointer,"Ua":_emscripten_glViewport,"Na":_emscripten_memcpy_big,"Oa":_emscripten_resize_heap,"t":_emscripten_run_script,"X":_emscripten_sample_gamepad_data,"xa":_emscripten_set_click_callback_on_thread,"za":_emscripten_set_fullscreenchange_callback_on_thread,"sa":_emscripten_set_gamepadconnected_callback_on_thread,"ra":_emscripten_set_gamepaddisconnected_callback_on_thread,"ya":_emscripten_set_keydown_callback_on_thread,"Wd":_emscripten_set_main_loop,"ta":_emscripten_set_touchcancel_callback_on_thread,"va":_emscripten_set_touchend_callback_on_thread,"ua":_emscripten_set_touchmove_callback_on_thread,"wa":_emscripten_set_touchstart_callback_on_thread,"Pa":_emscripten_thread_sleep,"S":_exit,"H":_fd_close,"Ra":_fd_read,"Ma":_fd_seek,"F":_fd_write,"L":_glActiveTexture,"y":_glAttachShader,"g":_glBindAttribLocation,"a":_glBindBuffer,"h":_glBindTexture,"Eb":_glBlendFunc,"l":_glBufferData,"r":_glBufferSubData,"I":_glClear,"J":_glClearColor,"Za":_glClearDepthf,"Fa":_glCompileShader,"Ja":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"tb":_glCullFace,"j":_glDeleteBuffers,"B":_glDeleteProgram,"C":_glDeleteShader,"E":_glDeleteTextures,"Pb":_glDepthFunc,"D":_glDetachShader,"K":_glDisable,"k":_glDisableVertexAttribArray,"Ad":_glDrawArrays,"pd":_glDrawElements,"s":_glEnable,"e":_glEnableVertexAttribArray,"ib":_glFrontFace,"m":_glGenBuffers,"La":_glGenTextures,"q":_glGetAttribLocation,"Cc":_glGetFloatv,"Aa":_glGetProgramInfoLog,"A":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"z":_glGetShaderiv,"i":_glGetString,"p":_glGetUniformLocation,"Ba":_glLinkProgram,"Qa":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ka":_glTexImage2D,"n":_glTexParameteri,"U":_glUniform1i,"ba":_glUniform4f,"Ca":_glUniformMatrix4fv,"o":_glUseProgram,"f":_glVertexAttribPointer,"Vd":_glViewport,"v":_glfwCreateWindow,"oa":_glfwDefaultWindowHints,"Z":_glfwDestroyWindow,"w":_glfwGetPrimaryMonitor,"d":_glfwGetTime,"na":_glfwGetVideoModes,"pa":_glfwInit,"ca":_glfwMakeContextCurrent,"ha":_glfwSetCharCallback,"da":_glfwSetCursorEnterCallback,"fa":_glfwSetCursorPosCallback,"ja":_glfwSetDropCallback,"qa":_glfwSetErrorCallback,"ia":_glfwSetKeyCallback,"ga":_glfwSetMouseButtonCallback,"ea":_glfwSetScrollCallback,"ka":_glfwSetWindowFocusCallback,"la":_glfwSetWindowIconifyCallback,"T":_glfwSetWindowShouldClose,"ma":_glfwSetWindowSizeCallback,"Y":_glfwSwapBuffers,"aa":_glfwSwapInterval,"u":_glfwTerminate,"c":_glfwWindowHint,"$":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["Yd"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["Zd"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["$d"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ae"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["be"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ce"]).apply(null,arguments)};Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_billboard.wasm b/examples/web/models/models_billboard.wasm Binary files differdeleted file mode 100644 index ed3dc38..0000000 --- a/examples/web/models/models_billboard.wasm +++ /dev/null diff --git a/examples/web/models/models_box_collisions.c b/examples/web/models/models_box_collisions.c deleted file mode 100644 index 54cb6c2..0000000 --- a/examples/web/models/models_box_collisions.c +++ /dev/null @@ -1,150 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Detect basic 3d collisions (box vs sphere vs box) (adapted for HTML5 platform) -* -* This example has been created using raylib 1.3 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2015 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - - -// Define the camera to look into our 3d world -Camera camera = {{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; - -Vector3 playerPosition = { 0.0f, 1.0f, 2.0f }; -Vector3 playerSize = { 1.0f, 2.0f, 1.0f }; -Color playerColor = GREEN; - -Vector3 enemyBoxPos = { -4.0f, 1.0f, 0.0f }; -Vector3 enemyBoxSize = { 2.0f, 2.0f, 2.0f }; - -Vector3 enemySpherePos = { 4.0f, 0.0f, 0.0f }; -float enemySphereSize = 1.5f; - -bool collision = false; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - box collisions"); - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - - // Move player - if (IsKeyDown(KEY_RIGHT)) playerPosition.x += 0.2f; - else if (IsKeyDown(KEY_LEFT)) playerPosition.x -= 0.2f; - else if (IsKeyDown(KEY_DOWN)) playerPosition.z += 0.2f; - else if (IsKeyDown(KEY_UP)) playerPosition.z -= 0.2f; - - collision = false; - - // Check collisions player vs enemy-box - if (CheckCollisionBoxes( - (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, - playerPosition.y - playerSize.y/2, - playerPosition.z - playerSize.z/2 }, - (Vector3){ playerPosition.x + playerSize.x/2, - playerPosition.y + playerSize.y/2, - playerPosition.z + playerSize.z/2 }}, - (BoundingBox){(Vector3){ enemyBoxPos.x - enemyBoxSize.x/2, - enemyBoxPos.y - enemyBoxSize.y/2, - enemyBoxPos.z - enemyBoxSize.z/2 }, - (Vector3){ enemyBoxPos.x + enemyBoxSize.x/2, - enemyBoxPos.y + enemyBoxSize.y/2, - enemyBoxPos.z + enemyBoxSize.z/2 }})) collision = true; - - // Check collisions player vs enemy-sphere - if (CheckCollisionBoxSphere( - (BoundingBox){(Vector3){ playerPosition.x - playerSize.x/2, - playerPosition.y - playerSize.y/2, - playerPosition.z - playerSize.z/2 }, - (Vector3){ playerPosition.x + playerSize.x/2, - playerPosition.y + playerSize.y/2, - playerPosition.z + playerSize.z/2 }}, - enemySpherePos, enemySphereSize)) collision = true; - - if (collision) playerColor = RED; - else playerColor = GREEN; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - // Draw enemy-box - DrawCube(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, GRAY); - DrawCubeWires(enemyBoxPos, enemyBoxSize.x, enemyBoxSize.y, enemyBoxSize.z, DARKGRAY); - - // Draw enemy-sphere - DrawSphere(enemySpherePos, enemySphereSize, GRAY); - DrawSphereWires(enemySpherePos, enemySphereSize, 16, 16, DARKGRAY); - - // Draw player - DrawCubeV(playerPosition, playerSize, playerColor); - - DrawGrid(10, 1.0f); // Draw a grid - - EndMode3D(); - - DrawText("Move player with cursors to collide", 220, 40, 20, GRAY); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- - -}
\ No newline at end of file diff --git a/examples/web/models/models_box_collisions.html b/examples/web/models/models_box_collisions.html deleted file mode 100644 index d548253..0000000 --- a/examples/web/models/models_box_collisions.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_box_collisions.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_box_collisions.js b/examples/web/models/models_box_collisions.js deleted file mode 100644 index 9a97991..0000000 --- a/examples/web/models/models_box_collisions.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_box_collisions.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["Xd"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["_d"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"n":___assert_fail,"F":___sys_fcntl64,"Sa":___sys_ioctl,"Ta":___sys_open,"za":_emscripten_exit_pointerlock,"Z":_emscripten_get_element_css_size,"U":_emscripten_get_gamepad_status,"V":_emscripten_get_num_gamepads,"Hd":_emscripten_glActiveTexture,"Gd":_emscripten_glAttachShader,"N":_emscripten_glBeginQueryEXT,"Fd":_emscripten_glBindAttribLocation,"Ed":_emscripten_glBindBuffer,"Dd":_emscripten_glBindFramebuffer,"Cd":_emscripten_glBindRenderbuffer,"Bd":_emscripten_glBindTexture,"Pd":_emscripten_glBindVertexArrayOES,"zd":_emscripten_glBlendColor,"yd":_emscripten_glBlendEquation,"xd":_emscripten_glBlendEquationSeparate,"wd":_emscripten_glBlendFunc,"vd":_emscripten_glBlendFuncSeparate,"ud":_emscripten_glBufferData,"td":_emscripten_glBufferSubData,"sd":_emscripten_glCheckFramebufferStatus,"rd":_emscripten_glClear,"qd":_emscripten_glClearColor,"od":_emscripten_glClearDepthf,"nd":_emscripten_glClearStencil,"md":_emscripten_glColorMask,"ld":_emscripten_glCompileShader,"kd":_emscripten_glCompressedTexImage2D,"jd":_emscripten_glCompressedTexSubImage2D,"id":_emscripten_glCopyTexImage2D,"hd":_emscripten_glCopyTexSubImage2D,"gd":_emscripten_glCreateProgram,"fd":_emscripten_glCreateShader,"ed":_emscripten_glCullFace,"dd":_emscripten_glDeleteBuffers,"cd":_emscripten_glDeleteFramebuffers,"bd":_emscripten_glDeleteProgram,"P":_emscripten_glDeleteQueriesEXT,"ad":_emscripten_glDeleteRenderbuffers,"$c":_emscripten_glDeleteShader,"_c":_emscripten_glDeleteTextures,"Od":_emscripten_glDeleteVertexArraysOES,"Zc":_emscripten_glDepthFunc,"Yc":_emscripten_glDepthMask,"Xc":_emscripten_glDepthRangef,"Wc":_emscripten_glDetachShader,"Vc":_emscripten_glDisable,"Uc":_emscripten_glDisableVertexAttribArray,"Tc":_emscripten_glDrawArrays,"Kd":_emscripten_glDrawArraysInstancedANGLE,"Ld":_emscripten_glDrawBuffersWEBGL,"Sc":_emscripten_glDrawElements,"Jd":_emscripten_glDrawElementsInstancedANGLE,"Rc":_emscripten_glEnable,"Qc":_emscripten_glEnableVertexAttribArray,"M":_emscripten_glEndQueryEXT,"Pc":_emscripten_glFinish,"Oc":_emscripten_glFlush,"Nc":_emscripten_glFramebufferRenderbuffer,"Mc":_emscripten_glFramebufferTexture2D,"Lc":_emscripten_glFrontFace,"Kc":_emscripten_glGenBuffers,"Ic":_emscripten_glGenFramebuffers,"Q":_emscripten_glGenQueriesEXT,"Hc":_emscripten_glGenRenderbuffers,"Gc":_emscripten_glGenTextures,"Nd":_emscripten_glGenVertexArraysOES,"Jc":_emscripten_glGenerateMipmap,"Fc":_emscripten_glGetActiveAttrib,"Ec":_emscripten_glGetActiveUniform,"Dc":_emscripten_glGetAttachedShaders,"Bc":_emscripten_glGetAttribLocation,"Ac":_emscripten_glGetBooleanv,"zc":_emscripten_glGetBufferParameteriv,"yc":_emscripten_glGetError,"xc":_emscripten_glGetFloatv,"wc":_emscripten_glGetFramebufferAttachmentParameteriv,"vc":_emscripten_glGetIntegerv,"tc":_emscripten_glGetProgramInfoLog,"uc":_emscripten_glGetProgramiv,"Rd":_emscripten_glGetQueryObjecti64vEXT,"Td":_emscripten_glGetQueryObjectivEXT,"Qd":_emscripten_glGetQueryObjectui64vEXT,"Sd":_emscripten_glGetQueryObjectuivEXT,"Ud":_emscripten_glGetQueryivEXT,"sc":_emscripten_glGetRenderbufferParameteriv,"qc":_emscripten_glGetShaderInfoLog,"pc":_emscripten_glGetShaderPrecisionFormat,"oc":_emscripten_glGetShaderSource,"rc":_emscripten_glGetShaderiv,"nc":_emscripten_glGetString,"mc":_emscripten_glGetTexParameterfv,"lc":_emscripten_glGetTexParameteriv,"ic":_emscripten_glGetUniformLocation,"kc":_emscripten_glGetUniformfv,"jc":_emscripten_glGetUniformiv,"fc":_emscripten_glGetVertexAttribPointerv,"hc":_emscripten_glGetVertexAttribfv,"gc":_emscripten_glGetVertexAttribiv,"ec":_emscripten_glHint,"dc":_emscripten_glIsBuffer,"cc":_emscripten_glIsEnabled,"bc":_emscripten_glIsFramebuffer,"ac":_emscripten_glIsProgram,"O":_emscripten_glIsQueryEXT,"$b":_emscripten_glIsRenderbuffer,"_b":_emscripten_glIsShader,"Zb":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"Yb":_emscripten_glLineWidth,"Xb":_emscripten_glLinkProgram,"Wb":_emscripten_glPixelStorei,"Vb":_emscripten_glPolygonOffset,"L":_emscripten_glQueryCounterEXT,"Ub":_emscripten_glReadPixels,"Tb":_emscripten_glReleaseShaderCompiler,"Sb":_emscripten_glRenderbufferStorage,"Rb":_emscripten_glSampleCoverage,"Qb":_emscripten_glScissor,"Ob":_emscripten_glShaderBinary,"Nb":_emscripten_glShaderSource,"Mb":_emscripten_glStencilFunc,"Lb":_emscripten_glStencilFuncSeparate,"Kb":_emscripten_glStencilMask,"Jb":_emscripten_glStencilMaskSeparate,"Ib":_emscripten_glStencilOp,"Hb":_emscripten_glStencilOpSeparate,"Gb":_emscripten_glTexImage2D,"Fb":_emscripten_glTexParameterf,"Db":_emscripten_glTexParameterfv,"Cb":_emscripten_glTexParameteri,"Bb":_emscripten_glTexParameteriv,"Ab":_emscripten_glTexSubImage2D,"zb":_emscripten_glUniform1f,"yb":_emscripten_glUniform1fv,"xb":_emscripten_glUniform1i,"wb":_emscripten_glUniform1iv,"vb":_emscripten_glUniform2f,"ub":_emscripten_glUniform2fv,"sb":_emscripten_glUniform2i,"rb":_emscripten_glUniform2iv,"qb":_emscripten_glUniform3f,"pb":_emscripten_glUniform3fv,"ob":_emscripten_glUniform3i,"nb":_emscripten_glUniform3iv,"mb":_emscripten_glUniform4f,"lb":_emscripten_glUniform4fv,"kb":_emscripten_glUniform4i,"jb":_emscripten_glUniform4iv,"hb":_emscripten_glUniformMatrix2fv,"gb":_emscripten_glUniformMatrix3fv,"fb":_emscripten_glUniformMatrix4fv,"eb":_emscripten_glUseProgram,"db":_emscripten_glValidateProgram,"cb":_emscripten_glVertexAttrib1f,"bb":_emscripten_glVertexAttrib1fv,"ab":_emscripten_glVertexAttrib2f,"$a":_emscripten_glVertexAttrib2fv,"_a":_emscripten_glVertexAttrib3f,"Ya":_emscripten_glVertexAttrib3fv,"Xa":_emscripten_glVertexAttrib4f,"Wa":_emscripten_glVertexAttrib4fv,"Id":_emscripten_glVertexAttribDivisorANGLE,"Va":_emscripten_glVertexAttribPointer,"Ua":_emscripten_glViewport,"Na":_emscripten_memcpy_big,"Oa":_emscripten_resize_heap,"t":_emscripten_run_script,"W":_emscripten_sample_gamepad_data,"wa":_emscripten_set_click_callback_on_thread,"ya":_emscripten_set_fullscreenchange_callback_on_thread,"ra":_emscripten_set_gamepadconnected_callback_on_thread,"qa":_emscripten_set_gamepaddisconnected_callback_on_thread,"xa":_emscripten_set_keydown_callback_on_thread,"Wd":_emscripten_set_main_loop,"sa":_emscripten_set_touchcancel_callback_on_thread,"ua":_emscripten_set_touchend_callback_on_thread,"ta":_emscripten_set_touchmove_callback_on_thread,"va":_emscripten_set_touchstart_callback_on_thread,"Pa":_emscripten_thread_sleep,"R":_exit,"G":_fd_close,"Ra":_fd_read,"Ma":_fd_seek,"E":_fd_write,"K":_glActiveTexture,"x":_glAttachShader,"f":_glBindAttribLocation,"a":_glBindBuffer,"g":_glBindTexture,"Eb":_glBlendFunc,"k":_glBufferData,"r":_glBufferSubData,"H":_glClear,"I":_glClearColor,"Za":_glClearDepthf,"Fa":_glCompileShader,"Ja":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"tb":_glCullFace,"i":_glDeleteBuffers,"A":_glDeleteProgram,"B":_glDeleteShader,"D":_glDeleteTextures,"Pb":_glDepthFunc,"C":_glDetachShader,"J":_glDisable,"j":_glDisableVertexAttribArray,"Ad":_glDrawArrays,"pd":_glDrawElements,"s":_glEnable,"d":_glEnableVertexAttribArray,"ib":_glFrontFace,"l":_glGenBuffers,"La":_glGenTextures,"q":_glGetAttribLocation,"Cc":_glGetFloatv,"Aa":_glGetProgramInfoLog,"z":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"y":_glGetShaderiv,"h":_glGetString,"p":_glGetUniformLocation,"Ba":_glLinkProgram,"Qa":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ka":_glTexImage2D,"m":_glTexParameteri,"T":_glUniform1i,"aa":_glUniform4f,"Ca":_glUniformMatrix4fv,"o":_glUseProgram,"e":_glVertexAttribPointer,"Vd":_glViewport,"v":_glfwCreateWindow,"na":_glfwDefaultWindowHints,"Y":_glfwDestroyWindow,"w":_glfwGetPrimaryMonitor,"c":_glfwGetTime,"ma":_glfwGetVideoModes,"oa":_glfwInit,"ba":_glfwMakeContextCurrent,"ga":_glfwSetCharCallback,"ca":_glfwSetCursorEnterCallback,"ea":_glfwSetCursorPosCallback,"ia":_glfwSetDropCallback,"pa":_glfwSetErrorCallback,"ha":_glfwSetKeyCallback,"fa":_glfwSetMouseButtonCallback,"da":_glfwSetScrollCallback,"ja":_glfwSetWindowFocusCallback,"ka":_glfwSetWindowIconifyCallback,"S":_glfwSetWindowShouldClose,"la":_glfwSetWindowSizeCallback,"X":_glfwSwapBuffers,"$":_glfwSwapInterval,"u":_glfwTerminate,"b":_glfwWindowHint,"_":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["Yd"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["Zd"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["$d"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ae"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["be"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ce"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_box_collisions.wasm b/examples/web/models/models_box_collisions.wasm Binary files differdeleted file mode 100644 index 56bdebe..0000000 --- a/examples/web/models/models_box_collisions.wasm +++ /dev/null diff --git a/examples/web/models/models_cubicmap.c b/examples/web/models/models_cubicmap.c deleted file mode 100644 index 1ef04e1..0000000 --- a/examples/web/models/models_cubicmap.c +++ /dev/null @@ -1,117 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Cubicmap loading and drawing (adapted for HTML5 platform) -* -* This example has been created using raylib 1.3 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2017 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// Define the camera to look into our 3d world -Camera camera = {{ 16.0f, 14.0f, 16.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; - -Texture2D cubicmap = { 0 }; -Model model = { 0 }; - -Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model position - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - cubesmap loading and drawing"); - - Image image = LoadImage("resources/cubicmap.png"); // Load cubicmap image (RAM) - cubicmap = LoadTextureFromImage(image); // Convert image to texture to display (VRAM) - - Mesh mesh = GenMeshCubicmap(image, (Vector3){ 1.0f, 1.0f, 1.0f }); - model = LoadModelFromMesh(mesh); - - // NOTE: By default each cube is mapped to one part of texture atlas - Texture2D texture = LoadTexture("resources/cubicmap_atlas.png"); // Load map texture - model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; // Set map diffuse texture - - UnloadImage(image); // Unload cubesmap image from RAM, already uploaded to VRAM - - SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(cubicmap); // Unload cubicmap texture - UnloadTexture(texture); // Unload map texture - UnloadModel(model); // Unload map model - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera); // Update internal camera and our camera - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawModel(model, mapPosition, 1.0f, WHITE); - - EndMode3D(); - - DrawTextureEx(cubicmap, (Vector2){ screenWidth - cubicmap.width*4 - 20, 20 }, 0.0f, 4.0f, WHITE); - DrawRectangleLines(screenWidth - cubicmap.width*4 - 20, 20, cubicmap.width*4, cubicmap.height*4, GREEN); - - DrawText("cubicmap image used to", 658, 90, 10, GRAY); - DrawText("generate map 3d model", 658, 104, 10, GRAY); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -} diff --git a/examples/web/models/models_cubicmap.data b/examples/web/models/models_cubicmap.data Binary files differdeleted file mode 100644 index 97220c0..0000000 --- a/examples/web/models/models_cubicmap.data +++ /dev/null diff --git a/examples/web/models/models_cubicmap.html b/examples/web/models/models_cubicmap.html deleted file mode 100644 index c6b90be..0000000 --- a/examples/web/models/models_cubicmap.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_cubicmap.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_cubicmap.js b/examples/web/models/models_cubicmap.js deleted file mode 100644 index a2055e3..0000000 --- a/examples/web/models/models_cubicmap.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){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 location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_cubicmap.data";var REMOTE_PACKAGE_BASE="models_cubicmap.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"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){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"]("/","resources",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<files.length;++i){new DataRequest(files[i]["start"],files[i]["end"],files[i]["audio"]).open("GET",files[i]["filename"])}function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);DataRequest.prototype.byteArray=byteArray;var files=metadata["files"];for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_cubicmap.data")}Module["addRunDependency"]("datafile_models/models_cubicmap.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"filename":"/resources/cubicmap.png","start":0,"end":164,"audio":0},{"filename":"/resources/cubicmap_atlas.png","start":164,"end":37324,"audio":0}],"remote_package_size":37324,"package_uuid":"7949804b-1070-4265-8a07-fc479be83357"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_cubicmap.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["_d"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["be"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"d":___assert_fail,"L":___sys_fcntl64,"Ta":___sys_ioctl,"Va":___sys_open,"C":_emscripten_exit_pointerlock,"aa":_emscripten_get_element_css_size,"X":_emscripten_get_gamepad_status,"Y":_emscripten_get_num_gamepads,"Hd":_emscripten_glActiveTexture,"Gd":_emscripten_glAttachShader,"Xd":_emscripten_glBeginQueryEXT,"Fd":_emscripten_glBindAttribLocation,"Ed":_emscripten_glBindBuffer,"Dd":_emscripten_glBindFramebuffer,"Cd":_emscripten_glBindRenderbuffer,"Bd":_emscripten_glBindTexture,"Pd":_emscripten_glBindVertexArrayOES,"Ad":_emscripten_glBlendColor,"zd":_emscripten_glBlendEquation,"yd":_emscripten_glBlendEquationSeparate,"xd":_emscripten_glBlendFunc,"wd":_emscripten_glBlendFuncSeparate,"vd":_emscripten_glBufferData,"ud":_emscripten_glBufferSubData,"td":_emscripten_glCheckFramebufferStatus,"sd":_emscripten_glClear,"rd":_emscripten_glClearColor,"qd":_emscripten_glClearDepthf,"pd":_emscripten_glClearStencil,"od":_emscripten_glColorMask,"nd":_emscripten_glCompileShader,"md":_emscripten_glCompressedTexImage2D,"ld":_emscripten_glCompressedTexSubImage2D,"kd":_emscripten_glCopyTexImage2D,"jd":_emscripten_glCopyTexSubImage2D,"id":_emscripten_glCreateProgram,"hd":_emscripten_glCreateShader,"gd":_emscripten_glCullFace,"fd":_emscripten_glDeleteBuffers,"ed":_emscripten_glDeleteFramebuffers,"dd":_emscripten_glDeleteProgram,"T":_emscripten_glDeleteQueriesEXT,"cd":_emscripten_glDeleteRenderbuffers,"bd":_emscripten_glDeleteShader,"ad":_emscripten_glDeleteTextures,"Od":_emscripten_glDeleteVertexArraysOES,"$c":_emscripten_glDepthFunc,"_c":_emscripten_glDepthMask,"Zc":_emscripten_glDepthRangef,"Yc":_emscripten_glDetachShader,"Xc":_emscripten_glDisable,"Wc":_emscripten_glDisableVertexAttribArray,"Vc":_emscripten_glDrawArrays,"Kd":_emscripten_glDrawArraysInstancedANGLE,"Ld":_emscripten_glDrawBuffersWEBGL,"Uc":_emscripten_glDrawElements,"Jd":_emscripten_glDrawElementsInstancedANGLE,"Tc":_emscripten_glEnable,"Sc":_emscripten_glEnableVertexAttribArray,"Wd":_emscripten_glEndQueryEXT,"Rc":_emscripten_glFinish,"Qc":_emscripten_glFlush,"Pc":_emscripten_glFramebufferRenderbuffer,"Oc":_emscripten_glFramebufferTexture2D,"Nc":_emscripten_glFrontFace,"Mc":_emscripten_glGenBuffers,"Kc":_emscripten_glGenFramebuffers,"U":_emscripten_glGenQueriesEXT,"Jc":_emscripten_glGenRenderbuffers,"Ic":_emscripten_glGenTextures,"Nd":_emscripten_glGenVertexArraysOES,"Lc":_emscripten_glGenerateMipmap,"Gc":_emscripten_glGetActiveAttrib,"Fc":_emscripten_glGetActiveUniform,"Ec":_emscripten_glGetAttachedShaders,"Dc":_emscripten_glGetAttribLocation,"Cc":_emscripten_glGetBooleanv,"Bc":_emscripten_glGetBufferParameteriv,"Ac":_emscripten_glGetError,"zc":_emscripten_glGetFloatv,"yc":_emscripten_glGetFramebufferAttachmentParameteriv,"xc":_emscripten_glGetIntegerv,"vc":_emscripten_glGetProgramInfoLog,"wc":_emscripten_glGetProgramiv,"Rd":_emscripten_glGetQueryObjecti64vEXT,"Td":_emscripten_glGetQueryObjectivEXT,"Qd":_emscripten_glGetQueryObjectui64vEXT,"Sd":_emscripten_glGetQueryObjectuivEXT,"Ud":_emscripten_glGetQueryivEXT,"uc":_emscripten_glGetRenderbufferParameteriv,"sc":_emscripten_glGetShaderInfoLog,"rc":_emscripten_glGetShaderPrecisionFormat,"qc":_emscripten_glGetShaderSource,"tc":_emscripten_glGetShaderiv,"pc":_emscripten_glGetString,"oc":_emscripten_glGetTexParameterfv,"nc":_emscripten_glGetTexParameteriv,"kc":_emscripten_glGetUniformLocation,"mc":_emscripten_glGetUniformfv,"lc":_emscripten_glGetUniformiv,"hc":_emscripten_glGetVertexAttribPointerv,"jc":_emscripten_glGetVertexAttribfv,"ic":_emscripten_glGetVertexAttribiv,"gc":_emscripten_glHint,"fc":_emscripten_glIsBuffer,"ec":_emscripten_glIsEnabled,"dc":_emscripten_glIsFramebuffer,"cc":_emscripten_glIsProgram,"S":_emscripten_glIsQueryEXT,"bc":_emscripten_glIsRenderbuffer,"ac":_emscripten_glIsShader,"$b":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"_b":_emscripten_glLineWidth,"Zb":_emscripten_glLinkProgram,"Yb":_emscripten_glPixelStorei,"Xb":_emscripten_glPolygonOffset,"Vd":_emscripten_glQueryCounterEXT,"Wb":_emscripten_glReadPixels,"Vb":_emscripten_glReleaseShaderCompiler,"Tb":_emscripten_glRenderbufferStorage,"Sb":_emscripten_glSampleCoverage,"Rb":_emscripten_glScissor,"Qb":_emscripten_glShaderBinary,"Pb":_emscripten_glShaderSource,"Ob":_emscripten_glStencilFunc,"Nb":_emscripten_glStencilFuncSeparate,"Mb":_emscripten_glStencilMask,"Lb":_emscripten_glStencilMaskSeparate,"Kb":_emscripten_glStencilOp,"Ib":_emscripten_glStencilOpSeparate,"Hb":_emscripten_glTexImage2D,"Gb":_emscripten_glTexParameterf,"Fb":_emscripten_glTexParameterfv,"Eb":_emscripten_glTexParameteri,"Db":_emscripten_glTexParameteriv,"Cb":_emscripten_glTexSubImage2D,"Bb":_emscripten_glUniform1f,"Ab":_emscripten_glUniform1fv,"zb":_emscripten_glUniform1i,"xb":_emscripten_glUniform1iv,"wb":_emscripten_glUniform2f,"vb":_emscripten_glUniform2fv,"ub":_emscripten_glUniform2i,"tb":_emscripten_glUniform2iv,"sb":_emscripten_glUniform3f,"rb":_emscripten_glUniform3fv,"qb":_emscripten_glUniform3i,"pb":_emscripten_glUniform3iv,"ob":_emscripten_glUniform4f,"mb":_emscripten_glUniform4fv,"lb":_emscripten_glUniform4i,"kb":_emscripten_glUniform4iv,"jb":_emscripten_glUniformMatrix2fv,"ib":_emscripten_glUniformMatrix3fv,"hb":_emscripten_glUniformMatrix4fv,"gb":_emscripten_glUseProgram,"fb":_emscripten_glValidateProgram,"eb":_emscripten_glVertexAttrib1f,"db":_emscripten_glVertexAttrib1fv,"bb":_emscripten_glVertexAttrib2f,"ab":_emscripten_glVertexAttrib2fv,"$a":_emscripten_glVertexAttrib3f,"_a":_emscripten_glVertexAttrib3fv,"Za":_emscripten_glVertexAttrib4f,"Ya":_emscripten_glVertexAttrib4fv,"Id":_emscripten_glVertexAttribDivisorANGLE,"Xa":_emscripten_glVertexAttribPointer,"Wa":_emscripten_glViewport,"Pa":_emscripten_memcpy_big,"Qa":_emscripten_resize_heap,"x":_emscripten_run_script,"Z":_emscripten_sample_gamepad_data,"ya":_emscripten_set_click_callback_on_thread,"Aa":_emscripten_set_fullscreenchange_callback_on_thread,"ta":_emscripten_set_gamepadconnected_callback_on_thread,"sa":_emscripten_set_gamepaddisconnected_callback_on_thread,"za":_emscripten_set_keydown_callback_on_thread,"Zd":_emscripten_set_main_loop,"ua":_emscripten_set_touchcancel_callback_on_thread,"wa":_emscripten_set_touchend_callback_on_thread,"va":_emscripten_set_touchmove_callback_on_thread,"xa":_emscripten_set_touchstart_callback_on_thread,"Ra":_emscripten_thread_sleep,"V":_exit,"M":_fd_close,"Sa":_fd_read,"Oa":_fd_seek,"K":_fd_write,"p":_glActiveTexture,"D":_glAttachShader,"k":_glBindAttribLocation,"a":_glBindBuffer,"j":_glBindTexture,"Jb":_glBlendFunc,"e":_glBufferData,"v":_glBufferSubData,"N":_glClear,"O":_glClearColor,"cb":_glClearDepthf,"Fa":_glCompileShader,"La":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"yb":_glCullFace,"m":_glDeleteBuffers,"G":_glDeleteProgram,"H":_glDeleteShader,"J":_glDeleteTextures,"Ub":_glDepthFunc,"I":_glDetachShader,"P":_glDisable,"h":_glDisableVertexAttribArray,"R":_glDrawArrays,"Q":_glDrawElements,"w":_glEnable,"b":_glEnableVertexAttribArray,"nb":_glFrontFace,"f":_glGenBuffers,"Na":_glGenTextures,"u":_glGetAttribLocation,"Hc":_glGetFloatv,"Ba":_glGetProgramInfoLog,"F":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"E":_glGetShaderiv,"n":_glGetString,"t":_glGetUniformLocation,"Ca":_glLinkProgram,"Ua":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ma":_glTexImage2D,"o":_glTexParameteri,"y":_glUniform1i,"q":_glUniform4f,"r":_glUniformMatrix4fv,"l":_glUseProgram,"Ja":_glVertexAttrib2f,"Ka":_glVertexAttrib3f,"s":_glVertexAttrib4f,"c":_glVertexAttribPointer,"Yd":_glViewport,"A":_glfwCreateWindow,"pa":_glfwDefaultWindowHints,"$":_glfwDestroyWindow,"B":_glfwGetPrimaryMonitor,"i":_glfwGetTime,"oa":_glfwGetVideoModes,"qa":_glfwInit,"da":_glfwMakeContextCurrent,"ia":_glfwSetCharCallback,"ea":_glfwSetCursorEnterCallback,"ga":_glfwSetCursorPosCallback,"ka":_glfwSetDropCallback,"ra":_glfwSetErrorCallback,"ja":_glfwSetKeyCallback,"ha":_glfwSetMouseButtonCallback,"fa":_glfwSetScrollCallback,"la":_glfwSetWindowFocusCallback,"ma":_glfwSetWindowIconifyCallback,"W":_glfwSetWindowShouldClose,"na":_glfwSetWindowSizeCallback,"_":_glfwSwapBuffers,"ca":_glfwSwapInterval,"z":_glfwTerminate,"g":_glfwWindowHint,"ba":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["$d"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["ae"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ce"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["de"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ee"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["fe"]).apply(null,arguments)};Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_cubicmap.wasm b/examples/web/models/models_cubicmap.wasm Binary files differdeleted file mode 100644 index 1ba70e8..0000000 --- a/examples/web/models/models_cubicmap.wasm +++ /dev/null diff --git a/examples/web/models/models_first_person_maze.c b/examples/web/models/models_first_person_maze.c deleted file mode 100644 index d0be66f..0000000 --- a/examples/web/models/models_first_person_maze.c +++ /dev/null @@ -1,165 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - first person maze -* -* This example has been created using raylib 2.5 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2019 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include <stdlib.h> // Required for: free() - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - -Camera camera = { 0 }; - -Model model = { 0 }; -Texture2D cubicmap = { 0 }; -Texture2D texture = { 0 }; - -Color *mapPixels = NULL; - -Vector3 mapPosition = { -16.0f, 0.0f, -8.0f }; // Set model position -Vector3 playerPosition = { 0 }; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - first person maze"); - - // Define the camera to look into our 3d world - camera = (Camera){{ 0.2f, 0.4f, 0.2f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f, 0 }; - - Image imMap = LoadImage("resources/cubicmap.png"); // Load cubicmap image (RAM) - cubicmap = LoadTextureFromImage(imMap); // Convert image to texture to display (VRAM) - Mesh mesh = GenMeshCubicmap(imMap, (Vector3){ 1.0f, 1.0f, 1.0f }); - model = LoadModelFromMesh(mesh); - - // NOTE: By default each cube is mapped to one part of texture atlas - texture = LoadTexture("resources/cubicmap_atlas.png"); // Load map texture - model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; // Set map diffuse texture - - // Get map image data to be used for collision detection - mapPixels = LoadImageColors(imMap); - UnloadImage(imMap); // Unload image from RAM - - playerPosition = camera.position; // Set player position - - SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set camera mode - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadImageColors(mapPixels); // Unload color array - - UnloadTexture(cubicmap); // Unload cubicmap texture - UnloadTexture(texture); // Unload map texture - UnloadModel(model); // Unload map model - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - Vector3 oldCamPos = camera.position; // Store old camera position - - UpdateCamera(&camera); // Update camera - - // Check player collision (we simplify to 2D collision detection) - Vector2 playerPos = { camera.position.x, camera.position.z }; - float playerRadius = 0.1f; // Collision radius (player is modelled as a cilinder for collision) - - int playerCellX = (int)(playerPos.x - mapPosition.x + 0.5f); - int playerCellY = (int)(playerPos.y - mapPosition.z + 0.5f); - - // Out-of-limits security check - if (playerCellX < 0) playerCellX = 0; - else if (playerCellX >= cubicmap.width) playerCellX = cubicmap.width - 1; - - if (playerCellY < 0) playerCellY = 0; - else if (playerCellY >= cubicmap.height) playerCellY = cubicmap.height - 1; - - // Check map collisions using image data and player position - // TODO: Improvement: Just check player surrounding cells for collision - for (int y = 0; y < cubicmap.height; y++) - { - for (int x = 0; x < cubicmap.width; x++) - { - if ((mapPixels[y*cubicmap.width + x].r == 255) && // Collision: white pixel, only check R channel - (CheckCollisionCircleRec(playerPos, playerRadius, - (Rectangle){ mapPosition.x - 0.5f + x*1.0f, mapPosition.z - 0.5f + y*1.0f, 1.0f, 1.0f }))) - { - // Collision detected, reset camera position - camera.position = oldCamPos; - } - } - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawModel(model, mapPosition, 1.0f, WHITE); // Draw maze map - //DrawCubeV(playerPosition, (Vector3){ 0.2f, 0.4f, 0.2f }, RED); // Draw player - - EndMode3D(); - - DrawTextureEx(cubicmap, (Vector2){ GetScreenWidth() - cubicmap.width*4 - 20, 20 }, 0.0f, 4.0f, WHITE); - DrawRectangleLines(GetScreenWidth() - cubicmap.width*4 - 20, 20, cubicmap.width*4, cubicmap.height*4, GREEN); - - // Draw player position radar - DrawRectangle(GetScreenWidth() - cubicmap.width*4 - 20 + playerCellX*4, 20 + playerCellY*4, 4, 4, RED); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -} diff --git a/examples/web/models/models_first_person_maze.data b/examples/web/models/models_first_person_maze.data Binary files differdeleted file mode 100644 index 97220c0..0000000 --- a/examples/web/models/models_first_person_maze.data +++ /dev/null diff --git a/examples/web/models/models_first_person_maze.html b/examples/web/models/models_first_person_maze.html deleted file mode 100644 index 95efb53..0000000 --- a/examples/web/models/models_first_person_maze.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_first_person_maze.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_first_person_maze.js b/examples/web/models/models_first_person_maze.js deleted file mode 100644 index 54af9e3..0000000 --- a/examples/web/models/models_first_person_maze.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){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 location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_first_person_maze.data";var REMOTE_PACKAGE_BASE="models_first_person_maze.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"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){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"]("/","resources",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<files.length;++i){new DataRequest(files[i]["start"],files[i]["end"],files[i]["audio"]).open("GET",files[i]["filename"])}function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);DataRequest.prototype.byteArray=byteArray;var files=metadata["files"];for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_first_person_maze.data")}Module["addRunDependency"]("datafile_models/models_first_person_maze.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"filename":"/resources/cubicmap.png","start":0,"end":164,"audio":0},{"filename":"/resources/cubicmap_atlas.png","start":164,"end":37324,"audio":0}],"remote_package_size":37324,"package_uuid":"aa253563-bfb2-4098-9751-a865cca3c169"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_first_person_maze.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["$d"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["ce"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}else{return-2}}return requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"d":___assert_fail,"K":___sys_fcntl64,"Ta":___sys_ioctl,"Ua":___sys_open,"za":_emscripten_exit_pointerlock,"_":_emscripten_get_element_css_size,"V":_emscripten_get_gamepad_status,"W":_emscripten_get_num_gamepads,"Hd":_emscripten_glActiveTexture,"Gd":_emscripten_glAttachShader,"Xd":_emscripten_glBeginQueryEXT,"Fd":_emscripten_glBindAttribLocation,"Ed":_emscripten_glBindBuffer,"Dd":_emscripten_glBindFramebuffer,"Cd":_emscripten_glBindRenderbuffer,"Bd":_emscripten_glBindTexture,"Pd":_emscripten_glBindVertexArrayOES,"Ad":_emscripten_glBlendColor,"zd":_emscripten_glBlendEquation,"yd":_emscripten_glBlendEquationSeparate,"xd":_emscripten_glBlendFunc,"wd":_emscripten_glBlendFuncSeparate,"vd":_emscripten_glBufferData,"ud":_emscripten_glBufferSubData,"td":_emscripten_glCheckFramebufferStatus,"sd":_emscripten_glClear,"rd":_emscripten_glClearColor,"qd":_emscripten_glClearDepthf,"pd":_emscripten_glClearStencil,"od":_emscripten_glColorMask,"nd":_emscripten_glCompileShader,"md":_emscripten_glCompressedTexImage2D,"ld":_emscripten_glCompressedTexSubImage2D,"kd":_emscripten_glCopyTexImage2D,"jd":_emscripten_glCopyTexSubImage2D,"id":_emscripten_glCreateProgram,"hd":_emscripten_glCreateShader,"gd":_emscripten_glCullFace,"fd":_emscripten_glDeleteBuffers,"ed":_emscripten_glDeleteFramebuffers,"dd":_emscripten_glDeleteProgram,"R":_emscripten_glDeleteQueriesEXT,"cd":_emscripten_glDeleteRenderbuffers,"bd":_emscripten_glDeleteShader,"ad":_emscripten_glDeleteTextures,"Od":_emscripten_glDeleteVertexArraysOES,"$c":_emscripten_glDepthFunc,"_c":_emscripten_glDepthMask,"Zc":_emscripten_glDepthRangef,"Yc":_emscripten_glDetachShader,"Xc":_emscripten_glDisable,"Wc":_emscripten_glDisableVertexAttribArray,"Vc":_emscripten_glDrawArrays,"Kd":_emscripten_glDrawArraysInstancedANGLE,"Ld":_emscripten_glDrawBuffersWEBGL,"Uc":_emscripten_glDrawElements,"Jd":_emscripten_glDrawElementsInstancedANGLE,"Tc":_emscripten_glEnable,"Sc":_emscripten_glEnableVertexAttribArray,"Wd":_emscripten_glEndQueryEXT,"Rc":_emscripten_glFinish,"Qc":_emscripten_glFlush,"Pc":_emscripten_glFramebufferRenderbuffer,"Oc":_emscripten_glFramebufferTexture2D,"Nc":_emscripten_glFrontFace,"Mc":_emscripten_glGenBuffers,"Kc":_emscripten_glGenFramebuffers,"S":_emscripten_glGenQueriesEXT,"Jc":_emscripten_glGenRenderbuffers,"Hc":_emscripten_glGenTextures,"Nd":_emscripten_glGenVertexArraysOES,"Lc":_emscripten_glGenerateMipmap,"Gc":_emscripten_glGetActiveAttrib,"Fc":_emscripten_glGetActiveUniform,"Ec":_emscripten_glGetAttachedShaders,"Dc":_emscripten_glGetAttribLocation,"Cc":_emscripten_glGetBooleanv,"Bc":_emscripten_glGetBufferParameteriv,"Ac":_emscripten_glGetError,"zc":_emscripten_glGetFloatv,"yc":_emscripten_glGetFramebufferAttachmentParameteriv,"xc":_emscripten_glGetIntegerv,"vc":_emscripten_glGetProgramInfoLog,"wc":_emscripten_glGetProgramiv,"Rd":_emscripten_glGetQueryObjecti64vEXT,"Td":_emscripten_glGetQueryObjectivEXT,"Qd":_emscripten_glGetQueryObjectui64vEXT,"Sd":_emscripten_glGetQueryObjectuivEXT,"Ud":_emscripten_glGetQueryivEXT,"uc":_emscripten_glGetRenderbufferParameteriv,"sc":_emscripten_glGetShaderInfoLog,"rc":_emscripten_glGetShaderPrecisionFormat,"qc":_emscripten_glGetShaderSource,"tc":_emscripten_glGetShaderiv,"pc":_emscripten_glGetString,"oc":_emscripten_glGetTexParameterfv,"nc":_emscripten_glGetTexParameteriv,"kc":_emscripten_glGetUniformLocation,"mc":_emscripten_glGetUniformfv,"lc":_emscripten_glGetUniformiv,"hc":_emscripten_glGetVertexAttribPointerv,"jc":_emscripten_glGetVertexAttribfv,"ic":_emscripten_glGetVertexAttribiv,"gc":_emscripten_glHint,"fc":_emscripten_glIsBuffer,"ec":_emscripten_glIsEnabled,"dc":_emscripten_glIsFramebuffer,"cc":_emscripten_glIsProgram,"Yd":_emscripten_glIsQueryEXT,"bc":_emscripten_glIsRenderbuffer,"ac":_emscripten_glIsShader,"$b":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"_b":_emscripten_glLineWidth,"Zb":_emscripten_glLinkProgram,"Yb":_emscripten_glPixelStorei,"Xb":_emscripten_glPolygonOffset,"Vd":_emscripten_glQueryCounterEXT,"Wb":_emscripten_glReadPixels,"Ub":_emscripten_glReleaseShaderCompiler,"Tb":_emscripten_glRenderbufferStorage,"Sb":_emscripten_glSampleCoverage,"Rb":_emscripten_glScissor,"Qb":_emscripten_glShaderBinary,"Pb":_emscripten_glShaderSource,"Ob":_emscripten_glStencilFunc,"Nb":_emscripten_glStencilFuncSeparate,"Mb":_emscripten_glStencilMask,"Lb":_emscripten_glStencilMaskSeparate,"Jb":_emscripten_glStencilOp,"Ib":_emscripten_glStencilOpSeparate,"Hb":_emscripten_glTexImage2D,"Gb":_emscripten_glTexParameterf,"Fb":_emscripten_glTexParameterfv,"Eb":_emscripten_glTexParameteri,"Db":_emscripten_glTexParameteriv,"Cb":_emscripten_glTexSubImage2D,"Bb":_emscripten_glUniform1f,"Ab":_emscripten_glUniform1fv,"yb":_emscripten_glUniform1i,"xb":_emscripten_glUniform1iv,"wb":_emscripten_glUniform2f,"vb":_emscripten_glUniform2fv,"ub":_emscripten_glUniform2i,"tb":_emscripten_glUniform2iv,"sb":_emscripten_glUniform3f,"rb":_emscripten_glUniform3fv,"qb":_emscripten_glUniform3i,"pb":_emscripten_glUniform3iv,"nb":_emscripten_glUniform4f,"mb":_emscripten_glUniform4fv,"lb":_emscripten_glUniform4i,"kb":_emscripten_glUniform4iv,"jb":_emscripten_glUniformMatrix2fv,"ib":_emscripten_glUniformMatrix3fv,"hb":_emscripten_glUniformMatrix4fv,"gb":_emscripten_glUseProgram,"fb":_emscripten_glValidateProgram,"eb":_emscripten_glVertexAttrib1f,"cb":_emscripten_glVertexAttrib1fv,"bb":_emscripten_glVertexAttrib2f,"ab":_emscripten_glVertexAttrib2fv,"$a":_emscripten_glVertexAttrib3f,"_a":_emscripten_glVertexAttrib3fv,"Za":_emscripten_glVertexAttrib4f,"Ya":_emscripten_glVertexAttrib4fv,"Id":_emscripten_glVertexAttribDivisorANGLE,"Xa":_emscripten_glVertexAttribPointer,"Wa":_emscripten_glViewport,"Pa":_emscripten_memcpy_big,"Aa":_emscripten_request_pointerlock,"Qa":_emscripten_resize_heap,"x":_emscripten_run_script,"X":_emscripten_sample_gamepad_data,"wa":_emscripten_set_click_callback_on_thread,"ya":_emscripten_set_fullscreenchange_callback_on_thread,"ra":_emscripten_set_gamepadconnected_callback_on_thread,"qa":_emscripten_set_gamepaddisconnected_callback_on_thread,"xa":_emscripten_set_keydown_callback_on_thread,"_d":_emscripten_set_main_loop,"sa":_emscripten_set_touchcancel_callback_on_thread,"ua":_emscripten_set_touchend_callback_on_thread,"ta":_emscripten_set_touchmove_callback_on_thread,"va":_emscripten_set_touchstart_callback_on_thread,"Ra":_emscripten_thread_sleep,"T":_exit,"L":_fd_close,"Sa":_fd_read,"Oa":_fd_seek,"J":_fd_write,"p":_glActiveTexture,"C":_glAttachShader,"k":_glBindAttribLocation,"a":_glBindBuffer,"j":_glBindTexture,"Kb":_glBlendFunc,"e":_glBufferData,"v":_glBufferSubData,"M":_glClear,"N":_glClearColor,"db":_glClearDepthf,"Fa":_glCompileShader,"La":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"zb":_glCullFace,"m":_glDeleteBuffers,"F":_glDeleteProgram,"G":_glDeleteShader,"I":_glDeleteTextures,"Vb":_glDepthFunc,"H":_glDetachShader,"O":_glDisable,"h":_glDisableVertexAttribArray,"Q":_glDrawArrays,"P":_glDrawElements,"w":_glEnable,"b":_glEnableVertexAttribArray,"ob":_glFrontFace,"f":_glGenBuffers,"Na":_glGenTextures,"u":_glGetAttribLocation,"Ic":_glGetFloatv,"Ba":_glGetProgramInfoLog,"E":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"D":_glGetShaderiv,"n":_glGetString,"t":_glGetUniformLocation,"Ca":_glLinkProgram,"Va":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ma":_glTexImage2D,"o":_glTexParameteri,"y":_glUniform1i,"q":_glUniform4f,"r":_glUniformMatrix4fv,"l":_glUseProgram,"Ja":_glVertexAttrib2f,"Ka":_glVertexAttrib3f,"s":_glVertexAttrib4f,"c":_glVertexAttribPointer,"Zd":_glViewport,"A":_glfwCreateWindow,"na":_glfwDefaultWindowHints,"Z":_glfwDestroyWindow,"B":_glfwGetPrimaryMonitor,"i":_glfwGetTime,"ma":_glfwGetVideoModes,"oa":_glfwInit,"ba":_glfwMakeContextCurrent,"ga":_glfwSetCharCallback,"ca":_glfwSetCursorEnterCallback,"ea":_glfwSetCursorPosCallback,"ia":_glfwSetDropCallback,"pa":_glfwSetErrorCallback,"ha":_glfwSetKeyCallback,"fa":_glfwSetMouseButtonCallback,"da":_glfwSetScrollCallback,"ja":_glfwSetWindowFocusCallback,"ka":_glfwSetWindowIconifyCallback,"U":_glfwSetWindowShouldClose,"la":_glfwSetWindowSizeCallback,"Y":_glfwSwapBuffers,"aa":_glfwSwapInterval,"z":_glfwTerminate,"g":_glfwWindowHint,"$":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["ae"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["be"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["de"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ee"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["fe"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ge"]).apply(null,arguments)};Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_first_person_maze.wasm b/examples/web/models/models_first_person_maze.wasm Binary files differdeleted file mode 100644 index 1389c2d..0000000 --- a/examples/web/models/models_first_person_maze.wasm +++ /dev/null diff --git a/examples/web/models/models_geometric_shapes.c b/examples/web/models/models_geometric_shapes.c deleted file mode 100644 index 612a19c..0000000 --- a/examples/web/models/models_geometric_shapes.c +++ /dev/null @@ -1,108 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Draw some basic geometric shapes (cube, sphere, cylinder...) (adapted for HTML5 platform) -* -* This example has been created using raylib 1.0 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2014 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// Define the camera to look into our 3d world -Camera camera = { 0 }; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - geometric shapes"); - - camera.position = (Vector3){ 0.0f, 10.0f, 10.0f }; - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; - camera.fovy = 45.0f; - camera.projection = CAMERA_PERSPECTIVE; - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - // TODO: Update your variables here - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawCube((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, RED); - DrawCubeWires((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, GOLD); - DrawCubeWires((Vector3){-4.0f, 0.0f, -2.0f}, 3.0f, 6.0f, 2.0f, MAROON); - - DrawSphere((Vector3){-1.0f, 0.0f, -2.0f}, 1.0f, GREEN); - DrawSphereWires((Vector3){1.0f, 0.0f, 2.0f}, 2.0f, 16, 16, LIME); - - DrawCylinder((Vector3){4.0f, 0.0f, -2.0f}, 1.0f, 2.0f, 3.0f, 4, SKYBLUE); - DrawCylinderWires((Vector3){4.0f, 0.0f, -2.0f}, 1.0f, 2.0f, 3.0f, 4, DARKBLUE); - DrawCylinderWires((Vector3){4.5f, -1.0f, 2.0f}, 1.0f, 1.0f, 2.0f, 6, BROWN); - - DrawCylinder((Vector3){1.0f, 0.0f, -4.0f}, 0.0f, 1.5f, 3.0f, 8, GOLD); - DrawCylinderWires((Vector3){1.0f, 0.0f, -4.0f}, 0.0f, 1.5f, 3.0f, 8, PINK); - - DrawGrid(10, 1.0f); // Draw a grid - - EndMode3D(); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -}
\ No newline at end of file diff --git a/examples/web/models/models_geometric_shapes.html b/examples/web/models/models_geometric_shapes.html deleted file mode 100644 index 1207668..0000000 --- a/examples/web/models/models_geometric_shapes.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_geometric_shapes.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_geometric_shapes.js b/examples/web/models/models_geometric_shapes.js deleted file mode 100644 index a9e37cd..0000000 --- a/examples/web/models/models_geometric_shapes.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_geometric_shapes.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["Xd"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["_d"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"n":___assert_fail,"F":___sys_fcntl64,"Sa":___sys_ioctl,"Ta":___sys_open,"za":_emscripten_exit_pointerlock,"Z":_emscripten_get_element_css_size,"U":_emscripten_get_gamepad_status,"V":_emscripten_get_num_gamepads,"Hd":_emscripten_glActiveTexture,"Gd":_emscripten_glAttachShader,"N":_emscripten_glBeginQueryEXT,"Fd":_emscripten_glBindAttribLocation,"Ed":_emscripten_glBindBuffer,"Dd":_emscripten_glBindFramebuffer,"Cd":_emscripten_glBindRenderbuffer,"Bd":_emscripten_glBindTexture,"Pd":_emscripten_glBindVertexArrayOES,"zd":_emscripten_glBlendColor,"yd":_emscripten_glBlendEquation,"xd":_emscripten_glBlendEquationSeparate,"wd":_emscripten_glBlendFunc,"vd":_emscripten_glBlendFuncSeparate,"ud":_emscripten_glBufferData,"td":_emscripten_glBufferSubData,"sd":_emscripten_glCheckFramebufferStatus,"rd":_emscripten_glClear,"qd":_emscripten_glClearColor,"od":_emscripten_glClearDepthf,"nd":_emscripten_glClearStencil,"md":_emscripten_glColorMask,"ld":_emscripten_glCompileShader,"kd":_emscripten_glCompressedTexImage2D,"jd":_emscripten_glCompressedTexSubImage2D,"id":_emscripten_glCopyTexImage2D,"hd":_emscripten_glCopyTexSubImage2D,"gd":_emscripten_glCreateProgram,"fd":_emscripten_glCreateShader,"ed":_emscripten_glCullFace,"dd":_emscripten_glDeleteBuffers,"cd":_emscripten_glDeleteFramebuffers,"bd":_emscripten_glDeleteProgram,"P":_emscripten_glDeleteQueriesEXT,"ad":_emscripten_glDeleteRenderbuffers,"$c":_emscripten_glDeleteShader,"_c":_emscripten_glDeleteTextures,"Od":_emscripten_glDeleteVertexArraysOES,"Zc":_emscripten_glDepthFunc,"Yc":_emscripten_glDepthMask,"Xc":_emscripten_glDepthRangef,"Wc":_emscripten_glDetachShader,"Vc":_emscripten_glDisable,"Uc":_emscripten_glDisableVertexAttribArray,"Tc":_emscripten_glDrawArrays,"Kd":_emscripten_glDrawArraysInstancedANGLE,"Ld":_emscripten_glDrawBuffersWEBGL,"Sc":_emscripten_glDrawElements,"Jd":_emscripten_glDrawElementsInstancedANGLE,"Rc":_emscripten_glEnable,"Qc":_emscripten_glEnableVertexAttribArray,"M":_emscripten_glEndQueryEXT,"Pc":_emscripten_glFinish,"Oc":_emscripten_glFlush,"Nc":_emscripten_glFramebufferRenderbuffer,"Mc":_emscripten_glFramebufferTexture2D,"Lc":_emscripten_glFrontFace,"Kc":_emscripten_glGenBuffers,"Ic":_emscripten_glGenFramebuffers,"Q":_emscripten_glGenQueriesEXT,"Hc":_emscripten_glGenRenderbuffers,"Gc":_emscripten_glGenTextures,"Nd":_emscripten_glGenVertexArraysOES,"Jc":_emscripten_glGenerateMipmap,"Fc":_emscripten_glGetActiveAttrib,"Ec":_emscripten_glGetActiveUniform,"Dc":_emscripten_glGetAttachedShaders,"Bc":_emscripten_glGetAttribLocation,"Ac":_emscripten_glGetBooleanv,"zc":_emscripten_glGetBufferParameteriv,"yc":_emscripten_glGetError,"xc":_emscripten_glGetFloatv,"wc":_emscripten_glGetFramebufferAttachmentParameteriv,"vc":_emscripten_glGetIntegerv,"tc":_emscripten_glGetProgramInfoLog,"uc":_emscripten_glGetProgramiv,"Rd":_emscripten_glGetQueryObjecti64vEXT,"Td":_emscripten_glGetQueryObjectivEXT,"Qd":_emscripten_glGetQueryObjectui64vEXT,"Sd":_emscripten_glGetQueryObjectuivEXT,"Ud":_emscripten_glGetQueryivEXT,"sc":_emscripten_glGetRenderbufferParameteriv,"qc":_emscripten_glGetShaderInfoLog,"pc":_emscripten_glGetShaderPrecisionFormat,"oc":_emscripten_glGetShaderSource,"rc":_emscripten_glGetShaderiv,"nc":_emscripten_glGetString,"mc":_emscripten_glGetTexParameterfv,"lc":_emscripten_glGetTexParameteriv,"ic":_emscripten_glGetUniformLocation,"kc":_emscripten_glGetUniformfv,"jc":_emscripten_glGetUniformiv,"fc":_emscripten_glGetVertexAttribPointerv,"hc":_emscripten_glGetVertexAttribfv,"gc":_emscripten_glGetVertexAttribiv,"ec":_emscripten_glHint,"dc":_emscripten_glIsBuffer,"cc":_emscripten_glIsEnabled,"bc":_emscripten_glIsFramebuffer,"ac":_emscripten_glIsProgram,"O":_emscripten_glIsQueryEXT,"$b":_emscripten_glIsRenderbuffer,"_b":_emscripten_glIsShader,"Zb":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"Yb":_emscripten_glLineWidth,"Xb":_emscripten_glLinkProgram,"Wb":_emscripten_glPixelStorei,"Vb":_emscripten_glPolygonOffset,"L":_emscripten_glQueryCounterEXT,"Ub":_emscripten_glReadPixels,"Tb":_emscripten_glReleaseShaderCompiler,"Sb":_emscripten_glRenderbufferStorage,"Rb":_emscripten_glSampleCoverage,"Qb":_emscripten_glScissor,"Ob":_emscripten_glShaderBinary,"Nb":_emscripten_glShaderSource,"Mb":_emscripten_glStencilFunc,"Lb":_emscripten_glStencilFuncSeparate,"Kb":_emscripten_glStencilMask,"Jb":_emscripten_glStencilMaskSeparate,"Ib":_emscripten_glStencilOp,"Hb":_emscripten_glStencilOpSeparate,"Gb":_emscripten_glTexImage2D,"Fb":_emscripten_glTexParameterf,"Db":_emscripten_glTexParameterfv,"Cb":_emscripten_glTexParameteri,"Bb":_emscripten_glTexParameteriv,"Ab":_emscripten_glTexSubImage2D,"zb":_emscripten_glUniform1f,"yb":_emscripten_glUniform1fv,"xb":_emscripten_glUniform1i,"wb":_emscripten_glUniform1iv,"vb":_emscripten_glUniform2f,"ub":_emscripten_glUniform2fv,"sb":_emscripten_glUniform2i,"rb":_emscripten_glUniform2iv,"qb":_emscripten_glUniform3f,"pb":_emscripten_glUniform3fv,"ob":_emscripten_glUniform3i,"nb":_emscripten_glUniform3iv,"mb":_emscripten_glUniform4f,"lb":_emscripten_glUniform4fv,"kb":_emscripten_glUniform4i,"jb":_emscripten_glUniform4iv,"hb":_emscripten_glUniformMatrix2fv,"gb":_emscripten_glUniformMatrix3fv,"fb":_emscripten_glUniformMatrix4fv,"eb":_emscripten_glUseProgram,"db":_emscripten_glValidateProgram,"cb":_emscripten_glVertexAttrib1f,"bb":_emscripten_glVertexAttrib1fv,"ab":_emscripten_glVertexAttrib2f,"$a":_emscripten_glVertexAttrib2fv,"_a":_emscripten_glVertexAttrib3f,"Ya":_emscripten_glVertexAttrib3fv,"Xa":_emscripten_glVertexAttrib4f,"Wa":_emscripten_glVertexAttrib4fv,"Id":_emscripten_glVertexAttribDivisorANGLE,"Va":_emscripten_glVertexAttribPointer,"Ua":_emscripten_glViewport,"Na":_emscripten_memcpy_big,"Oa":_emscripten_resize_heap,"t":_emscripten_run_script,"W":_emscripten_sample_gamepad_data,"wa":_emscripten_set_click_callback_on_thread,"ya":_emscripten_set_fullscreenchange_callback_on_thread,"ra":_emscripten_set_gamepadconnected_callback_on_thread,"qa":_emscripten_set_gamepaddisconnected_callback_on_thread,"xa":_emscripten_set_keydown_callback_on_thread,"Wd":_emscripten_set_main_loop,"sa":_emscripten_set_touchcancel_callback_on_thread,"ua":_emscripten_set_touchend_callback_on_thread,"ta":_emscripten_set_touchmove_callback_on_thread,"va":_emscripten_set_touchstart_callback_on_thread,"Pa":_emscripten_thread_sleep,"R":_exit,"G":_fd_close,"Ra":_fd_read,"Ma":_fd_seek,"E":_fd_write,"K":_glActiveTexture,"x":_glAttachShader,"f":_glBindAttribLocation,"a":_glBindBuffer,"g":_glBindTexture,"Eb":_glBlendFunc,"k":_glBufferData,"r":_glBufferSubData,"H":_glClear,"I":_glClearColor,"Za":_glClearDepthf,"Fa":_glCompileShader,"Ja":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"tb":_glCullFace,"i":_glDeleteBuffers,"A":_glDeleteProgram,"B":_glDeleteShader,"D":_glDeleteTextures,"Pb":_glDepthFunc,"C":_glDetachShader,"J":_glDisable,"j":_glDisableVertexAttribArray,"Ad":_glDrawArrays,"pd":_glDrawElements,"s":_glEnable,"d":_glEnableVertexAttribArray,"ib":_glFrontFace,"l":_glGenBuffers,"La":_glGenTextures,"q":_glGetAttribLocation,"Cc":_glGetFloatv,"Aa":_glGetProgramInfoLog,"z":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"y":_glGetShaderiv,"h":_glGetString,"p":_glGetUniformLocation,"Ba":_glLinkProgram,"Qa":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ka":_glTexImage2D,"m":_glTexParameteri,"T":_glUniform1i,"aa":_glUniform4f,"Ca":_glUniformMatrix4fv,"o":_glUseProgram,"e":_glVertexAttribPointer,"Vd":_glViewport,"v":_glfwCreateWindow,"na":_glfwDefaultWindowHints,"Y":_glfwDestroyWindow,"w":_glfwGetPrimaryMonitor,"c":_glfwGetTime,"ma":_glfwGetVideoModes,"oa":_glfwInit,"ba":_glfwMakeContextCurrent,"ga":_glfwSetCharCallback,"ca":_glfwSetCursorEnterCallback,"ea":_glfwSetCursorPosCallback,"ia":_glfwSetDropCallback,"pa":_glfwSetErrorCallback,"ha":_glfwSetKeyCallback,"fa":_glfwSetMouseButtonCallback,"da":_glfwSetScrollCallback,"ja":_glfwSetWindowFocusCallback,"ka":_glfwSetWindowIconifyCallback,"S":_glfwSetWindowShouldClose,"la":_glfwSetWindowSizeCallback,"X":_glfwSwapBuffers,"$":_glfwSwapInterval,"u":_glfwTerminate,"b":_glfwWindowHint,"_":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["Yd"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["Zd"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["$d"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ae"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["be"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ce"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_geometric_shapes.wasm b/examples/web/models/models_geometric_shapes.wasm Binary files differdeleted file mode 100644 index 782513b..0000000 --- a/examples/web/models/models_geometric_shapes.wasm +++ /dev/null diff --git a/examples/web/models/models_heightmap.c b/examples/web/models/models_heightmap.c deleted file mode 100644 index c048961..0000000 --- a/examples/web/models/models_heightmap.c +++ /dev/null @@ -1,112 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Heightmap loading and drawing (adapted for HTML5 platform) -* -* This example has been created using raylib 1.3 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2017 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// Define our custom camera to look into our 3d world -Camera camera = {{ 18.0f, 16.0f, 18.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; - -Texture2D texture = { 0 }; -Model model = { 0 }; - -Vector3 mapPosition = { -8.0f, 0.0f, -8.0f }; // Set model position (depends on model scaling!) - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - heightmap loading and drawing"); - - Image image = LoadImage("resources/heightmap.png"); // Load heightmap image (RAM) - texture = LoadTextureFromImage(image); // Convert image to texture (VRAM) - - Mesh mesh = GenMeshHeightmap(image, (Vector3){ 16, 8, 16 }); // Generate heightmap mesh (RAM and VRAM) - model = LoadModelFromMesh(mesh); // Load model from generated mesh - model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; // Set map diffuse texture - - UnloadImage(image); // Unload heightmap image from RAM, already uploaded to VRAM - - SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Unload texture - UnloadModel(model); // Unload model - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera); // Update internal camera and our camera - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawModel(model, mapPosition, 1.0f, RED); - - DrawGrid(20, 1.0f); - - EndMode3D(); - - DrawTexture(texture, screenWidth - texture.width - 20, 20, WHITE); - DrawRectangleLines(screenWidth - texture.width - 20, 20, texture.width, texture.height, GREEN); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -}
\ No newline at end of file diff --git a/examples/web/models/models_heightmap.data b/examples/web/models/models_heightmap.data Binary files differdeleted file mode 100644 index 474db87..0000000 --- a/examples/web/models/models_heightmap.data +++ /dev/null diff --git a/examples/web/models/models_heightmap.html b/examples/web/models/models_heightmap.html deleted file mode 100644 index 724e0b1..0000000 --- a/examples/web/models/models_heightmap.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_heightmap.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_heightmap.js b/examples/web/models/models_heightmap.js deleted file mode 100644 index 20ecde1..0000000 --- a/examples/web/models/models_heightmap.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){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 location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_heightmap.data";var REMOTE_PACKAGE_BASE="models_heightmap.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"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){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"]("/","resources",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<files.length;++i){new DataRequest(files[i]["start"],files[i]["end"],files[i]["audio"]).open("GET",files[i]["filename"])}function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);DataRequest.prototype.byteArray=byteArray;var files=metadata["files"];for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_heightmap.data")}Module["addRunDependency"]("datafile_models/models_heightmap.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"filename":"/resources/heightmap.png","start":0,"end":10883,"audio":0}],"remote_package_size":10883,"package_uuid":"b9346f95-b741-4d1a-b708-ed3ef209117e"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_heightmap.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["_d"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["be"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"d":___assert_fail,"L":___sys_fcntl64,"Ta":___sys_ioctl,"Va":___sys_open,"C":_emscripten_exit_pointerlock,"aa":_emscripten_get_element_css_size,"X":_emscripten_get_gamepad_status,"Y":_emscripten_get_num_gamepads,"Hd":_emscripten_glActiveTexture,"Gd":_emscripten_glAttachShader,"Xd":_emscripten_glBeginQueryEXT,"Fd":_emscripten_glBindAttribLocation,"Ed":_emscripten_glBindBuffer,"Dd":_emscripten_glBindFramebuffer,"Cd":_emscripten_glBindRenderbuffer,"Bd":_emscripten_glBindTexture,"Pd":_emscripten_glBindVertexArrayOES,"Ad":_emscripten_glBlendColor,"zd":_emscripten_glBlendEquation,"yd":_emscripten_glBlendEquationSeparate,"xd":_emscripten_glBlendFunc,"wd":_emscripten_glBlendFuncSeparate,"vd":_emscripten_glBufferData,"ud":_emscripten_glBufferSubData,"td":_emscripten_glCheckFramebufferStatus,"sd":_emscripten_glClear,"rd":_emscripten_glClearColor,"qd":_emscripten_glClearDepthf,"pd":_emscripten_glClearStencil,"od":_emscripten_glColorMask,"nd":_emscripten_glCompileShader,"md":_emscripten_glCompressedTexImage2D,"ld":_emscripten_glCompressedTexSubImage2D,"kd":_emscripten_glCopyTexImage2D,"jd":_emscripten_glCopyTexSubImage2D,"id":_emscripten_glCreateProgram,"hd":_emscripten_glCreateShader,"gd":_emscripten_glCullFace,"fd":_emscripten_glDeleteBuffers,"ed":_emscripten_glDeleteFramebuffers,"dd":_emscripten_glDeleteProgram,"T":_emscripten_glDeleteQueriesEXT,"cd":_emscripten_glDeleteRenderbuffers,"bd":_emscripten_glDeleteShader,"ad":_emscripten_glDeleteTextures,"Od":_emscripten_glDeleteVertexArraysOES,"$c":_emscripten_glDepthFunc,"_c":_emscripten_glDepthMask,"Zc":_emscripten_glDepthRangef,"Yc":_emscripten_glDetachShader,"Xc":_emscripten_glDisable,"Wc":_emscripten_glDisableVertexAttribArray,"Vc":_emscripten_glDrawArrays,"Kd":_emscripten_glDrawArraysInstancedANGLE,"Ld":_emscripten_glDrawBuffersWEBGL,"Uc":_emscripten_glDrawElements,"Jd":_emscripten_glDrawElementsInstancedANGLE,"Tc":_emscripten_glEnable,"Sc":_emscripten_glEnableVertexAttribArray,"Wd":_emscripten_glEndQueryEXT,"Rc":_emscripten_glFinish,"Qc":_emscripten_glFlush,"Pc":_emscripten_glFramebufferRenderbuffer,"Oc":_emscripten_glFramebufferTexture2D,"Nc":_emscripten_glFrontFace,"Mc":_emscripten_glGenBuffers,"Kc":_emscripten_glGenFramebuffers,"U":_emscripten_glGenQueriesEXT,"Jc":_emscripten_glGenRenderbuffers,"Ic":_emscripten_glGenTextures,"Nd":_emscripten_glGenVertexArraysOES,"Lc":_emscripten_glGenerateMipmap,"Gc":_emscripten_glGetActiveAttrib,"Fc":_emscripten_glGetActiveUniform,"Ec":_emscripten_glGetAttachedShaders,"Dc":_emscripten_glGetAttribLocation,"Cc":_emscripten_glGetBooleanv,"Bc":_emscripten_glGetBufferParameteriv,"Ac":_emscripten_glGetError,"zc":_emscripten_glGetFloatv,"yc":_emscripten_glGetFramebufferAttachmentParameteriv,"xc":_emscripten_glGetIntegerv,"vc":_emscripten_glGetProgramInfoLog,"wc":_emscripten_glGetProgramiv,"Rd":_emscripten_glGetQueryObjecti64vEXT,"Td":_emscripten_glGetQueryObjectivEXT,"Qd":_emscripten_glGetQueryObjectui64vEXT,"Sd":_emscripten_glGetQueryObjectuivEXT,"Ud":_emscripten_glGetQueryivEXT,"uc":_emscripten_glGetRenderbufferParameteriv,"sc":_emscripten_glGetShaderInfoLog,"rc":_emscripten_glGetShaderPrecisionFormat,"qc":_emscripten_glGetShaderSource,"tc":_emscripten_glGetShaderiv,"pc":_emscripten_glGetString,"oc":_emscripten_glGetTexParameterfv,"nc":_emscripten_glGetTexParameteriv,"kc":_emscripten_glGetUniformLocation,"mc":_emscripten_glGetUniformfv,"lc":_emscripten_glGetUniformiv,"hc":_emscripten_glGetVertexAttribPointerv,"jc":_emscripten_glGetVertexAttribfv,"ic":_emscripten_glGetVertexAttribiv,"gc":_emscripten_glHint,"fc":_emscripten_glIsBuffer,"ec":_emscripten_glIsEnabled,"dc":_emscripten_glIsFramebuffer,"cc":_emscripten_glIsProgram,"S":_emscripten_glIsQueryEXT,"bc":_emscripten_glIsRenderbuffer,"ac":_emscripten_glIsShader,"$b":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"_b":_emscripten_glLineWidth,"Zb":_emscripten_glLinkProgram,"Yb":_emscripten_glPixelStorei,"Xb":_emscripten_glPolygonOffset,"Vd":_emscripten_glQueryCounterEXT,"Wb":_emscripten_glReadPixels,"Vb":_emscripten_glReleaseShaderCompiler,"Tb":_emscripten_glRenderbufferStorage,"Sb":_emscripten_glSampleCoverage,"Rb":_emscripten_glScissor,"Qb":_emscripten_glShaderBinary,"Pb":_emscripten_glShaderSource,"Ob":_emscripten_glStencilFunc,"Nb":_emscripten_glStencilFuncSeparate,"Mb":_emscripten_glStencilMask,"Lb":_emscripten_glStencilMaskSeparate,"Kb":_emscripten_glStencilOp,"Ib":_emscripten_glStencilOpSeparate,"Hb":_emscripten_glTexImage2D,"Gb":_emscripten_glTexParameterf,"Fb":_emscripten_glTexParameterfv,"Eb":_emscripten_glTexParameteri,"Db":_emscripten_glTexParameteriv,"Cb":_emscripten_glTexSubImage2D,"Bb":_emscripten_glUniform1f,"Ab":_emscripten_glUniform1fv,"zb":_emscripten_glUniform1i,"xb":_emscripten_glUniform1iv,"wb":_emscripten_glUniform2f,"vb":_emscripten_glUniform2fv,"ub":_emscripten_glUniform2i,"tb":_emscripten_glUniform2iv,"sb":_emscripten_glUniform3f,"rb":_emscripten_glUniform3fv,"qb":_emscripten_glUniform3i,"pb":_emscripten_glUniform3iv,"ob":_emscripten_glUniform4f,"mb":_emscripten_glUniform4fv,"lb":_emscripten_glUniform4i,"kb":_emscripten_glUniform4iv,"jb":_emscripten_glUniformMatrix2fv,"ib":_emscripten_glUniformMatrix3fv,"hb":_emscripten_glUniformMatrix4fv,"gb":_emscripten_glUseProgram,"fb":_emscripten_glValidateProgram,"eb":_emscripten_glVertexAttrib1f,"db":_emscripten_glVertexAttrib1fv,"bb":_emscripten_glVertexAttrib2f,"ab":_emscripten_glVertexAttrib2fv,"$a":_emscripten_glVertexAttrib3f,"_a":_emscripten_glVertexAttrib3fv,"Za":_emscripten_glVertexAttrib4f,"Ya":_emscripten_glVertexAttrib4fv,"Id":_emscripten_glVertexAttribDivisorANGLE,"Xa":_emscripten_glVertexAttribPointer,"Wa":_emscripten_glViewport,"Pa":_emscripten_memcpy_big,"Qa":_emscripten_resize_heap,"x":_emscripten_run_script,"Z":_emscripten_sample_gamepad_data,"ya":_emscripten_set_click_callback_on_thread,"Aa":_emscripten_set_fullscreenchange_callback_on_thread,"ta":_emscripten_set_gamepadconnected_callback_on_thread,"sa":_emscripten_set_gamepaddisconnected_callback_on_thread,"za":_emscripten_set_keydown_callback_on_thread,"Zd":_emscripten_set_main_loop,"ua":_emscripten_set_touchcancel_callback_on_thread,"wa":_emscripten_set_touchend_callback_on_thread,"va":_emscripten_set_touchmove_callback_on_thread,"xa":_emscripten_set_touchstart_callback_on_thread,"Ra":_emscripten_thread_sleep,"V":_exit,"M":_fd_close,"Sa":_fd_read,"Oa":_fd_seek,"K":_fd_write,"p":_glActiveTexture,"D":_glAttachShader,"k":_glBindAttribLocation,"a":_glBindBuffer,"j":_glBindTexture,"Jb":_glBlendFunc,"e":_glBufferData,"v":_glBufferSubData,"N":_glClear,"O":_glClearColor,"cb":_glClearDepthf,"Fa":_glCompileShader,"La":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"yb":_glCullFace,"m":_glDeleteBuffers,"G":_glDeleteProgram,"H":_glDeleteShader,"J":_glDeleteTextures,"Ub":_glDepthFunc,"I":_glDetachShader,"P":_glDisable,"h":_glDisableVertexAttribArray,"R":_glDrawArrays,"Q":_glDrawElements,"w":_glEnable,"b":_glEnableVertexAttribArray,"nb":_glFrontFace,"f":_glGenBuffers,"Na":_glGenTextures,"u":_glGetAttribLocation,"Hc":_glGetFloatv,"Ba":_glGetProgramInfoLog,"F":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"E":_glGetShaderiv,"n":_glGetString,"t":_glGetUniformLocation,"Ca":_glLinkProgram,"Ua":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ma":_glTexImage2D,"o":_glTexParameteri,"y":_glUniform1i,"q":_glUniform4f,"r":_glUniformMatrix4fv,"l":_glUseProgram,"Ja":_glVertexAttrib2f,"Ka":_glVertexAttrib3f,"s":_glVertexAttrib4f,"c":_glVertexAttribPointer,"Yd":_glViewport,"A":_glfwCreateWindow,"pa":_glfwDefaultWindowHints,"$":_glfwDestroyWindow,"B":_glfwGetPrimaryMonitor,"i":_glfwGetTime,"oa":_glfwGetVideoModes,"qa":_glfwInit,"da":_glfwMakeContextCurrent,"ia":_glfwSetCharCallback,"ea":_glfwSetCursorEnterCallback,"ga":_glfwSetCursorPosCallback,"ka":_glfwSetDropCallback,"ra":_glfwSetErrorCallback,"ja":_glfwSetKeyCallback,"ha":_glfwSetMouseButtonCallback,"fa":_glfwSetScrollCallback,"la":_glfwSetWindowFocusCallback,"ma":_glfwSetWindowIconifyCallback,"W":_glfwSetWindowShouldClose,"na":_glfwSetWindowSizeCallback,"_":_glfwSwapBuffers,"ca":_glfwSwapInterval,"z":_glfwTerminate,"g":_glfwWindowHint,"ba":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["$d"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["ae"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ce"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["de"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ee"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["fe"]).apply(null,arguments)};Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_heightmap.wasm b/examples/web/models/models_heightmap.wasm Binary files differdeleted file mode 100644 index ff3a0b3..0000000 --- a/examples/web/models/models_heightmap.wasm +++ /dev/null diff --git a/examples/web/models/models_loading.c b/examples/web/models/models_loading.c deleted file mode 100644 index 439bf49..0000000 --- a/examples/web/models/models_loading.c +++ /dev/null @@ -1,177 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Models loading -* -* raylib supports multiple models file formats: -* -* - OBJ > Text file, must include vertex position-texcoords-normals information, -* if files references some .mtl materials file, it will be loaded (or try to) -* - GLTF > Modern text/binary file format, includes lot of information and it could -* also reference external files, raylib will try loading mesh and materials data -* - IQM > Binary file format including mesh vertex data but also animation data, -* raylib can load .iqm animations. -* -* This example has been created using raylib 2.6 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2014-2019 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -static Camera camera = { 0 }; - -static Model model = { 0 }; -static Texture2D texture = { 0 }; -static Vector3 position = { 0.0f, 0.0f, 0.0f }; - -static BoundingBox bounds = { 0 }; - -static bool selected = false; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [models] example - models loading"); - - // Define the camera to look into our 3d world - camera.position = (Vector3){ 50.0f, 50.0f, 50.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 10.0f, 0.0f }; // Camera looking at point - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) - camera.fovy = 45.0f; // Camera field-of-view Y - camera.projection = CAMERA_PERSPECTIVE; // Camera mode type - - model = LoadModel("resources/models/castle.obj"); // Load model - texture = LoadTexture("resources/models/castle_diffuse.png"); // Load model texture - model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; // Set map diffuse texture - - bounds = GetMeshBoundingBox(model.meshes[0]); // Set model bounds - - // NOTE: bounds are calculated from the original size of the model, - // if model is scaled on drawing, bounds must be also scaled - - SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Unload texture - UnloadModel(model); // Unload model - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definitions -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera); - - // Load new models/textures on drag&drop - if (IsFileDropped()) - { - int count = 0; - char **droppedFiles = GetDroppedFiles(&count); - - if (count == 1) // Only support one file dropped - { - if (IsFileExtension(droppedFiles[0], ".obj") || - IsFileExtension(droppedFiles[0], ".gltf") || - IsFileExtension(droppedFiles[0], ".iqm")) // Model file formats supported - { - UnloadModel(model); // Unload previous model - model = LoadModel(droppedFiles[0]); // Load new model - model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; // Set current map diffuse texture - - bounds = GetMeshBoundingBox(model.meshes[0]); - - // TODO: Move camera position from target enough distance to visualize model properly - } - else if (IsFileExtension(droppedFiles[0], ".png")) // Texture file formats supported - { - // Unload current model texture and load new one - UnloadTexture(texture); - texture = LoadTexture(droppedFiles[0]); - model.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; - } - } - - ClearDroppedFiles(); // Clear internal buffers - } - - // Select model on mouse click - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - // Check collision between ray and box - if (CheckCollisionRayBox(GetMouseRay(GetMousePosition(), camera), bounds)) selected = !selected; - else selected = false; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawModel(model, position, 1.0f, WHITE); // Draw 3d model with texture - - DrawGrid(20, 10.0f); // Draw a grid - - if (selected) DrawBoundingBox(bounds, GREEN); // Draw selection box - - EndMode3D(); - - DrawText("Drag & drop model to load mesh/texture.", 10, GetScreenHeight() - 20, 10, DARKGRAY); - if (selected) DrawText("MODEL SELECTED", GetScreenWidth() - 110, 10, 10, GREEN); - - DrawText("(c) Castle 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -}
\ No newline at end of file diff --git a/examples/web/models/models_loading.data b/examples/web/models/models_loading.data deleted file mode 100644 index a38ea69..0000000 --- a/examples/web/models/models_loading.data +++ /dev/null @@ -1,14846 +0,0 @@ -# (c) 2018 Medieval Assets Pack by Alberto Cano
-# Licensed as Creative Commons Attribution-NonCommercial 4.0
-
-#
-# object castle
-#
-
-v -17.17 7.76 -10.68
-v -16.55 7.76 -12.98
-v -16.55 0.00 -12.98
-v -17.17 0.00 -10.68
-v -14.87 7.76 -14.66
-v -14.87 0.00 -14.66
-v -12.57 7.76 -15.28
-v -12.57 0.00 -15.28
-v -10.27 7.76 -14.66
-v -10.27 0.00 -14.66
-v -8.58 7.76 -12.98
-v -8.58 0.00 -12.98
-v -7.97 7.76 -10.68
-v -7.97 0.00 -10.68
-v -8.58 7.76 -8.38
-v -8.58 0.00 -8.38
-v -10.27 7.76 -6.69
-v -10.27 0.00 -6.69
-v -12.57 7.76 -6.08
-v -12.57 0.00 -6.08
-v -14.87 7.76 -6.69
-v -14.87 0.00 -6.69
-v -16.55 7.76 -8.38
-v -16.55 0.00 -8.38
-v -16.78 7.76 -13.11
-v -17.43 7.76 -10.68
-v -17.43 8.57 -10.68
-v -16.78 8.57 -13.11
-v -15.00 7.76 -14.89
-v -15.00 8.57 -14.89
-v -12.57 7.76 -15.54
-v -12.57 8.57 -15.54
-v -10.13 7.76 -14.89
-v -10.13 8.57 -14.89
-v -8.35 7.76 -13.11
-v -8.35 8.57 -13.11
-v -7.70 7.76 -10.68
-v -7.70 8.57 -10.68
-v -8.35 7.76 -8.24
-v -8.35 8.57 -8.24
-v -10.13 7.76 -6.46
-v -10.13 8.57 -6.46
-v -12.57 7.76 -5.81
-v -12.57 8.57 -5.81
-v -15.00 7.76 -6.46
-v -15.00 8.57 -6.46
-v -16.78 7.76 -8.24
-v -16.78 8.57 -8.24
-v -17.17 8.57 -10.68
-v -16.55 8.57 -12.98
-v -14.87 8.57 -14.66
-v -12.57 8.57 -15.28
-v -10.27 8.57 -14.66
-v -8.58 8.57 -12.98
-v -7.97 8.57 -10.68
-v -8.58 8.57 -8.38
-v -10.27 8.57 -6.69
-v -12.57 8.57 -6.08
-v -14.87 8.57 -6.69
-v -16.55 8.57 -8.38
-v -17.17 16.89 -10.68
-v -16.55 16.89 -12.98
-v -14.87 16.89 -14.66
-v -12.57 16.89 -15.28
-v -10.27 16.89 -14.66
-v -8.58 16.89 -12.98
-v -7.97 16.89 -10.68
-v -8.58 16.89 -8.38
-v -10.27 16.89 -6.69
-v -12.57 16.89 -6.08
-v -14.87 16.89 -6.69
-v -16.55 16.89 -8.38
-v -17.13 21.30 -13.31
-v -17.83 21.30 -10.68
-v -18.23 21.30 -10.68
-v -17.47 21.30 -13.51
-v -15.20 21.30 -15.24
-v -15.40 21.30 -15.58
-v -12.57 21.30 -15.94
-v -12.57 21.30 -16.34
-v -9.93 21.30 -15.24
-v -9.73 21.30 -15.58
-v -8.01 21.30 -13.31
-v -7.66 21.30 -13.51
-v -7.30 21.30 -10.68
-v -6.90 21.30 -10.68
-v -8.01 21.30 -8.04
-v -7.66 21.30 -7.84
-v -9.93 21.30 -6.12
-v -9.73 21.30 -5.77
-v -12.57 21.30 -5.41
-v -12.57 21.30 -5.01
-v -15.20 21.30 -6.12
-v -15.40 21.30 -5.77
-v -17.13 21.30 -8.04
-v -17.47 21.30 -7.84
-v -16.72 24.76 -10.68
-v -16.17 24.76 -12.76
-v -14.64 24.76 -14.28
-v -12.57 24.76 -14.83
-v -10.49 24.76 -14.28
-v -8.97 24.76 -12.76
-v -8.41 24.76 -10.68
-v -8.97 24.76 -8.60
-v -10.49 24.76 -7.08
-v -12.57 24.76 -6.52
-v -14.64 24.76 -7.08
-v -16.17 24.76 -8.60
-v -16.69 28.50 -10.68
-v -16.13 28.50 -12.74
-v -14.63 28.50 -14.24
-v -12.57 28.50 -14.80
-v -10.51 28.50 -14.24
-v -9.00 28.50 -12.74
-v -8.45 28.50 -10.68
-v -9.00 28.50 -8.62
-v -10.51 28.50 -7.11
-v -12.57 28.50 -6.56
-v -14.63 28.50 -7.11
-v -16.13 28.50 -8.62
-v -17.83 17.36 -10.68
-v -17.13 17.36 -13.31
-v -15.20 17.36 -15.24
-v -12.57 17.36 -15.94
-v -9.93 17.36 -15.24
-v -8.01 17.36 -13.31
-v -7.30 17.36 -10.68
-v -8.01 17.36 -8.04
-v -9.93 17.36 -6.12
-v -12.57 17.36 -5.41
-v -15.20 17.36 -6.12
-v -17.13 17.36 -8.04
-v -17.91 20.21 -10.37
-v -17.91 20.52 -10.80
-v -17.91 19.21 -10.80
-v -17.91 19.23 -10.37
-v -17.81 19.26 -10.03
-v -17.91 19.26 -10.04
-v -17.91 19.12 -10.04
-v -17.81 19.12 -10.03
-v -17.89 20.75 -10.80
-v -17.98 20.75 -10.81
-v -17.94 20.29 -10.15
-v -17.84 20.29 -10.15
-v -17.68 19.12 -11.55
-v -17.78 19.12 -11.56
-v -17.78 19.26 -11.56
-v -17.68 19.26 -11.55
-v -17.89 19.07 -10.80
-v -17.98 19.07 -10.81
-v -17.82 19.12 -11.45
-v -17.73 19.12 -11.45
-v -18.05 19.12 -10.16
-v -18.05 19.26 -10.16
-v -18.08 19.23 -10.39
-v -17.98 20.52 -10.81
-v -17.98 20.21 -10.38
-v -17.93 19.26 -11.46
-v -17.93 19.12 -11.46
-v -18.01 19.24 -11.24
-v -18.09 19.07 -10.82
-v -18.09 19.21 -10.82
-v -17.83 20.21 -11.23
-v -17.83 19.24 -11.23
-v -17.73 20.29 -11.45
-v -17.82 20.29 -11.45
-v -17.84 19.12 -10.15
-v -17.94 19.12 -10.15
-v -17.90 20.21 -11.23
-v -17.98 19.23 -10.38
-v -17.90 19.24 -11.23
-v -17.98 19.21 -10.81
-v -17.82 19.26 -11.45
-v -17.73 19.26 -11.45
-v -17.94 19.26 -10.15
-v -17.84 19.26 -10.15
-v -18.02 19.26 -10.05
-v -18.02 19.12 -10.05
-v -17.88 19.12 -11.57
-v -17.88 19.26 -11.57
-v -12.87 20.21 -16.02
-v -12.44 20.52 -16.02
-v -12.44 19.21 -16.02
-v -12.87 19.23 -16.02
-v -13.21 19.26 -15.92
-v -13.20 19.26 -16.02
-v -13.20 19.12 -16.02
-v -13.21 19.12 -15.92
-v -12.44 20.75 -16.00
-v -12.43 20.75 -16.10
-v -13.09 20.29 -16.05
-v -13.10 20.29 -15.95
-v -11.69 19.12 -15.79
-v -11.68 19.12 -15.89
-v -11.68 19.26 -15.89
-v -11.69 19.26 -15.79
-v -12.44 19.07 -16.00
-v -12.43 19.07 -16.10
-v -11.79 19.12 -15.94
-v -11.80 19.12 -15.84
-v -13.08 19.12 -16.16
-v -13.08 19.26 -16.16
-v -12.85 19.23 -16.20
-v -12.43 20.52 -16.10
-v -12.86 20.21 -16.09
-v -11.78 19.26 -16.04
-v -11.78 19.12 -16.04
-v -12.00 19.24 -16.12
-v -12.42 19.07 -16.20
-v -12.42 19.21 -16.20
-v -12.01 20.21 -15.94
-v -12.01 19.24 -15.94
-v -11.80 20.29 -15.84
-v -11.79 20.29 -15.94
-v -13.10 19.12 -15.95
-v -13.09 19.12 -16.05
-v -12.01 20.21 -16.01
-v -12.86 19.23 -16.09
-v -12.01 19.24 -16.01
-v -12.43 19.21 -16.10
-v -11.79 19.26 -15.94
-v -11.80 19.26 -15.84
-v -13.09 19.26 -16.05
-v -13.10 19.26 -15.95
-v -13.19 19.26 -16.13
-v -13.19 19.12 -16.13
-v -11.67 19.12 -16.00
-v -11.67 19.26 -16.00
-v -9.24 23.34 -12.52
-v -9.78 23.34 -13.29
-v -9.10 24.92 -13.76
-v -8.56 24.92 -12.99
-v -8.63 28.41 -12.92
-v -9.53 28.41 -12.29
-v -9.18 28.41 -13.70
-v -10.08 28.41 -13.07
-v -12.87 27.21 -14.81
-v -12.44 27.52 -14.82
-v -12.44 26.21 -14.82
-v -12.87 26.24 -14.81
-v -13.21 26.26 -14.72
-v -13.20 26.26 -14.82
-v -13.20 26.12 -14.82
-v -13.21 26.12 -14.72
-v -12.44 27.75 -14.80
-v -12.43 27.75 -14.89
-v -13.09 27.30 -14.85
-v -13.10 27.30 -14.75
-v -11.69 26.12 -14.59
-v -11.68 26.12 -14.69
-v -11.68 26.26 -14.69
-v -11.69 26.26 -14.59
-v -12.44 26.07 -14.80
-v -12.43 26.07 -14.89
-v -11.79 26.12 -14.73
-v -11.80 26.12 -14.64
-v -13.08 26.12 -14.96
-v -13.08 26.26 -14.96
-v -12.85 26.24 -14.99
-v -12.43 27.52 -14.89
-v -12.86 27.21 -14.89
-v -11.78 26.26 -14.84
-v -11.78 26.12 -14.84
-v -12.00 26.25 -14.92
-v -12.42 26.07 -15.00
-v -12.42 26.21 -15.00
-v -12.01 27.21 -14.74
-v -12.01 26.25 -14.74
-v -11.80 27.30 -14.64
-v -11.79 27.30 -14.73
-v -13.10 26.12 -14.75
-v -13.09 26.12 -14.85
-v -12.01 27.21 -14.81
-v -12.86 26.24 -14.89
-v -12.01 26.25 -14.81
-v -12.43 26.21 -14.89
-v -11.79 26.26 -14.73
-v -11.80 26.26 -14.64
-v -13.09 26.26 -14.85
-v -13.10 26.26 -14.75
-v -13.19 26.26 -14.93
-v -13.19 26.12 -14.93
-v -11.67 26.12 -14.79
-v -11.67 26.26 -14.79
-v -14.41 23.34 -14.01
-v -15.18 23.34 -13.46
-v -15.65 24.92 -14.14
-v -14.88 24.92 -14.68
-v -14.81 28.41 -14.61
-v -14.18 28.41 -13.71
-v -15.59 28.41 -14.07
-v -14.96 28.41 -13.17
-v -8.43 27.21 -10.98
-v -8.42 27.52 -10.55
-v -8.42 26.21 -10.55
-v -8.43 26.24 -10.98
-v -8.52 26.26 -11.32
-v -8.42 26.26 -11.31
-v -8.42 26.12 -11.31
-v -8.52 26.12 -11.32
-v -8.45 27.75 -10.55
-v -8.35 27.75 -10.54
-v -8.39 27.30 -11.20
-v -8.49 27.30 -11.21
-v -8.65 26.12 -9.80
-v -8.56 26.12 -9.79
-v -8.56 26.26 -9.79
-v -8.65 26.26 -9.80
-v -8.45 26.07 -10.55
-v -8.35 26.07 -10.54
-v -8.51 26.12 -9.90
-v -8.61 26.12 -9.91
-v -8.29 26.12 -11.19
-v -8.29 26.26 -11.19
-v -8.25 26.24 -10.96
-v -8.35 27.52 -10.54
-v -8.35 27.21 -10.97
-v -8.40 26.26 -9.89
-v -8.40 26.12 -9.89
-v -8.32 26.25 -10.11
-v -8.24 26.07 -10.53
-v -8.24 26.21 -10.53
-v -8.50 27.21 -10.13
-v -8.50 26.25 -10.13
-v -8.61 27.30 -9.91
-v -8.51 27.30 -9.90
-v -8.49 26.12 -11.21
-v -8.39 26.12 -11.20
-v -8.43 27.21 -10.12
-v -8.35 26.24 -10.97
-v -8.43 26.25 -10.12
-v -8.35 26.21 -10.54
-v -8.51 26.26 -9.90
-v -8.61 26.26 -9.91
-v -8.39 26.26 -11.20
-v -8.49 26.26 -11.21
-v -8.32 26.26 -11.30
-v -8.32 26.12 -11.30
-v -8.45 26.12 -9.78
-v -8.45 26.26 -9.78
-v -13.04 12.70 -6.81
-v -12.09 12.70 -6.81
-v -12.09 14.28 -5.99
-v -13.04 14.28 -5.99
-v -13.04 17.34 -5.64
-v -13.04 17.34 -6.74
-v -12.09 17.34 -5.64
-v -12.09 17.34 -6.74
-v -8.98 12.70 -12.20
-v -9.46 12.70 -13.02
-v -8.74 14.28 -13.43
-v -8.27 14.28 -12.61
-v -7.97 17.34 -12.79
-v -8.92 17.34 -12.24
-v -8.44 17.34 -13.61
-v -9.39 17.34 -13.06
-v -12.09 12.70 -14.54
-v -13.04 12.70 -14.54
-v -13.04 14.28 -15.36
-v -12.09 14.28 -15.36
-v -12.09 17.34 -15.71
-v -12.09 17.34 -14.62
-v -13.04 17.34 -15.71
-v -13.04 17.34 -14.62
-v -10.73 23.34 -7.35
-v -9.95 23.34 -7.89
-v -9.48 24.92 -7.22
-v -10.25 24.92 -6.67
-v -10.32 28.41 -6.74
-v -10.95 28.41 -7.65
-v -9.55 28.41 -7.29
-v -10.18 28.41 -8.19
-v -9.46 12.70 -8.34
-v -8.98 12.70 -9.15
-v -8.27 14.28 -8.74
-v -8.74 14.28 -7.92
-v -8.44 17.34 -7.75
-v -9.39 17.34 -8.30
-v -7.97 17.34 -8.57
-v -8.92 17.34 -9.12
-v -7.23 20.21 -10.98
-v -7.22 20.52 -10.55
-v -7.22 19.21 -10.55
-v -7.23 19.23 -10.98
-v -7.32 19.26 -11.32
-v -7.22 19.26 -11.31
-v -7.22 19.12 -11.31
-v -7.32 19.12 -11.32
-v -7.24 20.75 -10.55
-v -7.15 20.75 -10.54
-v -7.19 20.29 -11.20
-v -7.29 20.29 -11.21
-v -7.45 19.12 -9.80
-v -7.35 19.12 -9.79
-v -7.35 19.26 -9.79
-v -7.45 19.26 -9.80
-v -7.24 19.07 -10.55
-v -7.15 19.07 -10.54
-v -7.31 19.12 -9.90
-v -7.41 19.12 -9.91
-v -7.09 19.12 -11.19
-v -7.09 19.26 -11.19
-v -7.05 19.23 -10.96
-v -7.15 20.52 -10.54
-v -7.15 20.21 -10.97
-v -7.20 19.26 -9.89
-v -7.20 19.12 -9.89
-v -7.12 19.24 -10.11
-v -7.04 19.07 -10.53
-v -7.04 19.21 -10.53
-v -7.30 20.21 -10.13
-v -7.30 19.24 -10.13
-v -7.41 20.29 -9.91
-v -7.31 20.29 -9.90
-v -7.29 19.12 -11.21
-v -7.19 19.12 -11.20
-v -7.23 20.21 -10.12
-v -7.15 19.23 -10.97
-v -7.23 19.24 -10.12
-v -7.15 19.21 -10.54
-v -7.31 19.26 -9.90
-v -7.41 19.26 -9.91
-v -7.19 19.26 -11.20
-v -7.29 19.26 -11.21
-v -7.11 19.26 -11.30
-v -7.11 19.12 -11.30
-v -7.25 19.12 -9.78
-v -7.25 19.26 -9.78
-v -12.26 27.21 -6.54
-v -12.69 27.52 -6.53
-v -12.69 26.21 -6.53
-v -12.26 26.24 -6.54
-v -11.92 26.26 -6.63
-v -11.93 26.26 -6.53
-v -11.93 26.12 -6.53
-v -11.92 26.12 -6.63
-v -12.69 27.75 -6.56
-v -12.70 27.75 -6.46
-v -12.04 27.30 -6.51
-v -12.03 27.30 -6.60
-v -13.44 26.12 -6.76
-v -13.45 26.12 -6.67
-v -13.45 26.26 -6.67
-v -13.44 26.26 -6.76
-v -12.69 26.07 -6.56
-v -12.70 26.07 -6.46
-v -13.34 26.12 -6.62
-v -13.34 26.12 -6.72
-v -12.05 26.12 -6.40
-v -12.05 26.26 -6.40
-v -12.28 26.24 -6.36
-v -12.70 27.52 -6.46
-v -12.27 27.21 -6.47
-v -13.35 26.26 -6.51
-v -13.35 26.12 -6.51
-v -13.13 26.25 -6.43
-v -12.71 26.07 -6.35
-v -12.71 26.21 -6.35
-v -13.12 27.21 -6.61
-v -13.12 26.25 -6.61
-v -13.34 27.30 -6.72
-v -13.34 27.30 -6.62
-v -12.03 26.12 -6.60
-v -12.04 26.12 -6.51
-v -13.12 27.21 -6.54
-v -12.27 26.24 -6.47
-v -13.12 26.25 -6.54
-v -12.70 26.21 -6.46
-v -13.34 26.26 -6.62
-v -13.34 26.26 -6.72
-v -12.04 26.26 -6.51
-v -12.03 26.26 -6.60
-v -11.94 26.26 -6.43
-v -11.94 26.12 -6.43
-v -13.46 26.12 -6.56
-v -13.46 26.26 -6.56
-v -16.15 12.70 -9.15
-v -15.67 12.70 -8.34
-v -16.39 14.28 -7.92
-v -16.86 14.28 -8.74
-v -17.17 17.34 -8.57
-v -16.21 17.34 -9.12
-v -16.69 17.34 -7.75
-v -15.74 17.34 -8.30
-v -12.26 20.21 -5.34
-v -12.69 20.52 -5.33
-v -12.69 19.21 -5.33
-v -12.26 19.23 -5.34
-v -11.92 19.26 -5.43
-v -11.93 19.26 -5.33
-v -11.93 19.12 -5.33
-v -11.92 19.12 -5.43
-v -12.69 20.75 -5.36
-v -12.70 20.75 -5.26
-v -12.04 20.29 -5.30
-v -12.03 20.29 -5.40
-v -13.44 19.12 -5.56
-v -13.45 19.12 -5.47
-v -13.45 19.26 -5.47
-v -13.44 19.26 -5.56
-v -12.69 19.07 -5.36
-v -12.70 19.07 -5.26
-v -13.34 19.12 -5.42
-v -13.34 19.12 -5.52
-v -12.05 19.12 -5.20
-v -12.05 19.26 -5.20
-v -12.28 19.23 -5.16
-v -12.70 20.52 -5.26
-v -12.27 20.21 -5.26
-v -13.35 19.26 -5.31
-v -13.35 19.12 -5.31
-v -13.13 19.24 -5.23
-v -12.71 19.07 -5.15
-v -12.71 19.21 -5.15
-v -13.12 20.21 -5.41
-v -13.12 19.24 -5.41
-v -13.34 20.29 -5.52
-v -13.34 20.29 -5.42
-v -12.03 19.12 -5.40
-v -12.04 19.12 -5.30
-v -13.12 20.21 -5.34
-v -12.27 19.23 -5.26
-v -13.12 19.24 -5.34
-v -12.70 19.21 -5.26
-v -13.34 19.26 -5.42
-v -13.34 19.26 -5.52
-v -12.04 19.26 -5.30
-v -12.03 19.26 -5.40
-v -11.94 19.26 -5.23
-v -11.94 19.12 -5.23
-v -13.46 19.12 -5.36
-v -13.46 19.26 -5.36
-v -15.89 23.34 -8.84
-v -15.35 23.34 -8.06
-v -16.03 24.92 -7.59
-v -16.57 24.92 -8.36
-v -16.50 28.41 -8.43
-v -15.60 28.41 -9.06
-v -15.96 28.41 -7.66
-v -15.06 28.41 -8.29
-v -16.70 27.21 -10.37
-v -16.71 27.52 -10.80
-v -16.71 26.21 -10.80
-v -16.70 26.24 -10.37
-v -16.61 26.26 -10.03
-v -16.71 26.26 -10.04
-v -16.71 26.12 -10.04
-v -16.61 26.12 -10.03
-v -16.69 27.75 -10.80
-v -16.78 27.75 -10.81
-v -16.74 27.30 -10.15
-v -16.64 27.30 -10.15
-v -16.48 26.12 -11.55
-v -16.58 26.12 -11.56
-v -16.58 26.26 -11.56
-v -16.48 26.26 -11.55
-v -16.69 26.07 -10.80
-v -16.78 26.07 -10.81
-v -16.62 26.12 -11.45
-v -16.53 26.12 -11.45
-v -16.84 26.12 -10.16
-v -16.84 26.26 -10.16
-v -16.88 26.24 -10.39
-v -16.78 27.52 -10.81
-v -16.78 27.21 -10.38
-v -16.73 26.26 -11.46
-v -16.73 26.12 -11.46
-v -16.81 26.25 -11.24
-v -16.89 26.07 -10.82
-v -16.89 26.21 -10.82
-v -16.63 27.21 -11.23
-v -16.63 26.25 -11.23
-v -16.53 27.30 -11.45
-v -16.62 27.30 -11.45
-v -16.64 26.12 -10.15
-v -16.74 26.12 -10.15
-v -16.70 27.21 -11.23
-v -16.78 26.24 -10.38
-v -16.70 26.25 -11.23
-v -16.78 26.21 -10.81
-v -16.62 26.26 -11.45
-v -16.53 26.26 -11.45
-v -16.74 26.26 -10.15
-v -16.64 26.26 -10.15
-v -16.82 26.26 -10.05
-v -16.82 26.12 -10.05
-v -16.68 26.12 -11.57
-v -16.68 26.26 -11.57
-v -15.67 12.70 -13.02
-v -16.15 12.70 -12.20
-v -16.86 14.28 -12.61
-v -16.39 14.28 -13.43
-v -16.69 17.34 -13.61
-v -15.74 17.34 -13.06
-v -17.17 17.34 -12.79
-v -16.21 17.34 -12.24
-v -16.83 28.50 -13.14
-v -17.49 28.50 -10.68
-v -17.49 30.29 -10.68
-v -16.83 30.29 -13.14
-v -15.03 28.50 -14.94
-v -15.03 30.29 -14.94
-v -12.57 28.50 -15.60
-v -12.57 30.29 -15.60
-v -10.10 28.50 -14.94
-v -10.10 30.29 -14.94
-v -8.30 28.50 -13.14
-v -8.30 30.29 -13.14
-v -7.64 28.50 -10.68
-v -7.64 30.29 -10.68
-v -8.30 28.50 -8.21
-v -8.30 30.29 -8.21
-v -10.10 28.50 -6.41
-v -10.10 30.29 -6.41
-v -12.57 28.50 -5.75
-v -12.57 30.29 -5.75
-v -15.03 28.50 -6.41
-v -15.03 30.29 -6.41
-v -16.83 28.50 -8.21
-v -16.83 30.29 -8.21
-v -16.78 30.29 -10.68
-v -16.21 30.29 -12.78
-v -15.03 30.90 -14.94
-v -16.83 30.90 -13.14
-v -16.21 30.90 -12.78
-v -14.67 30.90 -14.32
-v -14.67 30.29 -14.32
-v -12.57 30.29 -14.89
-v -10.10 30.90 -14.94
-v -12.57 30.90 -15.60
-v -12.57 30.90 -14.89
-v -10.46 30.90 -14.32
-v -10.46 30.29 -14.32
-v -8.92 30.29 -12.78
-v -7.64 30.90 -10.68
-v -8.30 30.90 -13.14
-v -8.92 30.90 -12.78
-v -8.36 30.90 -10.68
-v -8.36 30.29 -10.68
-v -8.92 30.29 -8.57
-v -10.10 30.90 -6.41
-v -8.30 30.90 -8.21
-v -8.92 30.90 -8.57
-v -10.46 30.90 -7.03
-v -10.46 30.29 -7.03
-v -12.57 30.29 -6.47
-v -15.03 30.90 -6.41
-v -12.57 30.90 -5.75
-v -12.57 30.90 -6.47
-v -14.67 30.90 -7.03
-v -14.67 30.29 -7.03
-v -16.21 30.29 -8.57
-v -17.49 30.90 -10.68
-v -16.83 30.90 -8.21
-v -16.21 30.90 -8.57
-v -16.78 30.90 -10.68
-v -16.78 29.42 -10.68
-v -16.21 29.42 -12.78
-v -14.67 29.42 -14.32
-v -12.57 29.42 -14.89
-v -10.46 29.42 -14.32
-v -8.92 29.42 -12.78
-v -8.36 29.42 -10.68
-v -8.92 29.42 -8.57
-v -10.46 29.42 -7.03
-v -12.57 29.42 -6.47
-v -14.67 29.42 -7.03
-v -16.21 29.42 -8.57
-v -12.57 29.42 -10.68
-v 15.69 11.78 11.98
-v 15.69 11.78 -12.46
-v 10.74 17.79 -7.40
-v 10.74 17.79 7.40
-v -15.69 11.78 -12.46
-v -10.74 17.79 -7.40
-v -15.69 11.78 11.98
-v -10.74 17.79 7.40
-v 12.89 0.00 11.03
-v 12.89 0.00 -11.03
-v 12.89 11.78 -11.03
-v 12.89 11.78 11.03
-v -12.89 0.00 -11.03
-v -12.89 11.78 -11.03
-v -23.42 0.00 -6.76
-v -23.42 0.00 6.76
-v -23.42 6.95 6.76
-v -23.42 6.95 -6.76
-v -12.89 0.00 11.03
-v -12.89 11.78 11.03
-v 8.74 17.79 -3.62
-v 8.74 17.79 3.62
-v -8.74 17.79 -3.62
-v -8.74 17.79 3.62
-v -12.89 6.95 6.76
-v -12.89 0.00 6.76
-v -12.89 6.95 -6.76
-v -12.89 0.00 -6.76
-v -9.46 12.70 7.57
-v -8.74 14.28 7.16
-v -8.27 14.28 7.98
-v -8.98 12.70 8.39
-v -9.39 17.34 7.53
-v -8.44 17.34 6.98
-v -7.97 17.34 7.80
-v -8.92 17.34 8.35
-v -9.31 28.15 -0.00
-v -9.31 23.30 4.54
-v 0.00 22.65 4.30
-v -0.11 25.84 -0.00
-v -9.31 27.72 -0.00
-v -9.31 22.87 4.55
-v 0.00 22.23 4.31
-v 0.00 22.65 -4.30
-v -9.31 23.30 -4.54
-v -9.31 22.87 -4.55
-v 0.00 22.23 -4.31
-v 9.31 28.15 -0.00
-v 9.31 23.30 4.54
-v 9.31 27.72 -0.00
-v 9.31 22.87 4.55
-v 9.31 23.30 -4.54
-v 9.31 22.87 -4.55
-v 4.76 26.71 -0.63
-v 5.87 26.95 -0.63
-v 5.91 26.75 -0.63
-v 4.80 26.52 -0.63
-v 4.68 27.10 -0.11
-v 5.79 27.34 -0.11
-v 4.72 26.91 -0.11
-v 5.79 27.35 -0.00
-v 4.68 27.12 -0.00
-v 4.72 26.93 -0.00
-v 5.91 26.75 0.63
-v 5.87 26.95 0.63
-v 4.76 26.71 0.63
-v 4.80 26.52 0.63
-v 5.79 27.34 0.11
-v 4.68 27.10 0.11
-v 4.72 26.91 0.11
-v 3.88 26.49 -0.63
-v 5.00 26.69 -0.63
-v 5.03 26.49 -0.63
-v 3.91 26.30 -0.63
-v 3.81 26.89 -0.11
-v 4.93 27.08 -0.11
-v 3.84 26.69 -0.11
-v 4.92 27.09 -0.00
-v 3.81 26.90 -0.00
-v 3.84 26.71 -0.00
-v 5.03 26.49 0.63
-v 5.00 26.69 0.63
-v 3.88 26.49 0.63
-v 3.91 26.30 0.63
-v 4.93 27.08 0.11
-v 3.81 26.89 0.11
-v 3.84 26.69 0.11
-v 2.89 26.32 -0.63
-v 4.01 26.46 -0.63
-v 4.04 26.27 -0.63
-v 2.91 26.13 -0.63
-v 2.84 26.72 -0.11
-v 3.96 26.86 -0.11
-v 2.86 26.53 -0.11
-v 3.96 26.87 -0.00
-v 2.84 26.74 -0.00
-v 2.86 26.54 -0.00
-v 4.04 26.27 0.63
-v 4.01 26.46 0.63
-v 2.89 26.32 0.63
-v 2.91 26.13 0.63
-v 3.96 26.86 0.11
-v 2.84 26.72 0.11
-v 2.86 26.53 0.11
-v 1.88 26.15 -0.63
-v 3.00 26.29 -0.63
-v 3.02 26.09 -0.63
-v 1.90 25.96 -0.63
-v 1.83 26.55 -0.11
-v 2.95 26.69 -0.11
-v 1.85 26.36 -0.11
-v 2.95 26.70 -0.00
-v 1.83 26.56 -0.00
-v 1.85 26.37 -0.00
-v 3.02 26.09 0.63
-v 3.00 26.29 0.63
-v 1.88 26.15 0.63
-v 1.90 25.96 0.63
-v 2.95 26.69 0.11
-v 1.83 26.55 0.11
-v 1.85 26.36 0.11
-v 0.78 26.08 -0.63
-v 1.91 26.12 -0.63
-v 1.92 25.93 -0.63
-v 0.79 25.89 -0.63
-v 0.77 26.49 -0.11
-v 1.90 26.52 -0.11
-v 0.77 26.29 -0.11
-v 1.90 26.54 -0.00
-v 0.77 26.50 -0.00
-v 0.77 26.30 -0.00
-v 1.92 25.93 0.63
-v 1.91 26.12 0.63
-v 0.78 26.08 0.63
-v 0.79 25.89 0.63
-v 1.90 26.52 0.11
-v 0.77 26.49 0.11
-v 0.77 26.29 0.11
-v -0.35 26.05 -0.63
-v 0.78 26.11 -0.63
-v 0.79 25.91 -0.63
-v -0.34 25.85 -0.63
-v -0.37 26.45 -0.11
-v 0.76 26.51 -0.11
-v -0.36 26.25 -0.11
-v 0.76 26.52 -0.00
-v -0.38 26.46 -0.00
-v -0.37 26.27 -0.00
-v 0.79 25.91 0.63
-v 0.78 26.11 0.63
-v -0.35 26.05 0.63
-v -0.34 25.85 0.63
-v 0.76 26.51 0.11
-v -0.37 26.45 0.11
-v -0.36 26.25 0.11
-v 6.98 27.27 -0.63
-v 8.09 27.50 -0.63
-v 8.13 27.31 -0.63
-v 7.02 27.08 -0.63
-v 6.90 27.66 -0.11
-v 8.01 27.90 -0.11
-v 6.94 27.47 -0.11
-v 8.00 27.91 -0.00
-v 6.89 27.68 -0.00
-v 6.93 27.48 -0.00
-v 8.13 27.31 0.63
-v 8.09 27.50 0.63
-v 6.98 27.27 0.63
-v 7.02 27.08 0.63
-v 8.01 27.90 0.11
-v 6.90 27.66 0.11
-v 6.94 27.47 0.11
-v 5.87 26.96 -0.63
-v 6.98 27.20 -0.63
-v 7.02 27.01 -0.63
-v 5.91 26.77 -0.63
-v 5.79 27.36 -0.11
-v 6.90 27.59 -0.11
-v 5.83 27.17 -0.11
-v 6.89 27.60 -0.00
-v 5.79 27.37 -0.00
-v 5.83 27.18 -0.00
-v 7.02 27.01 0.63
-v 6.98 27.20 0.63
-v 5.87 26.96 0.63
-v 5.91 26.77 0.63
-v 6.90 27.59 0.11
-v 5.79 27.36 0.11
-v 5.83 27.17 0.11
-v -6.20 26.77 -0.63
-v -6.16 26.96 -0.63
-v -5.05 26.72 -0.63
-v -5.09 26.53 -0.63
-v -4.97 27.12 -0.11
-v -6.08 27.35 -0.11
-v -5.01 26.92 -0.11
-v -6.07 27.36 -0.00
-v -4.96 27.13 -0.00
-v -5.01 26.94 -0.00
-v -5.05 26.72 0.63
-v -6.16 26.96 0.63
-v -6.20 26.77 0.63
-v -5.09 26.53 0.63
-v -4.97 27.12 0.11
-v -6.08 27.35 0.11
-v -5.01 26.92 0.11
-v -5.32 26.52 -0.63
-v -5.28 26.71 -0.63
-v -4.17 26.51 -0.63
-v -4.20 26.32 -0.63
-v -4.10 26.91 -0.11
-v -5.21 27.11 -0.11
-v -4.13 26.72 -0.11
-v -5.21 27.12 -0.00
-v -4.10 26.92 -0.00
-v -4.13 26.73 -0.00
-v -4.17 26.51 0.63
-v -5.28 26.71 0.63
-v -5.32 26.52 0.63
-v -4.20 26.32 0.63
-v -4.10 26.91 0.11
-v -5.21 27.11 0.11
-v -4.13 26.72 0.11
-v -4.32 26.27 -0.63
-v -4.30 26.46 -0.63
-v -3.18 26.32 -0.63
-v -3.20 26.13 -0.63
-v -3.13 26.72 -0.11
-v -4.25 26.86 -0.11
-v -3.15 26.53 -0.11
-v -4.25 26.87 -0.00
-v -3.13 26.73 -0.00
-v -3.15 26.54 -0.00
-v -3.18 26.32 0.63
-v -4.30 26.46 0.63
-v -4.32 26.27 0.63
-v -3.20 26.13 0.63
-v -3.13 26.72 0.11
-v -4.25 26.86 0.11
-v -3.15 26.53 0.11
-v -3.31 26.05 -0.63
-v -3.29 26.24 -0.63
-v -2.16 26.11 -0.63
-v -2.19 25.91 -0.63
-v -2.12 26.50 -0.11
-v -3.24 26.64 -0.11
-v -2.14 26.31 -0.11
-v -3.24 26.65 -0.00
-v -2.11 26.52 -0.00
-v -2.14 26.32 -0.00
-v -2.16 26.11 0.63
-v -3.29 26.24 0.63
-v -3.31 26.05 0.63
-v -2.19 25.91 0.63
-v -2.12 26.50 0.11
-v -3.24 26.64 0.11
-v -2.14 26.31 0.11
-v -2.21 25.88 -0.63
-v -2.20 26.08 -0.63
-v -1.07 26.04 -0.63
-v -1.07 25.84 -0.63
-v -1.05 26.44 -0.11
-v -2.19 26.48 -0.11
-v -1.06 26.25 -0.11
-v -2.19 26.49 -0.00
-v -1.05 26.45 -0.00
-v -1.06 26.26 -0.00
-v -1.07 26.04 0.63
-v -2.20 26.08 0.63
-v -2.21 25.88 0.63
-v -1.07 25.84 0.63
-v -1.05 26.44 0.11
-v -2.19 26.48 0.11
-v -1.06 26.25 0.11
-v -1.08 25.87 -0.63
-v -1.07 26.06 -0.63
-v 0.07 26.00 -0.63
-v 0.06 25.80 -0.63
-v 0.09 26.40 -0.11
-v -1.04 26.46 -0.11
-v 0.08 26.21 -0.11
-v -1.04 26.47 -0.00
-v 0.09 26.41 -0.00
-v 0.08 26.22 -0.00
-v 0.07 26.00 0.63
-v -1.07 26.06 0.63
-v -1.08 25.87 0.63
-v 0.06 25.80 0.63
-v 0.09 26.40 0.11
-v -1.04 26.46 0.11
-v 0.08 26.21 0.11
-v -8.19 27.32 -0.63
-v -8.15 27.51 -0.63
-v -7.04 27.28 -0.63
-v -7.08 27.09 -0.63
-v -6.96 27.67 -0.11
-v -8.07 27.90 -0.11
-v -7.00 27.48 -0.11
-v -8.06 27.92 -0.00
-v -6.95 27.68 -0.00
-v -6.99 27.49 -0.00
-v -7.04 27.28 0.63
-v -8.15 27.51 0.63
-v -8.19 27.32 0.63
-v -7.08 27.09 0.63
-v -6.96 27.67 0.11
-v -8.07 27.90 0.11
-v -7.00 27.48 0.11
-v -7.06 27.02 -0.63
-v -7.02 27.21 -0.63
-v -5.92 26.97 -0.63
-v -5.96 26.78 -0.63
-v -5.83 27.37 -0.11
-v -6.94 27.60 -0.11
-v -5.87 27.18 -0.11
-v -6.94 27.61 -0.00
-v -5.83 27.38 -0.00
-v -5.87 27.19 -0.00
-v -5.92 26.97 0.63
-v -7.02 27.21 0.63
-v -7.06 27.02 0.63
-v -5.96 26.78 0.63
-v -5.83 27.37 0.11
-v -6.94 27.60 0.11
-v -5.87 27.18 0.11
-v -9.18 27.83 -0.63
-v -8.10 27.48 -0.63
-v -8.16 27.29 -0.63
-v -9.24 27.64 -0.63
-v -9.05 28.21 -0.11
-v -7.98 27.86 -0.11
-v -9.11 28.02 -0.11
-v -7.97 27.87 -0.00
-v -9.05 28.22 -0.00
-v -9.11 28.04 -0.00
-v -8.16 27.29 0.63
-v -8.10 27.48 0.63
-v -9.18 27.83 0.63
-v -9.24 27.64 0.63
-v -7.98 27.86 0.11
-v -9.05 28.21 0.11
-v -9.11 28.02 0.11
-v 8.19 27.28 -0.63
-v 8.13 27.46 -0.63
-v 9.21 27.81 -0.63
-v 9.27 27.63 -0.63
-v 9.08 28.20 -0.11
-v 8.01 27.84 -0.11
-v 9.15 28.01 -0.11
-v 8.00 27.86 -0.00
-v 9.08 28.21 -0.00
-v 9.14 28.02 -0.00
-v 9.21 27.81 0.63
-v 8.13 27.46 0.63
-v 8.19 27.28 0.63
-v 9.27 27.63 0.63
-v 9.08 28.20 0.11
-v 8.01 27.84 0.11
-v 9.15 28.01 0.11
-v 9.46 12.70 7.57
-v 8.98 12.70 8.39
-v 8.27 14.28 7.98
-v 8.74 14.28 7.16
-v 8.44 17.34 6.98
-v 9.39 17.34 7.53
-v 7.97 17.34 7.80
-v 8.92 17.34 8.35
-v -15.48 7.80 6.90
-v -15.48 7.80 6.03
-v -17.46 7.80 6.03
-v -17.46 7.80 6.90
-v -15.48 6.95 6.90
-v -15.48 6.95 6.03
-v -17.46 6.95 6.03
-v -17.46 6.95 6.90
-v -18.47 7.80 6.90
-v -18.47 7.80 6.03
-v -20.45 7.80 6.03
-v -20.45 7.80 6.90
-v -18.47 6.95 6.90
-v -18.47 6.95 6.03
-v -20.45 6.95 6.03
-v -20.45 6.95 6.90
-v -21.45 7.80 6.90
-v -21.45 7.80 6.03
-v -23.44 7.80 6.03
-v -23.44 7.80 6.90
-v -21.45 6.95 6.90
-v -21.45 6.95 6.03
-v -23.44 6.95 6.03
-v -23.44 6.95 6.90
-v -23.40 7.80 5.50
-v -22.53 7.80 5.50
-v -22.53 7.80 3.51
-v -23.40 7.80 3.51
-v -23.40 6.95 5.50
-v -22.53 6.95 5.50
-v -22.53 6.95 3.51
-v -23.40 6.95 3.51
-v -23.40 7.80 2.51
-v -22.53 7.80 2.51
-v -22.53 7.80 0.53
-v -23.40 7.80 0.53
-v -23.40 6.95 2.51
-v -22.53 6.95 2.51
-v -22.53 6.95 0.53
-v -23.40 6.95 0.53
-v -23.40 7.80 -0.48
-v -22.53 7.80 -0.48
-v -22.53 7.80 -2.46
-v -23.40 7.80 -2.46
-v -23.40 6.95 -0.48
-v -22.53 6.95 -0.48
-v -22.53 6.95 -2.46
-v -23.40 6.95 -2.46
-v -23.40 7.80 -3.47
-v -22.53 7.80 -3.47
-v -22.53 7.80 -5.45
-v -23.40 7.80 -5.45
-v -23.40 6.95 -3.47
-v -22.53 6.95 -3.47
-v -22.53 6.95 -5.45
-v -23.40 6.95 -5.45
-v -21.45 7.80 -6.02
-v -21.45 7.80 -6.88
-v -23.44 7.80 -6.88
-v -23.44 7.80 -6.02
-v -21.45 6.95 -6.02
-v -21.45 6.95 -6.88
-v -23.44 6.95 -6.88
-v -23.44 6.95 -6.02
-v -18.47 7.80 -6.02
-v -18.47 7.80 -6.88
-v -20.45 7.80 -6.88
-v -20.45 7.80 -6.02
-v -18.47 6.95 -6.02
-v -18.47 6.95 -6.88
-v -20.45 6.95 -6.88
-v -20.45 6.95 -6.02
-v -15.48 7.80 -6.02
-v -15.48 7.80 -6.88
-v -17.46 7.80 -6.88
-v -17.46 7.80 -6.02
-v -15.48 6.95 -6.02
-v -15.48 6.95 -6.88
-v -17.46 6.95 -6.88
-v -17.46 6.95 -6.02
-v -7.10 7.80 -12.06
-v -7.10 7.80 -12.93
-v -9.08 7.80 -12.93
-v -9.08 7.80 -12.06
-v -7.10 6.95 -12.06
-v -7.10 6.95 -12.93
-v -9.08 6.95 -12.93
-v -9.08 6.95 -12.06
-v -4.46 7.80 -12.06
-v -4.46 7.80 -12.93
-v -6.45 7.80 -12.93
-v -6.45 7.80 -12.06
-v -4.46 6.95 -12.06
-v -4.46 6.95 -12.93
-v -6.45 6.95 -12.93
-v -6.45 6.95 -12.06
-v -1.83 7.80 -12.06
-v -1.83 7.80 -12.93
-v -3.81 7.80 -12.93
-v -3.81 7.80 -12.06
-v -1.83 6.95 -12.06
-v -1.83 6.95 -12.93
-v -3.81 6.95 -12.93
-v -3.81 6.95 -12.06
-v 0.81 7.80 -12.06
-v 0.81 7.80 -12.93
-v -1.17 7.80 -12.93
-v -1.17 7.80 -12.06
-v 0.81 6.95 -12.06
-v 0.81 6.95 -12.93
-v -1.17 6.95 -12.93
-v -1.17 6.95 -12.06
-v 3.44 7.80 -12.06
-v 3.44 7.80 -12.93
-v 1.46 7.80 -12.93
-v 1.46 7.80 -12.06
-v 3.44 6.95 -12.06
-v 3.44 6.95 -12.93
-v 1.46 6.95 -12.93
-v 1.46 6.95 -12.06
-v 6.08 7.80 -12.06
-v 6.08 7.80 -12.93
-v 4.10 7.80 -12.93
-v 4.10 7.80 -12.06
-v 6.08 6.95 -12.06
-v 6.08 6.95 -12.93
-v 4.10 6.95 -12.93
-v 4.10 6.95 -12.06
-v 8.72 7.80 -12.06
-v 8.72 7.80 -12.93
-v 6.74 7.80 -12.93
-v 6.74 7.80 -12.06
-v 8.72 6.95 -12.06
-v 8.72 6.95 -12.93
-v 6.74 6.95 -12.93
-v 6.74 6.95 -12.06
-v -4.39 18.64 -6.78
-v -4.39 18.64 -7.64
-v -6.37 18.64 -7.64
-v -6.37 18.64 -6.78
-v -4.39 17.79 -6.78
-v -4.39 17.79 -7.64
-v -6.37 17.79 -7.64
-v -6.37 17.79 -6.78
-v -1.66 18.64 -6.78
-v -1.66 18.64 -7.64
-v -3.64 18.64 -7.64
-v -3.64 18.64 -6.78
-v -1.66 17.79 -6.78
-v -1.66 17.79 -7.64
-v -3.64 17.79 -7.64
-v -3.64 17.79 -6.78
-v 1.06 18.64 -6.78
-v 1.06 18.64 -7.64
-v -0.92 18.64 -7.64
-v -0.92 18.64 -6.78
-v 1.06 17.79 -6.78
-v 1.06 17.79 -7.64
-v -0.92 17.79 -7.64
-v -0.92 17.79 -6.78
-v 3.79 18.64 -6.78
-v 3.79 18.64 -7.64
-v 1.80 18.64 -7.64
-v 1.80 18.64 -6.78
-v 3.79 17.79 -6.78
-v 3.79 17.79 -7.64
-v 1.80 17.79 -7.64
-v 1.80 17.79 -6.78
-v 6.51 18.64 -6.78
-v 6.51 18.64 -7.64
-v 4.53 18.64 -7.64
-v 4.53 18.64 -6.78
-v 6.51 17.79 -6.78
-v 6.51 17.79 -7.64
-v 4.53 17.79 -7.64
-v 4.53 17.79 -6.78
-v 9.24 18.64 -6.78
-v 9.24 18.64 -7.64
-v 7.25 18.64 -7.64
-v 7.25 18.64 -6.78
-v 9.24 17.79 -6.78
-v 9.24 17.79 -7.64
-v 7.25 17.79 -7.64
-v 7.25 17.79 -6.78
-v -7.11 18.64 -6.78
-v -7.11 18.64 -7.64
-v -9.09 18.64 -7.64
-v -9.09 18.64 -6.78
-v -7.11 17.79 -6.78
-v -7.11 17.79 -7.64
-v -9.09 17.79 -7.64
-v -9.09 17.79 -6.78
-v -9.92 18.64 -6.55
-v -10.78 18.64 -6.55
-v -10.78 18.64 -4.56
-v -9.92 18.64 -4.56
-v -9.92 17.79 -6.55
-v -10.78 17.79 -6.55
-v -10.78 17.79 -4.56
-v -9.92 17.79 -4.56
-v -9.92 18.64 -3.82
-v -10.78 18.64 -3.82
-v -10.78 18.64 -1.84
-v -9.92 18.64 -1.84
-v -9.92 17.79 -3.82
-v -10.78 17.79 -3.82
-v -10.78 17.79 -1.84
-v -9.92 17.79 -1.84
-v -9.92 18.64 -1.10
-v -10.78 18.64 -1.10
-v -10.78 18.64 0.88
-v -9.92 18.64 0.88
-v -9.92 17.79 -1.10
-v -10.78 17.79 -1.10
-v -10.78 17.79 0.88
-v -9.92 17.79 0.88
-v -9.92 18.64 1.63
-v -10.78 18.64 1.63
-v -10.78 18.64 3.61
-v -9.92 18.64 3.61
-v -9.92 17.79 1.63
-v -10.78 17.79 1.63
-v -10.78 17.79 3.61
-v -9.92 17.79 3.61
-v -7.11 18.64 7.48
-v -7.11 18.64 6.62
-v -9.09 18.64 6.62
-v -9.09 18.64 7.48
-v -7.11 17.79 7.48
-v -7.11 17.79 6.62
-v -9.09 17.79 6.62
-v -9.09 17.79 7.48
-v -4.39 18.64 7.48
-v -4.39 18.64 6.62
-v -6.37 18.64 6.62
-v -6.37 18.64 7.48
-v -4.39 17.79 7.48
-v -4.39 17.79 6.62
-v -6.37 17.79 6.62
-v -6.37 17.79 7.48
-v -1.66 18.64 7.48
-v -1.66 18.64 6.62
-v -3.64 18.64 6.62
-v -3.64 18.64 7.48
-v -1.66 17.79 7.48
-v -1.66 17.79 6.62
-v -3.64 17.79 6.62
-v -3.64 17.79 7.48
-v 1.06 18.64 7.48
-v 1.06 18.64 6.62
-v -0.92 18.64 6.62
-v -0.92 18.64 7.48
-v 1.06 17.79 7.48
-v 1.06 17.79 6.62
-v -0.92 17.79 6.62
-v -0.92 17.79 7.48
-v 3.79 18.64 7.48
-v 3.79 18.64 6.62
-v 1.80 18.64 6.62
-v 1.80 18.64 7.48
-v 3.79 17.79 7.48
-v 3.79 17.79 6.62
-v 1.80 17.79 6.62
-v 1.80 17.79 7.48
-v 9.24 18.64 7.48
-v 9.24 18.64 6.62
-v 7.25 18.64 6.62
-v 7.25 18.64 7.48
-v 9.24 17.79 7.48
-v 9.24 17.79 6.62
-v 7.25 17.79 6.62
-v 7.25 17.79 7.48
-v 6.51 18.64 7.48
-v 6.51 18.64 6.62
-v 4.53 18.64 6.62
-v 4.53 18.64 7.48
-v 6.51 17.79 7.48
-v 6.51 17.79 6.62
-v 4.53 17.79 6.62
-v 4.53 17.79 7.48
-v 10.85 18.64 -6.55
-v 9.99 18.64 -6.55
-v 9.99 18.64 -4.56
-v 10.85 18.64 -4.56
-v 10.85 17.79 -6.55
-v 9.99 17.79 -6.55
-v 9.99 17.79 -4.56
-v 10.85 17.79 -4.56
-v 10.85 18.64 -3.82
-v 9.99 18.64 -3.82
-v 9.99 18.64 -1.84
-v 10.85 18.64 -1.84
-v 10.85 17.79 -3.82
-v 9.99 17.79 -3.82
-v 9.99 17.79 -1.84
-v 10.85 17.79 -1.84
-v 10.85 18.64 -1.10
-v 9.99 18.64 -1.10
-v 9.99 18.64 0.88
-v 10.85 18.64 0.88
-v 10.85 17.79 -1.10
-v 9.99 17.79 -1.10
-v 9.99 17.79 0.88
-v 10.85 17.79 0.88
-v 10.85 18.64 1.63
-v 9.99 18.64 1.63
-v 9.99 18.64 3.61
-v 10.85 18.64 3.61
-v 10.85 17.79 1.63
-v 9.99 17.79 1.63
-v 9.99 17.79 3.61
-v 10.85 17.79 3.61
-v 10.85 18.64 4.35
-v 9.99 18.64 4.35
-v 9.99 18.64 6.33
-v 10.85 18.64 6.33
-v 10.85 17.79 4.35
-v 9.99 17.79 4.35
-v 9.99 17.79 6.33
-v 10.85 17.79 6.33
-v 11.17 6.95 -11.03
-v 11.17 6.95 -12.83
-v -11.17 6.95 -12.83
-v -11.17 6.95 -11.03
-v 11.17 -0.02 -12.83
-v -11.17 -0.02 -12.83
-v -19.96 4.66 -6.77
-v -19.60 5.22 -6.77
-v -19.60 2.88 -6.77
-v -19.96 2.92 -6.77
-v -20.24 2.96 -6.83
-v -20.24 2.71 -6.83
-v -20.24 2.71 -6.75
-v -20.24 2.96 -6.75
-v -19.60 5.63 -6.83
-v -20.15 4.82 -6.83
-v -20.15 4.82 -6.75
-v -19.60 5.63 -6.75
-v -18.96 2.71 -6.83
-v -18.96 2.96 -6.83
-v -18.96 2.96 -6.75
-v -18.96 2.71 -6.75
-v -19.60 2.63 -6.83
-v -19.05 2.71 -6.83
-v -19.05 2.71 -6.75
-v -19.60 2.63 -6.75
-v -20.15 2.71 -6.92
-v -20.15 2.96 -6.92
-v -19.96 2.92 -6.92
-v -19.60 5.22 -6.83
-v -19.96 4.66 -6.83
-v -19.05 2.96 -6.92
-v -19.05 2.71 -6.92
-v -19.24 2.94 -6.92
-v -19.60 2.63 -6.92
-v -19.60 2.88 -6.92
-v -19.24 4.66 -6.77
-v -19.24 2.94 -6.77
-v -19.05 4.82 -6.83
-v -19.05 4.82 -6.75
-v -20.15 2.71 -6.83
-v -20.15 2.71 -6.75
-v -19.24 4.66 -6.83
-v -19.96 2.92 -6.83
-v -19.24 2.94 -6.83
-v -19.60 2.88 -6.83
-v -19.05 2.96 -6.83
-v -19.05 2.96 -6.75
-v -20.15 2.96 -6.83
-v -20.15 2.96 -6.75
-v -20.24 2.96 -6.92
-v -20.24 2.71 -6.92
-v -18.96 2.71 -6.92
-v -18.96 2.96 -6.92
-v -6.81 4.66 -12.83
-v -6.45 5.22 -12.83
-v -6.45 2.88 -12.83
-v -6.81 2.92 -12.83
-v -7.09 2.96 -12.89
-v -7.09 2.71 -12.89
-v -7.09 2.71 -12.81
-v -7.09 2.96 -12.81
-v -6.45 5.63 -12.89
-v -6.99 4.82 -12.89
-v -6.99 4.82 -12.81
-v -6.45 5.63 -12.81
-v -5.81 2.71 -12.89
-v -5.81 2.96 -12.89
-v -5.81 2.96 -12.81
-v -5.81 2.71 -12.81
-v -6.45 2.63 -12.89
-v -5.90 2.71 -12.89
-v -5.90 2.71 -12.81
-v -6.45 2.63 -12.81
-v -6.99 2.71 -12.98
-v -6.99 2.96 -12.98
-v -6.81 2.92 -12.98
-v -6.45 5.22 -12.89
-v -6.81 4.66 -12.89
-v -5.90 2.96 -12.98
-v -5.90 2.71 -12.98
-v -6.09 2.94 -12.98
-v -6.45 2.63 -12.98
-v -6.45 2.88 -12.98
-v -6.09 4.66 -12.83
-v -6.09 2.94 -12.83
-v -5.90 4.82 -12.89
-v -5.90 4.82 -12.81
-v -6.99 2.71 -12.89
-v -6.99 2.71 -12.81
-v -6.09 4.66 -12.89
-v -6.81 2.92 -12.89
-v -6.09 2.94 -12.89
-v -6.45 2.88 -12.89
-v -5.90 2.96 -12.89
-v -5.90 2.96 -12.81
-v -6.99 2.96 -12.89
-v -6.99 2.96 -12.81
-v -7.09 2.96 -12.98
-v -7.09 2.71 -12.98
-v -5.81 2.71 -12.98
-v -5.81 2.96 -12.98
-v -4.17 10.56 -11.04
-v -3.81 11.12 -11.04
-v -3.81 8.77 -11.04
-v -4.17 8.82 -11.04
-v -4.45 8.86 -11.10
-v -4.45 8.61 -11.10
-v -4.45 8.61 -11.02
-v -4.45 8.86 -11.02
-v -3.81 11.53 -11.10
-v -4.36 10.72 -11.10
-v -4.36 10.72 -11.02
-v -3.81 11.53 -11.02
-v -3.17 8.61 -11.10
-v -3.17 8.86 -11.10
-v -3.17 8.86 -11.02
-v -3.17 8.61 -11.02
-v -3.81 8.52 -11.10
-v -3.27 8.61 -11.10
-v -3.27 8.61 -11.02
-v -3.81 8.52 -11.02
-v -4.36 8.61 -11.19
-v -4.36 8.86 -11.19
-v -4.17 8.82 -11.19
-v -3.81 11.12 -11.10
-v -4.17 10.56 -11.10
-v -3.27 8.86 -11.19
-v -3.27 8.61 -11.19
-v -3.45 8.83 -11.19
-v -3.81 8.52 -11.19
-v -3.81 8.77 -11.19
-v -3.45 10.56 -11.04
-v -3.45 8.83 -11.04
-v -3.27 10.72 -11.10
-v -3.27 10.72 -11.02
-v -4.36 8.61 -11.10
-v -4.36 8.61 -11.02
-v -3.45 10.56 -11.10
-v -4.17 8.82 -11.10
-v -3.45 8.83 -11.10
-v -3.81 8.77 -11.10
-v -3.27 8.86 -11.10
-v -3.27 8.86 -11.02
-v -4.36 8.86 -11.10
-v -4.36 8.86 -11.02
-v -4.45 8.86 -11.19
-v -4.45 8.61 -11.19
-v -3.17 8.61 -11.19
-v -3.17 8.86 -11.19
-v 3.09 10.56 -11.04
-v 3.44 11.12 -11.04
-v 3.44 8.77 -11.04
-v 3.09 8.82 -11.04
-v 2.81 8.86 -11.10
-v 2.81 8.61 -11.10
-v 2.81 8.61 -11.02
-v 2.81 8.86 -11.02
-v 3.44 11.53 -11.10
-v 2.90 10.72 -11.10
-v 2.90 10.72 -11.02
-v 3.44 11.53 -11.02
-v 4.08 8.61 -11.10
-v 4.08 8.86 -11.10
-v 4.08 8.86 -11.02
-v 4.08 8.61 -11.02
-v 3.44 8.52 -11.10
-v 3.99 8.61 -11.10
-v 3.99 8.61 -11.02
-v 3.44 8.52 -11.02
-v 2.90 8.61 -11.19
-v 2.90 8.86 -11.19
-v 3.09 8.82 -11.19
-v 3.44 11.12 -11.10
-v 3.09 10.56 -11.10
-v 3.99 8.86 -11.19
-v 3.99 8.61 -11.19
-v 3.80 8.83 -11.19
-v 3.44 8.52 -11.19
-v 3.44 8.77 -11.19
-v 3.80 10.56 -11.04
-v 3.80 8.83 -11.04
-v 3.99 10.72 -11.10
-v 3.99 10.72 -11.02
-v 2.90 8.61 -11.10
-v 2.90 8.61 -11.02
-v 3.80 10.56 -11.10
-v 3.09 8.82 -11.10
-v 3.80 8.83 -11.10
-v 3.44 8.77 -11.10
-v 3.99 8.86 -11.10
-v 3.99 8.86 -11.02
-v 2.90 8.86 -11.10
-v 2.90 8.86 -11.02
-v 2.81 8.86 -11.19
-v 2.81 8.61 -11.19
-v 4.08 8.61 -11.19
-v 4.08 8.86 -11.19
-v 5.72 4.66 -12.83
-v 6.08 5.22 -12.83
-v 6.08 2.88 -12.83
-v 5.72 2.92 -12.83
-v 5.44 2.96 -12.89
-v 5.44 2.71 -12.89
-v 5.44 2.71 -12.81
-v 5.44 2.96 -12.81
-v 6.08 5.63 -12.89
-v 5.54 4.82 -12.89
-v 5.54 4.82 -12.81
-v 6.08 5.63 -12.81
-v 6.72 2.71 -12.89
-v 6.72 2.96 -12.89
-v 6.72 2.96 -12.81
-v 6.72 2.71 -12.81
-v 6.08 2.63 -12.89
-v 6.63 2.71 -12.89
-v 6.63 2.71 -12.81
-v 6.08 2.63 -12.81
-v 5.54 2.71 -12.98
-v 5.54 2.96 -12.98
-v 5.72 2.92 -12.98
-v 6.08 5.22 -12.89
-v 5.72 4.66 -12.89
-v 6.63 2.96 -12.98
-v 6.63 2.71 -12.98
-v 6.44 2.94 -12.98
-v 6.08 2.63 -12.98
-v 6.08 2.88 -12.98
-v 6.44 4.66 -12.83
-v 6.44 2.94 -12.83
-v 6.63 4.82 -12.89
-v 6.63 4.82 -12.81
-v 5.54 2.71 -12.89
-v 5.54 2.71 -12.81
-v 6.44 4.66 -12.89
-v 5.72 2.92 -12.89
-v 6.44 2.94 -12.89
-v 6.08 2.88 -12.89
-v 6.63 2.96 -12.89
-v 6.63 2.96 -12.81
-v 5.54 2.96 -12.89
-v 5.54 2.96 -12.81
-v 5.44 2.96 -12.98
-v 5.44 2.71 -12.98
-v 6.72 2.71 -12.98
-v 6.72 2.96 -12.98
-v -6.30 20.76 -3.63
-v -5.94 21.32 -3.63
-v -5.94 18.98 -3.63
-v -6.30 19.02 -3.63
-v -6.58 19.06 -3.69
-v -6.58 18.81 -3.69
-v -6.58 18.81 -3.60
-v -6.58 19.06 -3.60
-v -5.94 21.73 -3.69
-v -6.49 20.92 -3.69
-v -6.49 20.92 -3.60
-v -5.94 21.73 -3.60
-v -5.30 18.81 -3.69
-v -5.30 19.06 -3.69
-v -5.30 19.06 -3.60
-v -5.30 18.81 -3.60
-v -5.94 18.73 -3.69
-v -5.40 18.81 -3.69
-v -5.40 18.81 -3.60
-v -5.94 18.73 -3.60
-v -6.49 18.81 -3.78
-v -6.49 19.06 -3.78
-v -6.30 19.02 -3.78
-v -5.94 21.32 -3.69
-v -6.30 20.76 -3.69
-v -5.40 19.06 -3.78
-v -5.40 18.81 -3.78
-v -5.58 19.04 -3.78
-v -5.94 18.73 -3.78
-v -5.94 18.98 -3.78
-v -5.58 20.76 -3.63
-v -5.58 19.04 -3.63
-v -5.40 20.92 -3.69
-v -5.40 20.92 -3.60
-v -6.49 18.81 -3.69
-v -6.49 18.81 -3.60
-v -5.58 20.76 -3.69
-v -6.30 19.02 -3.69
-v -5.58 19.04 -3.69
-v -5.94 18.98 -3.69
-v -5.40 19.06 -3.69
-v -5.40 19.06 -3.60
-v -6.49 19.06 -3.69
-v -6.49 19.06 -3.60
-v -6.58 19.06 -3.78
-v -6.58 18.81 -3.78
-v -5.30 18.81 -3.78
-v -5.30 19.06 -3.78
-v 5.89 20.76 -3.63
-v 6.25 21.32 -3.63
-v 6.25 18.98 -3.63
-v 5.89 19.02 -3.63
-v 5.61 19.06 -3.69
-v 5.61 18.81 -3.69
-v 5.61 18.81 -3.60
-v 5.61 19.06 -3.60
-v 6.25 21.73 -3.69
-v 5.70 20.92 -3.69
-v 5.70 20.92 -3.60
-v 6.25 21.73 -3.60
-v 6.89 18.81 -3.69
-v 6.89 19.06 -3.69
-v 6.89 19.06 -3.60
-v 6.89 18.81 -3.60
-v 6.25 18.73 -3.69
-v 6.79 18.81 -3.69
-v 6.79 18.81 -3.60
-v 6.25 18.73 -3.60
-v 5.70 18.81 -3.78
-v 5.70 19.06 -3.78
-v 5.89 19.02 -3.78
-v 6.25 21.32 -3.69
-v 5.89 20.76 -3.69
-v 6.79 19.06 -3.78
-v 6.79 18.81 -3.78
-v 6.61 19.04 -3.78
-v 6.25 18.73 -3.78
-v 6.25 18.98 -3.78
-v 6.61 20.76 -3.63
-v 6.61 19.04 -3.63
-v 6.79 20.92 -3.69
-v 6.79 20.92 -3.60
-v 5.70 18.81 -3.69
-v 5.70 18.81 -3.60
-v 6.61 20.76 -3.69
-v 5.89 19.02 -3.69
-v 6.61 19.04 -3.69
-v 6.25 18.98 -3.69
-v 6.79 19.06 -3.69
-v 6.79 19.06 -3.60
-v 5.70 19.06 -3.69
-v 5.70 19.06 -3.60
-v 5.61 19.06 -3.78
-v 5.61 18.81 -3.78
-v 6.89 18.81 -3.78
-v 6.89 19.06 -3.78
-v -8.76 20.76 0.36
-v -8.76 21.32 -0.00
-v -8.76 18.98 -0.00
-v -8.76 19.02 0.36
-v -8.82 19.06 0.64
-v -8.82 18.81 0.64
-v -8.74 18.81 0.64
-v -8.74 19.06 0.64
-v -8.82 21.73 -0.00
-v -8.82 20.92 0.55
-v -8.74 20.92 0.55
-v -8.74 21.73 -0.00
-v -8.82 18.81 -0.64
-v -8.82 19.06 -0.64
-v -8.74 19.06 -0.64
-v -8.74 18.81 -0.64
-v -8.82 18.73 -0.00
-v -8.82 18.81 -0.55
-v -8.74 18.81 -0.55
-v -8.74 18.73 -0.00
-v -8.91 18.81 0.55
-v -8.91 19.06 0.55
-v -8.91 19.02 0.36
-v -8.82 21.32 -0.00
-v -8.82 20.76 0.36
-v -8.91 19.06 -0.55
-v -8.91 18.81 -0.55
-v -8.91 19.04 -0.36
-v -8.91 18.73 -0.00
-v -8.91 18.98 -0.00
-v -8.76 20.76 -0.36
-v -8.76 19.04 -0.36
-v -8.82 20.92 -0.55
-v -8.74 20.92 -0.55
-v -8.82 18.81 0.55
-v -8.74 18.81 0.55
-v -8.82 20.76 -0.36
-v -8.82 19.02 0.36
-v -8.82 19.04 -0.36
-v -8.82 18.98 -0.00
-v -8.82 19.06 -0.55
-v -8.74 19.06 -0.55
-v -8.82 19.06 0.55
-v -8.74 19.06 0.55
-v -8.91 19.06 0.64
-v -8.91 18.81 0.64
-v -8.91 18.81 -0.64
-v -8.91 19.06 -0.64
-v -23.42 4.66 -0.35
-v -23.42 2.92 -0.35
-v -23.42 2.88 0.01
-v -23.42 5.22 0.01
-v -23.48 2.96 -0.63
-v -23.40 2.96 -0.63
-v -23.40 2.71 -0.63
-v -23.48 2.71 -0.63
-v -23.48 5.63 0.01
-v -23.40 5.63 0.01
-v -23.40 4.82 -0.54
-v -23.48 4.82 -0.54
-v -23.48 2.71 0.65
-v -23.40 2.71 0.65
-v -23.40 2.96 0.65
-v -23.48 2.96 0.65
-v -23.48 2.63 0.01
-v -23.40 2.63 0.01
-v -23.40 2.71 0.55
-v -23.48 2.71 0.55
-v -23.57 2.71 -0.54
-v -23.57 2.92 -0.35
-v -23.57 2.96 -0.54
-v -23.48 5.22 0.01
-v -23.48 4.66 -0.35
-v -23.57 2.96 0.55
-v -23.57 2.94 0.37
-v -23.57 2.71 0.55
-v -23.57 2.63 0.01
-v -23.57 2.88 0.01
-v -23.42 4.66 0.37
-v -23.42 2.94 0.37
-v -23.48 4.82 0.55
-v -23.40 4.82 0.55
-v -23.48 2.71 -0.54
-v -23.40 2.71 -0.54
-v -23.48 4.66 0.37
-v -23.48 2.92 -0.35
-v -23.48 2.94 0.37
-v -23.48 2.88 0.01
-v -23.48 2.96 0.55
-v -23.40 2.96 0.55
-v -23.40 2.96 -0.54
-v -23.48 2.96 -0.54
-v -23.57 2.71 -0.63
-v -23.57 2.96 -0.63
-v -23.57 2.96 0.65
-v -23.57 2.71 0.65
-v -19.96 4.66 6.78
-v -19.96 2.92 6.78
-v -19.60 2.88 6.78
-v -19.60 5.22 6.78
-v -20.24 2.96 6.85
-v -20.24 2.96 6.76
-v -20.24 2.71 6.76
-v -20.24 2.71 6.85
-v -19.60 5.63 6.85
-v -19.60 5.63 6.76
-v -20.15 4.82 6.76
-v -20.15 4.82 6.85
-v -18.96 2.71 6.85
-v -18.96 2.71 6.76
-v -18.96 2.96 6.76
-v -18.96 2.96 6.85
-v -19.60 2.63 6.85
-v -19.60 2.63 6.76
-v -19.05 2.71 6.76
-v -19.05 2.71 6.85
-v -20.15 2.71 6.94
-v -19.96 2.92 6.94
-v -20.15 2.96 6.94
-v -19.60 5.22 6.85
-v -19.96 4.66 6.85
-v -19.05 2.96 6.94
-v -19.24 2.94 6.94
-v -19.05 2.71 6.94
-v -19.60 2.63 6.94
-v -19.60 2.88 6.94
-v -19.24 4.66 6.78
-v -19.24 2.94 6.78
-v -19.05 4.82 6.85
-v -19.05 4.82 6.76
-v -20.15 2.71 6.85
-v -20.15 2.71 6.76
-v -19.24 4.66 6.85
-v -19.96 2.92 6.85
-v -19.24 2.94 6.85
-v -19.60 2.88 6.85
-v -19.05 2.96 6.85
-v -19.05 2.96 6.76
-v -20.15 2.96 6.76
-v -20.15 2.96 6.85
-v -20.24 2.71 6.94
-v -20.24 2.96 6.94
-v -18.96 2.96 6.94
-v -18.96 2.71 6.94
-v -5.42 9.62 11.04
-v -5.42 7.88 11.04
-v -5.06 7.83 11.04
-v -5.06 10.18 11.04
-v -5.70 7.92 11.10
-v -5.70 7.92 11.01
-v -5.70 7.67 11.01
-v -5.70 7.67 11.10
-v -5.06 10.59 11.10
-v -5.06 10.59 11.01
-v -5.61 9.78 11.01
-v -5.61 9.78 11.10
-v -4.43 7.67 11.10
-v -4.43 7.67 11.01
-v -4.43 7.92 11.01
-v -4.43 7.92 11.10
-v -5.06 7.58 11.10
-v -5.06 7.58 11.01
-v -4.52 7.67 11.01
-v -4.52 7.67 11.10
-v -5.61 7.67 11.19
-v -5.42 7.88 11.19
-v -5.61 7.92 11.19
-v -5.06 10.18 11.10
-v -5.42 9.62 11.10
-v -4.52 7.92 11.19
-v -4.71 7.89 11.19
-v -4.52 7.67 11.19
-v -5.06 7.58 11.19
-v -5.06 7.83 11.19
-v -4.71 9.62 11.04
-v -4.71 7.89 11.04
-v -4.52 9.78 11.10
-v -4.52 9.78 11.01
-v -5.61 7.67 11.10
-v -5.61 7.67 11.01
-v -4.71 9.62 11.10
-v -5.42 7.88 11.10
-v -4.71 7.89 11.10
-v -5.06 7.83 11.10
-v -4.52 7.92 11.10
-v -4.52 7.92 11.01
-v -5.61 7.92 11.01
-v -5.61 7.92 11.10
-v -5.70 7.67 11.19
-v -5.70 7.92 11.19
-v -4.43 7.92 11.19
-v -4.43 7.67 11.19
-v 3.43 9.62 11.04
-v 3.43 7.88 11.04
-v 3.79 7.83 11.04
-v 3.79 10.18 11.04
-v 3.15 7.92 11.10
-v 3.15 7.92 11.01
-v 3.15 7.67 11.01
-v 3.15 7.67 11.10
-v 3.79 10.59 11.10
-v 3.79 10.59 11.01
-v 3.24 9.78 11.01
-v 3.24 9.78 11.10
-v 4.43 7.67 11.10
-v 4.43 7.67 11.01
-v 4.43 7.92 11.01
-v 4.43 7.92 11.10
-v 3.79 7.58 11.10
-v 3.79 7.58 11.01
-v 4.33 7.67 11.01
-v 4.33 7.67 11.10
-v 3.24 7.67 11.19
-v 3.43 7.88 11.19
-v 3.24 7.92 11.19
-v 3.79 10.18 11.10
-v 3.43 9.62 11.10
-v 4.33 7.92 11.19
-v 4.15 7.89 11.19
-v 4.33 7.67 11.19
-v 3.79 7.58 11.19
-v 3.79 7.83 11.19
-v 4.15 9.62 11.04
-v 4.15 7.89 11.04
-v 4.33 9.78 11.10
-v 4.33 9.78 11.01
-v 3.24 7.67 11.10
-v 3.24 7.67 11.01
-v 4.15 9.62 11.10
-v 3.43 7.88 11.10
-v 4.15 7.89 11.10
-v 3.79 7.83 11.10
-v 4.33 7.92 11.10
-v 4.33 7.92 11.01
-v 3.24 7.92 11.01
-v 3.24 7.92 11.10
-v 3.15 7.67 11.19
-v 3.15 7.92 11.19
-v 4.43 7.92 11.19
-v 4.43 7.67 11.19
-v -0.84 4.66 11.04
-v -0.84 2.92 11.04
-v -0.48 2.88 11.04
-v -0.48 5.22 11.04
-v -1.12 2.96 11.10
-v -1.12 2.96 11.01
-v -1.12 2.71 11.01
-v -1.12 2.71 11.10
-v -0.48 5.63 11.10
-v -0.48 5.63 11.01
-v -1.03 4.82 11.01
-v -1.03 4.82 11.10
-v 0.15 2.71 11.10
-v 0.15 2.71 11.01
-v 0.15 2.96 11.01
-v 0.15 2.96 11.10
-v -0.48 2.63 11.10
-v -0.48 2.63 11.01
-v 0.06 2.71 11.01
-v 0.06 2.71 11.10
-v -1.03 2.71 11.19
-v -0.84 2.92 11.19
-v -1.03 2.96 11.19
-v -0.48 5.22 11.10
-v -0.84 4.66 11.10
-v 0.06 2.96 11.19
-v -0.13 2.94 11.19
-v 0.06 2.71 11.19
-v -0.48 2.63 11.19
-v -0.48 2.88 11.19
-v -0.13 4.66 11.04
-v -0.13 2.94 11.04
-v 0.06 4.82 11.10
-v 0.06 4.82 11.01
-v -1.03 2.71 11.10
-v -1.03 2.71 11.01
-v -0.13 4.66 11.10
-v -0.84 2.92 11.10
-v -0.13 2.94 11.10
-v -0.48 2.88 11.10
-v 0.06 2.96 11.10
-v 0.06 2.96 11.01
-v -1.03 2.96 11.01
-v -1.03 2.96 11.10
-v -1.12 2.71 11.19
-v -1.12 2.96 11.19
-v 0.15 2.96 11.19
-v 0.15 2.71 11.19
-v 0.43 20.76 3.64
-v 0.07 21.32 3.64
-v 0.07 18.98 3.64
-v 0.43 19.02 3.64
-v 0.71 19.06 3.70
-v 0.71 18.81 3.70
-v 0.71 18.81 3.61
-v 0.71 19.06 3.61
-v 0.07 21.73 3.70
-v 0.62 20.92 3.70
-v 0.62 20.92 3.61
-v 0.07 21.73 3.61
-v -0.57 18.81 3.70
-v -0.57 19.06 3.70
-v -0.57 19.06 3.61
-v -0.57 18.81 3.61
-v 0.07 18.73 3.70
-v -0.47 18.81 3.70
-v -0.47 18.81 3.61
-v 0.07 18.73 3.61
-v 0.62 18.81 3.79
-v 0.62 19.06 3.79
-v 0.43 19.02 3.79
-v 0.07 21.32 3.70
-v 0.43 20.76 3.70
-v -0.47 19.06 3.79
-v -0.47 18.81 3.79
-v -0.29 19.04 3.79
-v 0.07 18.73 3.79
-v 0.07 18.98 3.79
-v -0.29 20.76 3.64
-v -0.29 19.04 3.64
-v -0.47 20.92 3.70
-v -0.47 20.92 3.61
-v 0.62 18.81 3.70
-v 0.62 18.81 3.61
-v -0.29 20.76 3.70
-v 0.43 19.02 3.70
-v -0.29 19.04 3.70
-v 0.07 18.98 3.70
-v -0.47 19.06 3.70
-v -0.47 19.06 3.61
-v 0.62 19.06 3.70
-v 0.62 19.06 3.61
-v 0.71 19.06 3.79
-v 0.71 18.81 3.79
-v -0.57 18.81 3.79
-v -0.57 19.06 3.79
-v 6.58 20.76 3.64
-v 6.22 21.32 3.64
-v 6.22 18.98 3.64
-v 6.58 19.02 3.64
-v 6.86 19.06 3.70
-v 6.86 18.81 3.70
-v 6.86 18.81 3.61
-v 6.86 19.06 3.61
-v 6.22 21.73 3.70
-v 6.76 20.92 3.70
-v 6.76 20.92 3.61
-v 6.22 21.73 3.61
-v 5.58 18.81 3.70
-v 5.58 19.06 3.70
-v 5.58 19.06 3.61
-v 5.58 18.81 3.61
-v 6.22 18.73 3.70
-v 5.67 18.81 3.70
-v 5.67 18.81 3.61
-v 6.22 18.73 3.61
-v 6.76 18.81 3.79
-v 6.76 19.06 3.79
-v 6.58 19.02 3.79
-v 6.22 21.32 3.70
-v 6.58 20.76 3.70
-v 5.67 19.06 3.79
-v 5.67 18.81 3.79
-v 5.86 19.04 3.79
-v 6.22 18.73 3.79
-v 6.22 18.98 3.79
-v 5.86 20.76 3.64
-v 5.86 19.04 3.64
-v 5.67 20.92 3.70
-v 5.67 20.92 3.61
-v 6.76 18.81 3.70
-v 6.76 18.81 3.61
-v 5.86 20.76 3.70
-v 6.58 19.02 3.70
-v 5.86 19.04 3.70
-v 6.22 18.98 3.70
-v 5.67 19.06 3.70
-v 5.67 19.06 3.61
-v 6.76 19.06 3.70
-v 6.76 19.06 3.61
-v 6.86 19.06 3.79
-v 6.86 18.81 3.79
-v 5.58 18.81 3.79
-v 5.58 19.06 3.79
-v 12.89 4.66 -3.98
-v 12.89 5.22 -3.62
-v 12.89 2.88 -3.62
-v 12.89 2.92 -3.98
-v 12.96 2.96 -4.26
-v 12.96 2.71 -4.26
-v 12.87 2.71 -4.26
-v 12.87 2.96 -4.26
-v 12.96 5.63 -3.62
-v 12.96 4.82 -4.17
-v 12.87 4.82 -4.17
-v 12.87 5.63 -3.62
-v 12.96 2.71 -2.98
-v 12.96 2.96 -2.98
-v 12.87 2.96 -2.98
-v 12.87 2.71 -2.98
-v 12.96 2.63 -3.62
-v 12.96 2.71 -3.08
-v 12.87 2.71 -3.08
-v 12.87 2.63 -3.62
-v 13.05 2.71 -4.17
-v 13.05 2.96 -4.17
-v 13.05 2.92 -3.98
-v 12.96 5.22 -3.62
-v 12.96 4.66 -3.98
-v 13.05 2.96 -3.08
-v 13.05 2.71 -3.08
-v 13.05 2.94 -3.26
-v 13.05 2.63 -3.62
-v 13.05 2.88 -3.62
-v 12.89 4.66 -3.26
-v 12.89 2.94 -3.26
-v 12.96 4.82 -3.08
-v 12.87 4.82 -3.08
-v 12.96 2.71 -4.17
-v 12.87 2.71 -4.17
-v 12.96 4.66 -3.26
-v 12.96 2.92 -3.98
-v 12.96 2.94 -3.26
-v 12.96 2.88 -3.62
-v 12.96 2.96 -3.08
-v 12.87 2.96 -3.08
-v 12.96 2.96 -4.17
-v 12.87 2.96 -4.17
-v 13.05 2.96 -4.26
-v 13.05 2.71 -4.26
-v 13.05 2.71 -2.98
-v 13.05 2.96 -2.98
-v 12.89 4.66 3.26
-v 12.89 5.22 3.62
-v 12.89 2.88 3.62
-v 12.89 2.92 3.26
-v 12.96 2.96 2.98
-v 12.96 2.71 2.98
-v 12.87 2.71 2.98
-v 12.87 2.96 2.98
-v 12.96 5.63 3.62
-v 12.96 4.82 3.08
-v 12.87 4.82 3.08
-v 12.87 5.63 3.62
-v 12.96 2.71 4.26
-v 12.96 2.96 4.26
-v 12.87 2.96 4.26
-v 12.87 2.71 4.26
-v 12.96 2.63 3.62
-v 12.96 2.71 4.17
-v 12.87 2.71 4.17
-v 12.87 2.63 3.62
-v 13.05 2.71 3.08
-v 13.05 2.96 3.08
-v 13.05 2.92 3.26
-v 12.96 5.22 3.62
-v 12.96 4.66 3.26
-v 13.05 2.96 4.17
-v 13.05 2.71 4.17
-v 13.05 2.94 3.98
-v 13.05 2.63 3.62
-v 13.05 2.88 3.62
-v 12.89 4.66 3.98
-v 12.89 2.94 3.98
-v 12.96 4.82 4.17
-v 12.87 4.82 4.17
-v 12.96 2.71 3.08
-v 12.87 2.71 3.08
-v 12.96 4.66 3.98
-v 12.96 2.92 3.26
-v 12.96 2.94 3.98
-v 12.96 2.88 3.62
-v 12.96 2.96 4.17
-v 12.87 2.96 4.17
-v 12.96 2.96 3.08
-v 12.87 2.96 3.08
-v 13.05 2.96 2.98
-v 13.05 2.71 2.98
-v 13.05 2.71 4.26
-v 13.05 2.96 4.26
-v 8.75 20.76 0.36
-v 8.75 19.02 0.36
-v 8.75 18.98 -0.00
-v 8.75 21.32 -0.00
-v 8.81 19.06 0.64
-v 8.73 19.06 0.64
-v 8.73 18.81 0.64
-v 8.81 18.81 0.64
-v 8.81 21.73 -0.00
-v 8.73 21.73 -0.00
-v 8.73 20.92 0.55
-v 8.81 20.92 0.55
-v 8.81 18.81 -0.64
-v 8.73 18.81 -0.64
-v 8.73 19.06 -0.64
-v 8.81 19.06 -0.64
-v 8.81 18.73 -0.00
-v 8.73 18.73 -0.00
-v 8.73 18.81 -0.55
-v 8.81 18.81 -0.55
-v 8.90 18.81 0.55
-v 8.90 19.02 0.36
-v 8.90 19.06 0.55
-v 8.81 21.32 -0.00
-v 8.81 20.76 0.36
-v 8.90 19.06 -0.55
-v 8.90 19.04 -0.36
-v 8.90 18.81 -0.55
-v 8.90 18.73 -0.00
-v 8.90 18.98 -0.00
-v 8.75 20.76 -0.36
-v 8.75 19.04 -0.36
-v 8.81 20.92 -0.55
-v 8.73 20.92 -0.55
-v 8.81 18.81 0.55
-v 8.73 18.81 0.55
-v 8.81 20.76 -0.36
-v 8.81 19.02 0.36
-v 8.81 19.04 -0.36
-v 8.81 18.98 -0.00
-v 8.81 19.06 -0.55
-v 8.73 19.06 -0.55
-v 8.73 19.06 0.55
-v 8.81 19.06 0.55
-v 8.90 18.81 0.64
-v 8.90 19.06 0.64
-v 8.90 19.06 -0.64
-v 8.90 18.81 -0.64
-v -5.91 20.76 3.64
-v -6.27 21.32 3.64
-v -6.27 18.98 3.64
-v -5.91 19.02 3.64
-v -5.63 19.06 3.70
-v -5.63 18.81 3.70
-v -5.63 18.81 3.61
-v -5.63 19.06 3.61
-v -6.27 21.73 3.70
-v -5.73 20.92 3.70
-v -5.73 20.92 3.61
-v -6.27 21.73 3.61
-v -6.91 18.81 3.70
-v -6.91 19.06 3.70
-v -6.91 19.06 3.61
-v -6.91 18.81 3.61
-v -6.27 18.73 3.70
-v -6.82 18.81 3.70
-v -6.82 18.81 3.61
-v -6.27 18.73 3.61
-v -5.73 18.81 3.79
-v -5.73 19.06 3.79
-v -5.91 19.02 3.79
-v -6.27 21.32 3.70
-v -5.91 20.76 3.70
-v -6.82 19.06 3.79
-v -6.82 18.81 3.79
-v -6.63 19.04 3.79
-v -6.27 18.73 3.79
-v -6.27 18.98 3.79
-v -6.63 20.76 3.64
-v -6.63 19.04 3.64
-v -6.82 20.92 3.70
-v -6.82 20.92 3.61
-v -5.73 18.81 3.70
-v -5.73 18.81 3.61
-v -6.63 20.76 3.70
-v -5.91 19.02 3.70
-v -6.63 19.04 3.70
-v -6.27 18.98 3.70
-v -6.82 19.06 3.70
-v -6.82 19.06 3.61
-v -5.73 19.06 3.70
-v -5.73 19.06 3.61
-v -5.63 19.06 3.79
-v -5.63 18.81 3.79
-v -6.91 18.81 3.79
-v -6.91 19.06 3.79
-v 1.22 3.89 -13.04
-v 1.22 0.00 -13.04
-v 0.00 0.00 -13.04
-v 0.00 4.45 -13.04
-v -2.44 3.02 -13.04
-v -1.22 3.89 -13.04
-v -1.22 0.00 -13.04
-v -2.44 0.00 -13.04
-v 2.44 3.02 -13.04
-v 2.44 0.00 -13.04
-v 2.76 0.00 -12.61
-v 2.76 0.00 -13.28
-v 2.72 2.63 -13.28
-v 2.72 2.63 -12.61
-v 2.32 0.00 -13.28
-v 2.28 2.21 -13.28
-v 2.32 0.00 -12.61
-v 2.28 2.21 -12.61
-v 1.57 4.51 -13.28
-v 1.57 4.51 -12.61
-v 1.32 3.79 -13.28
-v 1.32 3.79 -12.61
-v 0.00 5.20 -13.28
-v 0.00 5.20 -12.61
-v 0.00 4.45 -13.28
-v 0.00 4.45 -12.61
-v -1.57 4.51 -13.28
-v -1.57 4.51 -12.61
-v -1.32 3.79 -13.28
-v -1.32 3.79 -12.61
-v -2.72 2.63 -13.28
-v -2.72 2.63 -12.61
-v -2.28 2.21 -13.28
-v -2.28 2.21 -12.61
-v -2.76 0.00 -13.28
-v -2.76 0.00 -12.61
-v -2.32 0.00 -13.28
-v -2.32 0.00 -12.61
-v -23.02 0.02 -7.19
-v -23.81 0.02 -7.26
-v -23.50 3.76 -6.94
-v -22.95 3.76 -6.89
-v -23.10 0.02 -6.35
-v -23.01 3.76 -6.25
-v -23.88 0.02 -6.42
-v -23.56 3.76 -6.30
-v -23.00 6.77 -7.20
-v -23.83 6.77 -7.27
-v -23.08 7.23 -6.33
-v -23.90 7.23 -6.41
-v -23.14 6.61 -6.66
-v -23.14 6.39 0.01
-v -23.82 6.39 0.01
-v -23.82 6.61 -6.66
-v -23.82 7.03 0.01
-v -23.82 7.24 -6.66
-v -23.14 7.03 0.01
-v -23.14 7.24 -6.66
-v -23.14 6.61 6.68
-v -23.82 6.61 6.68
-v -23.82 7.24 6.68
-v -23.14 7.24 6.68
-v -10.64 6.61 -6.65
-v -17.31 6.39 -6.65
-v -17.31 6.39 -7.33
-v -10.64 6.61 -7.33
-v -17.31 7.03 -7.33
-v -10.64 7.24 -7.33
-v -17.31 7.03 -6.65
-v -10.64 7.24 -6.65
-v -23.99 6.61 -6.65
-v -23.99 6.61 -7.33
-v -23.99 7.24 -7.33
-v -23.99 7.24 -6.65
-v -23.02 0.02 7.20
-v -22.95 3.76 6.91
-v -23.50 3.76 6.95
-v -23.81 0.02 7.27
-v -23.10 0.02 6.37
-v -23.01 3.76 6.27
-v -23.88 0.02 6.44
-v -23.56 3.76 6.32
-v -23.00 6.77 7.22
-v -23.83 6.77 7.29
-v -23.08 7.23 6.35
-v -23.90 7.23 6.42
-v -10.64 6.61 6.68
-v -10.64 6.61 7.36
-v -17.31 6.39 7.36
-v -17.31 6.39 6.68
-v -10.64 7.24 7.36
-v -17.31 7.03 7.36
-v -10.64 7.24 6.68
-v -17.31 7.03 6.68
-v -23.99 6.61 7.36
-v -23.99 6.61 6.68
-v -23.99 7.24 7.36
-v -23.99 7.24 6.68
-v 8.74 6.44 10.70
-v 8.74 6.44 11.59
-v 0.00 6.16 11.59
-v 0.00 6.16 10.70
-v 8.74 7.27 11.59
-v 0.00 6.98 11.59
-v 8.74 7.27 10.70
-v 0.00 6.98 10.70
-v -8.74 6.44 11.59
-v -8.74 6.44 10.70
-v -8.74 7.27 11.59
-v -8.74 7.27 10.70
-v 8.74 17.79 -0.00
-v 8.74 27.72 -0.00
-v 8.74 23.62 3.62
-v 0.00 17.79 -3.62
-v 0.00 23.02 -3.62
-v 8.74 23.62 -3.62
-v -8.74 17.79 -0.00
-v -8.74 27.60 -0.00
-v -8.74 23.62 -3.62
-v 0.00 17.79 3.62
-v 0.00 23.02 3.62
-v -8.74 23.62 3.62
-v 8.34 17.58 -3.11
-v 8.50 20.48 -3.15
-v 8.50 20.48 -3.73
-v 8.34 17.58 -3.92
-v 8.34 24.35 -3.11
-v 8.34 23.76 -3.83
-v 9.14 17.58 -3.11
-v 9.09 20.48 -3.15
-v 9.14 24.35 -3.11
-v 9.14 17.58 -3.92
-v 9.09 20.48 -3.73
-v 9.14 23.76 -3.83
-v -0.81 20.18 -3.56
-v -0.81 17.74 -3.56
-v -0.81 17.74 -3.74
-v -0.81 20.18 -3.74
-v -0.95 20.13 -3.74
-v -0.95 17.74 -3.74
-v -0.95 17.74 -3.56
-v -0.95 20.13 -3.56
-v -1.04 20.10 -3.76
-v -1.04 20.10 -3.58
-v -1.04 20.32 -3.58
-v -1.04 20.32 -3.76
-v 1.04 20.32 -3.58
-v 1.04 20.10 -3.58
-v 1.04 20.10 -3.76
-v 1.04 20.32 -3.76
-v -0.39 20.29 -3.76
-v -0.39 20.29 -3.58
-v -0.39 20.51 -3.76
-v -0.39 20.51 -3.58
-v 0.94 20.15 -3.56
-v 0.94 17.74 -3.56
-v 0.94 17.74 -3.74
-v 0.94 20.15 -3.74
-v 0.80 17.74 -3.74
-v 0.80 20.19 -3.74
-v 0.80 17.74 -3.56
-v 0.80 20.19 -3.56
-v 0.39 20.29 -3.76
-v 0.39 20.29 -3.58
-v 0.39 20.51 -3.76
-v 0.39 20.51 -3.58
-v 0.00 20.34 -3.76
-v 0.00 20.34 -3.58
-v 0.00 20.56 -3.76
-v 0.00 20.56 -3.58
-v -0.01 17.69 -4.00
-v 0.78 17.69 -4.00
-v 0.78 17.66 -3.95
-v -0.01 17.66 -3.95
-v -0.01 17.76 -4.01
-v 0.78 17.76 -4.01
-v 0.78 17.75 -3.95
-v 0.78 17.85 -3.95
-v 0.78 17.85 -3.64
-v 0.78 17.75 -3.64
-v 0.78 17.82 -4.00
-v 0.78 17.66 -3.64
-v -0.01 17.85 -3.95
-v -0.01 17.85 -3.64
-v -0.01 17.82 -4.00
-v -0.80 17.66 -3.95
-v -0.80 17.69 -4.00
-v -0.80 17.76 -4.01
-v -0.80 17.85 -3.64
-v -0.80 17.85 -3.95
-v -0.80 17.75 -3.95
-v -0.80 17.75 -3.64
-v -0.80 17.82 -4.00
-v -0.80 17.66 -3.64
-v 0.86 20.19 -3.66
-v 0.86 17.72 -3.66
-v 0.02 17.72 -3.66
-v 0.02 20.45 -3.66
-v -0.82 20.19 -3.66
-v -0.82 17.72 -3.66
-v -9.14 17.58 -3.11
-v -8.97 20.48 -3.15
-v -8.97 20.48 -3.73
-v -9.14 17.58 -3.92
-v -9.14 24.35 -3.11
-v -9.14 23.76 -3.83
-v -8.34 17.58 -3.11
-v -8.39 20.48 -3.15
-v -8.34 24.35 -3.11
-v -8.34 17.58 -3.92
-v -8.39 20.48 -3.73
-v -8.34 23.76 -3.83
-v -9.14 17.58 3.11
-v -9.14 17.58 3.92
-v -8.97 20.48 3.73
-v -8.97 20.48 3.15
-v -9.14 23.76 3.83
-v -9.14 24.35 3.11
-v -8.34 17.58 3.11
-v -8.39 20.48 3.15
-v -8.34 24.35 3.11
-v -8.39 20.48 3.73
-v -8.34 17.58 3.92
-v -8.34 23.76 3.83
-v 8.34 17.58 3.11
-v 8.34 17.58 3.92
-v 8.50 20.48 3.73
-v 8.50 20.48 3.15
-v 8.34 23.76 3.83
-v 8.34 24.35 3.11
-v 9.14 17.58 3.11
-v 9.09 20.48 3.15
-v 9.14 24.35 3.11
-v 9.09 20.48 3.73
-v 9.14 17.58 3.92
-v 9.14 23.76 3.83
-v 12.59 6.44 -8.74
-v 13.48 6.44 -8.74
-v 13.48 6.16 -0.00
-v 12.59 6.16 -0.00
-v 13.48 7.27 -8.74
-v 13.48 6.98 -0.00
-v 12.59 7.27 -8.74
-v 12.59 6.98 -0.00
-v 13.48 6.44 8.74
-v 12.59 6.44 8.74
-v 13.48 7.27 8.74
-v 12.59 7.27 8.74
-v -9.92 18.64 4.67
-v -10.78 18.64 4.67
-v -10.78 18.64 6.66
-v -9.92 18.64 6.66
-v -9.92 17.79 4.67
-v -10.78 17.79 4.67
-v -10.78 17.79 6.66
-v -9.92 17.79 6.66
-v -12.40 7.80 6.90
-v -12.40 7.80 6.03
-v -14.38 7.80 6.03
-v -14.38 7.80 6.90
-v -12.40 6.95 6.90
-v -12.40 6.95 6.03
-v -14.38 6.95 6.03
-v -14.38 6.95 6.90
-v -12.40 7.80 -5.99
-v -12.40 7.80 -6.86
-v -14.38 7.80 -6.86
-v -14.38 7.80 -5.99
-v -12.40 6.95 -5.99
-v -12.40 6.95 -6.86
-v -14.38 6.95 -6.86
-v -14.38 6.95 -5.99
-v -16.55 0.00 12.98
-v -16.55 7.76 12.98
-v -17.17 7.76 10.68
-v -17.17 0.00 10.68
-v -14.87 0.00 14.66
-v -14.87 7.76 14.66
-v -12.57 0.00 15.28
-v -12.57 7.76 15.28
-v -10.27 0.00 14.66
-v -10.27 7.76 14.66
-v -8.58 0.00 12.98
-v -8.58 7.76 12.98
-v -7.97 0.00 10.68
-v -7.97 7.76 10.68
-v -8.58 0.00 8.38
-v -8.58 7.76 8.38
-v -10.27 0.00 6.69
-v -10.27 7.76 6.69
-v -12.57 0.00 6.08
-v -12.57 7.76 6.08
-v -14.87 0.00 6.69
-v -14.87 7.76 6.69
-v -16.55 0.00 8.38
-v -16.55 7.76 8.38
-v -16.78 7.76 13.11
-v -16.78 8.57 13.11
-v -17.43 8.57 10.68
-v -17.43 7.76 10.68
-v -15.00 7.76 14.89
-v -15.00 8.57 14.89
-v -12.57 7.76 15.54
-v -12.57 8.57 15.54
-v -10.13 7.76 14.89
-v -10.13 8.57 14.89
-v -8.35 7.76 13.11
-v -8.35 8.57 13.11
-v -7.70 7.76 10.68
-v -7.70 8.57 10.68
-v -8.35 7.76 8.24
-v -8.35 8.57 8.24
-v -10.13 7.76 6.46
-v -10.13 8.57 6.46
-v -12.57 7.76 5.81
-v -12.57 8.57 5.81
-v -15.00 7.76 6.46
-v -15.00 8.57 6.46
-v -16.78 7.76 8.24
-v -16.78 8.57 8.24
-v -17.17 8.57 10.68
-v -16.55 8.57 12.98
-v -14.87 8.57 14.66
-v -12.57 8.57 15.28
-v -10.27 8.57 14.66
-v -8.58 8.57 12.98
-v -7.97 8.57 10.68
-v -8.58 8.57 8.38
-v -10.27 8.57 6.69
-v -12.57 8.57 6.08
-v -14.87 8.57 6.69
-v -16.55 8.57 8.38
-v -16.55 16.89 12.98
-v -17.17 16.89 10.68
-v -14.87 16.89 14.66
-v -12.57 16.89 15.28
-v -10.27 16.89 14.66
-v -8.58 16.89 12.98
-v -7.97 16.89 10.68
-v -8.58 16.89 8.38
-v -10.27 16.89 6.69
-v -12.57 16.89 6.08
-v -14.87 16.89 6.69
-v -16.55 16.89 8.38
-v -17.13 21.30 13.31
-v -17.47 21.30 13.51
-v -18.23 21.30 10.68
-v -17.83 21.30 10.68
-v -15.20 21.30 15.24
-v -15.40 21.30 15.58
-v -12.57 21.30 15.94
-v -12.57 21.30 16.34
-v -9.93 21.30 15.24
-v -9.73 21.30 15.58
-v -8.01 21.30 13.31
-v -7.66 21.30 13.51
-v -7.30 21.30 10.68
-v -6.90 21.30 10.68
-v -8.01 21.30 8.04
-v -7.66 21.30 7.84
-v -9.93 21.30 6.12
-v -9.73 21.30 5.77
-v -12.57 21.30 5.41
-v -12.57 21.30 5.01
-v -15.20 21.30 6.12
-v -15.40 21.30 5.77
-v -17.13 21.30 8.04
-v -17.47 21.30 7.84
-v -16.17 24.76 12.76
-v -16.72 24.76 10.68
-v -14.64 24.76 14.28
-v -12.57 24.76 14.83
-v -10.49 24.76 14.28
-v -8.97 24.76 12.76
-v -8.41 24.76 10.68
-v -8.97 24.76 8.60
-v -10.49 24.76 7.08
-v -12.57 24.76 6.52
-v -14.64 24.76 7.08
-v -16.17 24.76 8.60
-v -16.13 28.50 12.74
-v -16.69 28.50 10.68
-v -14.63 28.50 14.24
-v -12.57 28.50 14.80
-v -10.51 28.50 14.24
-v -9.00 28.50 12.74
-v -8.45 28.50 10.68
-v -9.00 28.50 8.62
-v -10.51 28.50 7.11
-v -12.57 28.50 6.56
-v -14.63 28.50 7.11
-v -16.13 28.50 8.62
-v -17.13 17.36 13.31
-v -17.83 17.36 10.68
-v -15.20 17.36 15.24
-v -12.57 17.36 15.94
-v -9.93 17.36 15.24
-v -8.01 17.36 13.31
-v -7.30 17.36 10.68
-v -8.01 17.36 8.04
-v -9.93 17.36 6.12
-v -12.57 17.36 5.41
-v -15.20 17.36 6.12
-v -17.13 17.36 8.04
-v -17.91 20.21 10.37
-v -17.91 19.23 10.37
-v -17.91 19.21 10.80
-v -17.91 20.52 10.80
-v -17.81 19.26 10.03
-v -17.81 19.12 10.03
-v -17.91 19.12 10.04
-v -17.91 19.26 10.04
-v -17.89 20.75 10.80
-v -17.84 20.29 10.15
-v -17.94 20.29 10.15
-v -17.98 20.75 10.81
-v -17.68 19.12 11.55
-v -17.68 19.26 11.55
-v -17.78 19.26 11.56
-v -17.78 19.12 11.56
-v -17.89 19.07 10.80
-v -17.73 19.12 11.45
-v -17.82 19.12 11.45
-v -17.98 19.07 10.81
-v -18.05 19.12 10.16
-v -18.08 19.23 10.39
-v -18.05 19.26 10.16
-v -17.98 20.21 10.38
-v -17.98 20.52 10.81
-v -17.93 19.26 11.46
-v -18.01 19.24 11.24
-v -17.93 19.12 11.46
-v -18.09 19.07 10.82
-v -18.09 19.21 10.82
-v -17.83 20.21 11.23
-v -17.83 19.24 11.23
-v -17.73 20.29 11.45
-v -17.82 20.29 11.45
-v -17.84 19.12 10.15
-v -17.94 19.12 10.15
-v -17.90 20.21 11.23
-v -17.98 19.23 10.38
-v -17.90 19.24 11.23
-v -17.98 19.21 10.81
-v -17.82 19.26 11.45
-v -17.73 19.26 11.45
-v -17.84 19.26 10.15
-v -17.94 19.26 10.15
-v -18.02 19.12 10.05
-v -18.02 19.26 10.05
-v -17.88 19.26 11.57
-v -17.88 19.12 11.57
-v -12.87 20.21 16.02
-v -12.87 19.23 16.02
-v -12.44 19.21 16.02
-v -12.44 20.52 16.02
-v -13.21 19.26 15.92
-v -13.21 19.12 15.92
-v -13.20 19.12 16.02
-v -13.20 19.26 16.02
-v -12.44 20.75 16.00
-v -13.10 20.29 15.95
-v -13.09 20.29 16.05
-v -12.43 20.75 16.10
-v -11.69 19.12 15.79
-v -11.69 19.26 15.79
-v -11.68 19.26 15.89
-v -11.68 19.12 15.89
-v -12.44 19.07 16.00
-v -11.80 19.12 15.84
-v -11.79 19.12 15.94
-v -12.43 19.07 16.10
-v -13.08 19.12 16.16
-v -12.85 19.23 16.20
-v -13.08 19.26 16.16
-v -12.86 20.21 16.09
-v -12.43 20.52 16.10
-v -11.78 19.26 16.04
-v -12.00 19.24 16.12
-v -11.78 19.12 16.04
-v -12.42 19.07 16.20
-v -12.42 19.21 16.20
-v -12.01 20.21 15.94
-v -12.01 19.24 15.94
-v -11.80 20.29 15.84
-v -11.79 20.29 15.94
-v -13.10 19.12 15.95
-v -13.09 19.12 16.05
-v -12.01 20.21 16.01
-v -12.86 19.23 16.09
-v -12.01 19.24 16.01
-v -12.43 19.21 16.10
-v -11.79 19.26 15.94
-v -11.80 19.26 15.84
-v -13.10 19.26 15.95
-v -13.09 19.26 16.05
-v -13.19 19.12 16.13
-v -13.19 19.26 16.13
-v -11.67 19.26 16.00
-v -11.67 19.12 16.00
-v -9.24 23.34 12.52
-v -8.56 24.92 12.99
-v -9.10 24.92 13.76
-v -9.78 23.34 13.29
-v -9.53 28.41 12.29
-v -8.63 28.41 12.92
-v -9.18 28.41 13.70
-v -10.08 28.41 13.07
-v -12.87 27.21 14.81
-v -12.87 26.24 14.81
-v -12.44 26.21 14.82
-v -12.44 27.52 14.82
-v -13.21 26.26 14.72
-v -13.21 26.12 14.72
-v -13.20 26.12 14.82
-v -13.20 26.26 14.82
-v -12.44 27.75 14.80
-v -13.10 27.30 14.75
-v -13.09 27.30 14.85
-v -12.43 27.75 14.89
-v -11.69 26.12 14.59
-v -11.69 26.26 14.59
-v -11.68 26.26 14.69
-v -11.68 26.12 14.69
-v -12.44 26.07 14.80
-v -11.80 26.12 14.64
-v -11.79 26.12 14.73
-v -12.43 26.07 14.89
-v -13.08 26.12 14.96
-v -12.85 26.24 14.99
-v -13.08 26.26 14.96
-v -12.86 27.21 14.89
-v -12.43 27.52 14.89
-v -11.78 26.26 14.84
-v -12.00 26.25 14.92
-v -11.78 26.12 14.84
-v -12.42 26.07 15.00
-v -12.42 26.21 15.00
-v -12.01 27.21 14.74
-v -12.01 26.25 14.74
-v -11.80 27.30 14.64
-v -11.79 27.30 14.73
-v -13.10 26.12 14.75
-v -13.09 26.12 14.85
-v -12.01 27.21 14.81
-v -12.86 26.24 14.89
-v -12.01 26.25 14.81
-v -12.43 26.21 14.89
-v -11.79 26.26 14.73
-v -11.80 26.26 14.64
-v -13.10 26.26 14.75
-v -13.09 26.26 14.85
-v -13.19 26.12 14.93
-v -13.19 26.26 14.93
-v -11.67 26.26 14.79
-v -11.67 26.12 14.79
-v -14.41 23.34 14.01
-v -14.88 24.92 14.68
-v -15.65 24.92 14.14
-v -15.18 23.34 13.46
-v -14.18 28.41 13.71
-v -14.81 28.41 14.61
-v -15.59 28.41 14.07
-v -14.96 28.41 13.17
-v -8.43 27.21 10.98
-v -8.43 26.24 10.98
-v -8.42 26.21 10.55
-v -8.42 27.52 10.55
-v -8.52 26.26 11.32
-v -8.52 26.12 11.32
-v -8.42 26.12 11.31
-v -8.42 26.26 11.31
-v -8.45 27.75 10.55
-v -8.49 27.30 11.21
-v -8.39 27.30 11.20
-v -8.35 27.75 10.54
-v -8.65 26.12 9.80
-v -8.65 26.26 9.80
-v -8.56 26.26 9.79
-v -8.56 26.12 9.79
-v -8.45 26.07 10.55
-v -8.61 26.12 9.91
-v -8.51 26.12 9.90
-v -8.35 26.07 10.54
-v -8.29 26.12 11.19
-v -8.25 26.24 10.96
-v -8.29 26.26 11.19
-v -8.35 27.21 10.97
-v -8.35 27.52 10.54
-v -8.40 26.26 9.89
-v -8.32 26.25 10.11
-v -8.40 26.12 9.89
-v -8.24 26.07 10.53
-v -8.24 26.21 10.53
-v -8.50 27.21 10.13
-v -8.50 26.25 10.13
-v -8.61 27.30 9.91
-v -8.51 27.30 9.90
-v -8.49 26.12 11.21
-v -8.39 26.12 11.20
-v -8.43 27.21 10.12
-v -8.35 26.24 10.97
-v -8.43 26.25 10.12
-v -8.35 26.21 10.54
-v -8.51 26.26 9.90
-v -8.61 26.26 9.91
-v -8.49 26.26 11.21
-v -8.39 26.26 11.20
-v -8.32 26.12 11.30
-v -8.32 26.26 11.30
-v -8.45 26.26 9.78
-v -8.45 26.12 9.78
-v -13.04 12.70 6.81
-v -13.04 14.28 5.99
-v -12.09 14.28 5.99
-v -12.09 12.70 6.81
-v -13.04 17.34 6.74
-v -13.04 17.34 5.64
-v -12.09 17.34 5.64
-v -12.09 17.34 6.74
-v -8.98 12.70 12.20
-v -8.27 14.28 12.61
-v -8.74 14.28 13.43
-v -9.46 12.70 13.02
-v -8.92 17.34 12.24
-v -7.97 17.34 12.79
-v -8.44 17.34 13.61
-v -9.39 17.34 13.06
-v -12.09 12.70 14.54
-v -12.09 14.28 15.36
-v -13.04 14.28 15.36
-v -13.04 12.70 14.54
-v -12.09 17.34 14.62
-v -12.09 17.34 15.71
-v -13.04 17.34 15.71
-v -13.04 17.34 14.62
-v -10.73 23.34 7.35
-v -10.25 24.92 6.67
-v -9.48 24.92 7.22
-v -9.95 23.34 7.89
-v -10.95 28.41 7.65
-v -10.32 28.41 6.74
-v -9.55 28.41 7.29
-v -10.18 28.41 8.19
-v -9.46 12.70 8.34
-v -8.74 14.28 7.92
-v -8.27 14.28 8.74
-v -8.98 12.70 9.15
-v -9.39 17.34 8.30
-v -8.44 17.34 7.75
-v -7.97 17.34 8.57
-v -8.92 17.34 9.12
-v -7.23 20.21 10.98
-v -7.23 19.23 10.98
-v -7.22 19.21 10.55
-v -7.22 20.52 10.55
-v -7.32 19.26 11.32
-v -7.32 19.12 11.32
-v -7.22 19.12 11.31
-v -7.22 19.26 11.31
-v -7.24 20.75 10.55
-v -7.29 20.29 11.21
-v -7.19 20.29 11.20
-v -7.15 20.75 10.54
-v -7.45 19.12 9.80
-v -7.45 19.26 9.80
-v -7.35 19.26 9.79
-v -7.35 19.12 9.79
-v -7.24 19.07 10.55
-v -7.41 19.12 9.91
-v -7.31 19.12 9.90
-v -7.15 19.07 10.54
-v -7.09 19.12 11.19
-v -7.05 19.23 10.96
-v -7.09 19.26 11.19
-v -7.15 20.21 10.97
-v -7.15 20.52 10.54
-v -7.20 19.26 9.89
-v -7.12 19.24 10.11
-v -7.20 19.12 9.89
-v -7.04 19.07 10.53
-v -7.04 19.21 10.53
-v -7.30 20.21 10.13
-v -7.30 19.24 10.13
-v -7.41 20.29 9.91
-v -7.31 20.29 9.90
-v -7.29 19.12 11.21
-v -7.19 19.12 11.20
-v -7.23 20.21 10.12
-v -7.15 19.23 10.97
-v -7.23 19.24 10.12
-v -7.15 19.21 10.54
-v -7.31 19.26 9.90
-v -7.41 19.26 9.91
-v -7.29 19.26 11.21
-v -7.19 19.26 11.20
-v -7.11 19.12 11.30
-v -7.11 19.26 11.30
-v -7.25 19.26 9.78
-v -7.25 19.12 9.78
-v -12.26 27.21 6.54
-v -12.26 26.24 6.54
-v -12.69 26.21 6.53
-v -12.69 27.52 6.53
-v -11.92 26.26 6.63
-v -11.92 26.12 6.63
-v -11.93 26.12 6.53
-v -11.93 26.26 6.53
-v -12.69 27.75 6.56
-v -12.03 27.30 6.60
-v -12.04 27.30 6.51
-v -12.70 27.75 6.46
-v -13.44 26.12 6.76
-v -13.44 26.26 6.76
-v -13.45 26.26 6.67
-v -13.45 26.12 6.67
-v -12.69 26.07 6.56
-v -13.34 26.12 6.72
-v -13.34 26.12 6.62
-v -12.70 26.07 6.46
-v -12.05 26.12 6.40
-v -12.28 26.24 6.36
-v -12.05 26.26 6.40
-v -12.27 27.21 6.47
-v -12.70 27.52 6.46
-v -13.35 26.26 6.51
-v -13.13 26.25 6.43
-v -13.35 26.12 6.51
-v -12.71 26.07 6.35
-v -12.71 26.21 6.35
-v -13.12 27.21 6.61
-v -13.12 26.25 6.61
-v -13.34 27.30 6.72
-v -13.34 27.30 6.62
-v -12.03 26.12 6.60
-v -12.04 26.12 6.51
-v -13.12 27.21 6.54
-v -12.27 26.24 6.47
-v -13.12 26.25 6.54
-v -12.70 26.21 6.46
-v -13.34 26.26 6.62
-v -13.34 26.26 6.72
-v -12.03 26.26 6.60
-v -12.04 26.26 6.51
-v -11.94 26.12 6.43
-v -11.94 26.26 6.43
-v -13.46 26.26 6.56
-v -13.46 26.12 6.56
-v -16.15 12.70 9.15
-v -16.86 14.28 8.74
-v -16.39 14.28 7.92
-v -15.67 12.70 8.34
-v -16.21 17.34 9.12
-v -17.17 17.34 8.57
-v -16.69 17.34 7.75
-v -15.74 17.34 8.30
-v -12.26 20.21 5.34
-v -12.26 19.23 5.34
-v -12.69 19.21 5.33
-v -12.69 20.52 5.33
-v -11.92 19.26 5.43
-v -11.92 19.12 5.43
-v -11.93 19.12 5.33
-v -11.93 19.26 5.33
-v -12.69 20.75 5.36
-v -12.03 20.29 5.40
-v -12.04 20.29 5.30
-v -12.70 20.75 5.26
-v -13.44 19.12 5.56
-v -13.44 19.26 5.56
-v -13.45 19.26 5.47
-v -13.45 19.12 5.47
-v -12.69 19.07 5.36
-v -13.34 19.12 5.52
-v -13.34 19.12 5.42
-v -12.70 19.07 5.26
-v -12.05 19.12 5.20
-v -12.28 19.23 5.16
-v -12.05 19.26 5.20
-v -12.27 20.21 5.26
-v -12.70 20.52 5.26
-v -13.35 19.26 5.31
-v -13.13 19.24 5.23
-v -13.35 19.12 5.31
-v -12.71 19.07 5.15
-v -12.71 19.21 5.15
-v -13.12 20.21 5.41
-v -13.12 19.24 5.41
-v -13.34 20.29 5.52
-v -13.34 20.29 5.42
-v -12.03 19.12 5.40
-v -12.04 19.12 5.30
-v -13.12 20.21 5.34
-v -12.27 19.23 5.26
-v -13.12 19.24 5.34
-v -12.70 19.21 5.26
-v -13.34 19.26 5.42
-v -13.34 19.26 5.52
-v -12.03 19.26 5.40
-v -12.04 19.26 5.30
-v -11.94 19.12 5.23
-v -11.94 19.26 5.23
-v -13.46 19.26 5.36
-v -13.46 19.12 5.36
-v -15.89 23.34 8.84
-v -16.57 24.92 8.36
-v -16.03 24.92 7.59
-v -15.35 23.34 8.06
-v -15.60 28.41 9.06
-v -16.50 28.41 8.43
-v -15.96 28.41 7.66
-v -15.06 28.41 8.29
-v -16.70 27.21 10.37
-v -16.70 26.24 10.37
-v -16.71 26.21 10.80
-v -16.71 27.52 10.80
-v -16.61 26.26 10.03
-v -16.61 26.12 10.03
-v -16.71 26.12 10.04
-v -16.71 26.26 10.04
-v -16.69 27.75 10.80
-v -16.64 27.30 10.15
-v -16.74 27.30 10.15
-v -16.78 27.75 10.81
-v -16.48 26.12 11.55
-v -16.48 26.26 11.55
-v -16.58 26.26 11.56
-v -16.58 26.12 11.56
-v -16.69 26.07 10.80
-v -16.53 26.12 11.45
-v -16.62 26.12 11.45
-v -16.78 26.07 10.81
-v -16.84 26.12 10.16
-v -16.88 26.24 10.39
-v -16.84 26.26 10.16
-v -16.78 27.21 10.38
-v -16.78 27.52 10.81
-v -16.73 26.26 11.46
-v -16.81 26.25 11.24
-v -16.73 26.12 11.46
-v -16.89 26.07 10.82
-v -16.89 26.21 10.82
-v -16.63 27.21 11.23
-v -16.63 26.25 11.23
-v -16.53 27.30 11.45
-v -16.62 27.30 11.45
-v -16.64 26.12 10.15
-v -16.74 26.12 10.15
-v -16.70 27.21 11.23
-v -16.78 26.24 10.38
-v -16.70 26.25 11.23
-v -16.78 26.21 10.81
-v -16.62 26.26 11.45
-v -16.53 26.26 11.45
-v -16.64 26.26 10.15
-v -16.74 26.26 10.15
-v -16.82 26.12 10.05
-v -16.82 26.26 10.05
-v -16.68 26.26 11.57
-v -16.68 26.12 11.57
-v -15.67 12.70 13.02
-v -16.39 14.28 13.43
-v -16.86 14.28 12.61
-v -16.15 12.70 12.20
-v -15.74 17.34 13.06
-v -16.69 17.34 13.61
-v -17.17 17.34 12.79
-v -16.21 17.34 12.24
-v -16.83 28.50 13.14
-v -16.83 30.29 13.14
-v -17.49 30.29 10.68
-v -17.49 28.50 10.68
-v -15.03 28.50 14.94
-v -15.03 30.29 14.94
-v -12.57 28.50 15.60
-v -12.57 30.29 15.60
-v -10.10 28.50 14.94
-v -10.10 30.29 14.94
-v -8.30 28.50 13.14
-v -8.30 30.29 13.14
-v -7.64 28.50 10.68
-v -7.64 30.29 10.68
-v -8.30 28.50 8.21
-v -8.30 30.29 8.21
-v -10.10 28.50 6.41
-v -10.10 30.29 6.41
-v -12.57 28.50 5.75
-v -12.57 30.29 5.75
-v -15.03 28.50 6.41
-v -15.03 30.29 6.41
-v -16.83 28.50 8.21
-v -16.83 30.29 8.21
-v -16.21 30.29 12.78
-v -16.78 30.29 10.68
-v -15.03 30.90 14.94
-v -14.67 30.90 14.32
-v -16.21 30.90 12.78
-v -16.83 30.90 13.14
-v -12.57 30.29 14.89
-v -14.67 30.29 14.32
-v -10.10 30.90 14.94
-v -10.46 30.90 14.32
-v -12.57 30.90 14.89
-v -12.57 30.90 15.60
-v -8.92 30.29 12.78
-v -10.46 30.29 14.32
-v -7.64 30.90 10.68
-v -8.36 30.90 10.68
-v -8.92 30.90 12.78
-v -8.30 30.90 13.14
-v -8.92 30.29 8.57
-v -8.36 30.29 10.68
-v -10.10 30.90 6.41
-v -10.46 30.90 7.03
-v -8.92 30.90 8.57
-v -8.30 30.90 8.21
-v -12.57 30.29 6.47
-v -10.46 30.29 7.03
-v -15.03 30.90 6.41
-v -14.67 30.90 7.03
-v -12.57 30.90 6.47
-v -12.57 30.90 5.75
-v -16.21 30.29 8.57
-v -14.67 30.29 7.03
-v -17.49 30.90 10.68
-v -16.78 30.90 10.68
-v -16.21 30.90 8.57
-v -16.83 30.90 8.21
-v -16.21 29.42 12.78
-v -16.78 29.42 10.68
-v -14.67 29.42 14.32
-v -12.57 29.42 14.89
-v -10.46 29.42 14.32
-v -8.92 29.42 12.78
-v -8.36 29.42 10.68
-v -8.92 29.42 8.57
-v -10.46 29.42 7.03
-v -12.57 29.42 6.47
-v -14.67 29.42 7.03
-v -16.21 29.42 8.57
-v -12.57 29.42 10.68
-v 17.17 7.76 10.68
-v 16.55 7.76 12.98
-v 16.55 0.00 12.98
-v 17.17 0.00 10.68
-v 14.87 7.76 14.66
-v 14.87 0.00 14.66
-v 12.57 7.76 15.28
-v 12.57 0.00 15.28
-v 10.27 7.76 14.66
-v 10.27 0.00 14.66
-v 8.58 7.76 12.98
-v 8.58 0.00 12.98
-v 7.97 7.76 10.68
-v 7.97 0.00 10.68
-v 8.58 7.76 8.38
-v 8.58 0.00 8.38
-v 10.27 7.76 6.69
-v 10.27 0.00 6.69
-v 12.57 7.76 6.08
-v 12.57 0.00 6.08
-v 14.87 7.76 6.69
-v 14.87 0.00 6.69
-v 16.55 7.76 8.38
-v 16.55 0.00 8.38
-v 16.78 7.76 13.11
-v 17.43 7.76 10.68
-v 17.43 8.57 10.68
-v 16.78 8.57 13.11
-v 15.00 7.76 14.89
-v 15.00 8.57 14.89
-v 12.57 7.76 15.54
-v 12.57 8.57 15.54
-v 10.13 7.76 14.89
-v 10.13 8.57 14.89
-v 8.35 7.76 13.11
-v 8.35 8.57 13.11
-v 7.70 7.76 10.68
-v 7.70 8.57 10.68
-v 8.35 7.76 8.24
-v 8.35 8.57 8.24
-v 10.13 7.76 6.46
-v 10.13 8.57 6.46
-v 12.57 7.76 5.81
-v 12.57 8.57 5.81
-v 15.00 7.76 6.46
-v 15.00 8.57 6.46
-v 16.78 7.76 8.24
-v 16.78 8.57 8.24
-v 17.17 8.57 10.68
-v 16.55 8.57 12.98
-v 14.87 8.57 14.66
-v 12.57 8.57 15.28
-v 10.27 8.57 14.66
-v 8.58 8.57 12.98
-v 7.97 8.57 10.68
-v 8.58 8.57 8.38
-v 10.27 8.57 6.69
-v 12.57 8.57 6.08
-v 14.87 8.57 6.69
-v 16.55 8.57 8.38
-v 17.17 16.89 10.68
-v 16.55 16.89 12.98
-v 14.87 16.89 14.66
-v 12.57 16.89 15.28
-v 10.27 16.89 14.66
-v 8.58 16.89 12.98
-v 7.97 16.89 10.68
-v 8.58 16.89 8.38
-v 10.27 16.89 6.69
-v 12.57 16.89 6.08
-v 14.87 16.89 6.69
-v 16.55 16.89 8.38
-v 17.13 21.30 13.31
-v 17.83 21.30 10.68
-v 18.23 21.30 10.68
-v 17.47 21.30 13.51
-v 15.20 21.30 15.24
-v 15.40 21.30 15.58
-v 12.57 21.30 15.94
-v 12.57 21.30 16.34
-v 9.93 21.30 15.24
-v 9.73 21.30 15.58
-v 8.01 21.30 13.31
-v 7.66 21.30 13.51
-v 7.30 21.30 10.68
-v 6.90 21.30 10.68
-v 8.01 21.30 8.04
-v 7.66 21.30 7.84
-v 9.93 21.30 6.12
-v 9.73 21.30 5.77
-v 12.57 21.30 5.41
-v 12.57 21.30 5.01
-v 15.20 21.30 6.12
-v 15.40 21.30 5.77
-v 17.13 21.30 8.04
-v 17.47 21.30 7.84
-v 16.72 24.76 10.68
-v 16.17 24.76 12.76
-v 14.64 24.76 14.28
-v 12.57 24.76 14.83
-v 10.49 24.76 14.28
-v 8.97 24.76 12.76
-v 8.41 24.76 10.68
-v 8.97 24.76 8.60
-v 10.49 24.76 7.08
-v 12.57 24.76 6.52
-v 14.64 24.76 7.08
-v 16.17 24.76 8.60
-v 16.69 28.50 10.68
-v 16.13 28.50 12.74
-v 14.63 28.50 14.24
-v 12.57 28.50 14.80
-v 10.51 28.50 14.24
-v 9.00 28.50 12.74
-v 8.45 28.50 10.68
-v 9.00 28.50 8.62
-v 10.51 28.50 7.11
-v 12.57 28.50 6.56
-v 14.63 28.50 7.11
-v 16.13 28.50 8.62
-v 17.83 17.36 10.68
-v 17.13 17.36 13.31
-v 15.20 17.36 15.24
-v 12.57 17.36 15.94
-v 9.93 17.36 15.24
-v 8.01 17.36 13.31
-v 7.30 17.36 10.68
-v 8.01 17.36 8.04
-v 9.93 17.36 6.12
-v 12.57 17.36 5.41
-v 15.20 17.36 6.12
-v 17.13 17.36 8.04
-v 17.91 20.21 10.37
-v 17.91 20.52 10.80
-v 17.91 19.21 10.80
-v 17.91 19.23 10.37
-v 17.81 19.26 10.03
-v 17.91 19.26 10.04
-v 17.91 19.12 10.04
-v 17.81 19.12 10.03
-v 17.89 20.75 10.80
-v 17.98 20.75 10.81
-v 17.94 20.29 10.15
-v 17.84 20.29 10.15
-v 17.68 19.12 11.55
-v 17.78 19.12 11.56
-v 17.78 19.26 11.56
-v 17.68 19.26 11.55
-v 17.89 19.07 10.80
-v 17.98 19.07 10.81
-v 17.82 19.12 11.45
-v 17.73 19.12 11.45
-v 18.05 19.12 10.16
-v 18.05 19.26 10.16
-v 18.08 19.23 10.39
-v 17.98 20.52 10.81
-v 17.98 20.21 10.38
-v 17.93 19.26 11.46
-v 17.93 19.12 11.46
-v 18.01 19.24 11.24
-v 18.09 19.07 10.82
-v 18.09 19.21 10.82
-v 17.83 20.21 11.23
-v 17.83 19.24 11.23
-v 17.73 20.29 11.45
-v 17.82 20.29 11.45
-v 17.84 19.12 10.15
-v 17.94 19.12 10.15
-v 17.90 20.21 11.23
-v 17.98 19.23 10.38
-v 17.90 19.24 11.23
-v 17.98 19.21 10.81
-v 17.82 19.26 11.45
-v 17.73 19.26 11.45
-v 17.94 19.26 10.15
-v 17.84 19.26 10.15
-v 18.02 19.26 10.05
-v 18.02 19.12 10.05
-v 17.88 19.12 11.57
-v 17.88 19.26 11.57
-v 12.87 20.21 16.02
-v 12.44 20.52 16.02
-v 12.44 19.21 16.02
-v 12.87 19.23 16.02
-v 13.21 19.26 15.92
-v 13.20 19.26 16.02
-v 13.20 19.12 16.02
-v 13.21 19.12 15.92
-v 12.44 20.75 16.00
-v 12.43 20.75 16.10
-v 13.09 20.29 16.05
-v 13.10 20.29 15.95
-v 11.69 19.12 15.79
-v 11.68 19.12 15.89
-v 11.68 19.26 15.89
-v 11.69 19.26 15.79
-v 12.44 19.07 16.00
-v 12.43 19.07 16.10
-v 11.79 19.12 15.94
-v 11.80 19.12 15.84
-v 13.08 19.12 16.16
-v 13.08 19.26 16.16
-v 12.85 19.23 16.20
-v 12.43 20.52 16.10
-v 12.86 20.21 16.09
-v 11.78 19.26 16.04
-v 11.78 19.12 16.04
-v 12.00 19.24 16.12
-v 12.42 19.07 16.20
-v 12.42 19.21 16.20
-v 12.01 20.21 15.94
-v 12.01 19.24 15.94
-v 11.80 20.29 15.84
-v 11.79 20.29 15.94
-v 13.10 19.12 15.95
-v 13.09 19.12 16.05
-v 12.01 20.21 16.01
-v 12.86 19.23 16.09
-v 12.01 19.24 16.01
-v 12.43 19.21 16.10
-v 11.79 19.26 15.94
-v 11.80 19.26 15.84
-v 13.09 19.26 16.05
-v 13.10 19.26 15.95
-v 13.19 19.26 16.13
-v 13.19 19.12 16.13
-v 11.67 19.12 16.00
-v 11.67 19.26 16.00
-v 9.24 23.34 12.52
-v 9.78 23.34 13.29
-v 9.10 24.92 13.76
-v 8.56 24.92 12.99
-v 8.63 28.41 12.92
-v 9.53 28.41 12.29
-v 9.18 28.41 13.70
-v 10.08 28.41 13.07
-v 12.87 27.21 14.81
-v 12.44 27.52 14.82
-v 12.44 26.21 14.82
-v 12.87 26.24 14.81
-v 13.21 26.26 14.72
-v 13.20 26.26 14.82
-v 13.20 26.12 14.82
-v 13.21 26.12 14.72
-v 12.44 27.75 14.80
-v 12.43 27.75 14.89
-v 13.09 27.30 14.85
-v 13.10 27.30 14.75
-v 11.69 26.12 14.59
-v 11.68 26.12 14.69
-v 11.68 26.26 14.69
-v 11.69 26.26 14.59
-v 12.44 26.07 14.80
-v 12.43 26.07 14.89
-v 11.79 26.12 14.73
-v 11.80 26.12 14.64
-v 13.08 26.12 14.96
-v 13.08 26.26 14.96
-v 12.85 26.24 14.99
-v 12.43 27.52 14.89
-v 12.86 27.21 14.89
-v 11.78 26.26 14.84
-v 11.78 26.12 14.84
-v 12.00 26.25 14.92
-v 12.42 26.07 15.00
-v 12.42 26.21 15.00
-v 12.01 27.21 14.74
-v 12.01 26.25 14.74
-v 11.80 27.30 14.64
-v 11.79 27.30 14.73
-v 13.10 26.12 14.75
-v 13.09 26.12 14.85
-v 12.01 27.21 14.81
-v 12.86 26.24 14.89
-v 12.01 26.25 14.81
-v 12.43 26.21 14.89
-v 11.79 26.26 14.73
-v 11.80 26.26 14.64
-v 13.09 26.26 14.85
-v 13.10 26.26 14.75
-v 13.19 26.26 14.93
-v 13.19 26.12 14.93
-v 11.67 26.12 14.79
-v 11.67 26.26 14.79
-v 14.41 23.34 14.01
-v 15.18 23.34 13.46
-v 15.65 24.92 14.14
-v 14.88 24.92 14.68
-v 14.81 28.41 14.61
-v 14.18 28.41 13.71
-v 15.59 28.41 14.07
-v 14.96 28.41 13.17
-v 8.43 27.21 10.98
-v 8.42 27.52 10.55
-v 8.42 26.21 10.55
-v 8.43 26.24 10.98
-v 8.52 26.26 11.32
-v 8.42 26.26 11.31
-v 8.42 26.12 11.31
-v 8.52 26.12 11.32
-v 8.45 27.75 10.55
-v 8.35 27.75 10.54
-v 8.39 27.30 11.20
-v 8.49 27.30 11.21
-v 8.65 26.12 9.80
-v 8.56 26.12 9.79
-v 8.56 26.26 9.79
-v 8.65 26.26 9.80
-v 8.45 26.07 10.55
-v 8.35 26.07 10.54
-v 8.51 26.12 9.90
-v 8.61 26.12 9.91
-v 8.29 26.12 11.19
-v 8.29 26.26 11.19
-v 8.25 26.24 10.96
-v 8.35 27.52 10.54
-v 8.35 27.21 10.97
-v 8.40 26.26 9.89
-v 8.40 26.12 9.89
-v 8.32 26.25 10.11
-v 8.24 26.07 10.53
-v 8.24 26.21 10.53
-v 8.50 27.21 10.13
-v 8.50 26.25 10.13
-v 8.61 27.30 9.91
-v 8.51 27.30 9.90
-v 8.49 26.12 11.21
-v 8.39 26.12 11.20
-v 8.43 27.21 10.12
-v 8.35 26.24 10.97
-v 8.43 26.25 10.12
-v 8.35 26.21 10.54
-v 8.51 26.26 9.90
-v 8.61 26.26 9.91
-v 8.39 26.26 11.20
-v 8.49 26.26 11.21
-v 8.32 26.26 11.30
-v 8.32 26.12 11.30
-v 8.45 26.12 9.78
-v 8.45 26.26 9.78
-v 13.04 12.70 6.81
-v 12.09 12.70 6.81
-v 12.09 14.28 5.99
-v 13.04 14.28 5.99
-v 13.04 17.34 5.64
-v 13.04 17.34 6.74
-v 12.09 17.34 5.64
-v 12.09 17.34 6.74
-v 8.98 12.70 12.20
-v 9.46 12.70 13.02
-v 8.74 14.28 13.43
-v 8.27 14.28 12.61
-v 7.97 17.34 12.79
-v 8.92 17.34 12.24
-v 8.44 17.34 13.61
-v 9.39 17.34 13.06
-v 12.09 12.70 14.54
-v 13.04 12.70 14.54
-v 13.04 14.28 15.36
-v 12.09 14.28 15.36
-v 12.09 17.34 15.71
-v 12.09 17.34 14.62
-v 13.04 17.34 15.71
-v 13.04 17.34 14.62
-v 10.73 23.34 7.35
-v 9.95 23.34 7.89
-v 9.48 24.92 7.22
-v 10.25 24.92 6.67
-v 10.32 28.41 6.74
-v 10.95 28.41 7.65
-v 9.55 28.41 7.29
-v 10.18 28.41 8.19
-v 9.46 12.70 8.34
-v 8.98 12.70 9.15
-v 8.27 14.28 8.74
-v 8.74 14.28 7.92
-v 8.44 17.34 7.75
-v 9.39 17.34 8.30
-v 7.97 17.34 8.57
-v 8.92 17.34 9.12
-v 7.23 20.21 10.98
-v 7.22 20.52 10.55
-v 7.22 19.21 10.55
-v 7.23 19.23 10.98
-v 7.32 19.26 11.32
-v 7.22 19.26 11.31
-v 7.22 19.12 11.31
-v 7.32 19.12 11.32
-v 7.24 20.75 10.55
-v 7.15 20.75 10.54
-v 7.19 20.29 11.20
-v 7.29 20.29 11.21
-v 7.45 19.12 9.80
-v 7.35 19.12 9.79
-v 7.35 19.26 9.79
-v 7.45 19.26 9.80
-v 7.24 19.07 10.55
-v 7.15 19.07 10.54
-v 7.31 19.12 9.90
-v 7.41 19.12 9.91
-v 7.09 19.12 11.19
-v 7.09 19.26 11.19
-v 7.05 19.23 10.96
-v 7.15 20.52 10.54
-v 7.15 20.21 10.97
-v 7.20 19.26 9.89
-v 7.20 19.12 9.89
-v 7.12 19.24 10.11
-v 7.04 19.07 10.53
-v 7.04 19.21 10.53
-v 7.30 20.21 10.13
-v 7.30 19.24 10.13
-v 7.41 20.29 9.91
-v 7.31 20.29 9.90
-v 7.29 19.12 11.21
-v 7.19 19.12 11.20
-v 7.23 20.21 10.12
-v 7.15 19.23 10.97
-v 7.23 19.24 10.12
-v 7.15 19.21 10.54
-v 7.31 19.26 9.90
-v 7.41 19.26 9.91
-v 7.19 19.26 11.20
-v 7.29 19.26 11.21
-v 7.11 19.26 11.30
-v 7.11 19.12 11.30
-v 7.25 19.12 9.78
-v 7.25 19.26 9.78
-v 12.26 27.21 6.54
-v 12.69 27.52 6.53
-v 12.69 26.21 6.53
-v 12.26 26.24 6.54
-v 11.92 26.26 6.63
-v 11.93 26.26 6.53
-v 11.93 26.12 6.53
-v 11.92 26.12 6.63
-v 12.69 27.75 6.56
-v 12.70 27.75 6.46
-v 12.04 27.30 6.51
-v 12.03 27.30 6.60
-v 13.44 26.12 6.76
-v 13.45 26.12 6.67
-v 13.45 26.26 6.67
-v 13.44 26.26 6.76
-v 12.69 26.07 6.56
-v 12.70 26.07 6.46
-v 13.34 26.12 6.62
-v 13.34 26.12 6.72
-v 12.05 26.12 6.40
-v 12.05 26.26 6.40
-v 12.28 26.24 6.36
-v 12.70 27.52 6.46
-v 12.27 27.21 6.47
-v 13.35 26.26 6.51
-v 13.35 26.12 6.51
-v 13.13 26.25 6.43
-v 12.71 26.07 6.35
-v 12.71 26.21 6.35
-v 13.12 27.21 6.61
-v 13.12 26.25 6.61
-v 13.34 27.30 6.72
-v 13.34 27.30 6.62
-v 12.03 26.12 6.60
-v 12.04 26.12 6.51
-v 13.12 27.21 6.54
-v 12.27 26.24 6.47
-v 13.12 26.25 6.54
-v 12.70 26.21 6.46
-v 13.34 26.26 6.62
-v 13.34 26.26 6.72
-v 12.04 26.26 6.51
-v 12.03 26.26 6.60
-v 11.94 26.26 6.43
-v 11.94 26.12 6.43
-v 13.46 26.12 6.56
-v 13.46 26.26 6.56
-v 16.15 12.70 9.15
-v 15.67 12.70 8.34
-v 16.39 14.28 7.92
-v 16.86 14.28 8.74
-v 17.17 17.34 8.57
-v 16.21 17.34 9.12
-v 16.69 17.34 7.75
-v 15.74 17.34 8.30
-v 12.26 20.21 5.34
-v 12.69 20.52 5.33
-v 12.69 19.21 5.33
-v 12.26 19.23 5.34
-v 11.92 19.26 5.43
-v 11.93 19.26 5.33
-v 11.93 19.12 5.33
-v 11.92 19.12 5.43
-v 12.69 20.75 5.36
-v 12.70 20.75 5.26
-v 12.04 20.29 5.30
-v 12.03 20.29 5.40
-v 13.44 19.12 5.56
-v 13.45 19.12 5.47
-v 13.45 19.26 5.47
-v 13.44 19.26 5.56
-v 12.69 19.07 5.36
-v 12.70 19.07 5.26
-v 13.34 19.12 5.42
-v 13.34 19.12 5.52
-v 12.05 19.12 5.20
-v 12.05 19.26 5.20
-v 12.28 19.23 5.16
-v 12.70 20.52 5.26
-v 12.27 20.21 5.26
-v 13.35 19.26 5.31
-v 13.35 19.12 5.31
-v 13.13 19.24 5.23
-v 12.71 19.07 5.15
-v 12.71 19.21 5.15
-v 13.12 20.21 5.41
-v 13.12 19.24 5.41
-v 13.34 20.29 5.52
-v 13.34 20.29 5.42
-v 12.03 19.12 5.40
-v 12.04 19.12 5.30
-v 13.12 20.21 5.34
-v 12.27 19.23 5.26
-v 13.12 19.24 5.34
-v 12.70 19.21 5.26
-v 13.34 19.26 5.42
-v 13.34 19.26 5.52
-v 12.04 19.26 5.30
-v 12.03 19.26 5.40
-v 11.94 19.26 5.23
-v 11.94 19.12 5.23
-v 13.46 19.12 5.36
-v 13.46 19.26 5.36
-v 15.89 23.34 8.84
-v 15.35 23.34 8.06
-v 16.03 24.92 7.59
-v 16.57 24.92 8.36
-v 16.50 28.41 8.43
-v 15.60 28.41 9.06
-v 15.96 28.41 7.66
-v 15.06 28.41 8.29
-v 16.70 27.21 10.37
-v 16.71 27.52 10.80
-v 16.71 26.21 10.80
-v 16.70 26.24 10.37
-v 16.61 26.26 10.03
-v 16.71 26.26 10.04
-v 16.71 26.12 10.04
-v 16.61 26.12 10.03
-v 16.69 27.75 10.80
-v 16.78 27.75 10.81
-v 16.74 27.30 10.15
-v 16.64 27.30 10.15
-v 16.48 26.12 11.55
-v 16.58 26.12 11.56
-v 16.58 26.26 11.56
-v 16.48 26.26 11.55
-v 16.69 26.07 10.80
-v 16.78 26.07 10.81
-v 16.62 26.12 11.45
-v 16.53 26.12 11.45
-v 16.84 26.12 10.16
-v 16.84 26.26 10.16
-v 16.88 26.24 10.39
-v 16.78 27.52 10.81
-v 16.78 27.21 10.38
-v 16.73 26.26 11.46
-v 16.73 26.12 11.46
-v 16.81 26.25 11.24
-v 16.89 26.07 10.82
-v 16.89 26.21 10.82
-v 16.63 27.21 11.23
-v 16.63 26.25 11.23
-v 16.53 27.30 11.45
-v 16.62 27.30 11.45
-v 16.64 26.12 10.15
-v 16.74 26.12 10.15
-v 16.70 27.21 11.23
-v 16.78 26.24 10.38
-v 16.70 26.25 11.23
-v 16.78 26.21 10.81
-v 16.62 26.26 11.45
-v 16.53 26.26 11.45
-v 16.74 26.26 10.15
-v 16.64 26.26 10.15
-v 16.82 26.26 10.05
-v 16.82 26.12 10.05
-v 16.68 26.12 11.57
-v 16.68 26.26 11.57
-v 15.67 12.70 13.02
-v 16.15 12.70 12.20
-v 16.86 14.28 12.61
-v 16.39 14.28 13.43
-v 16.69 17.34 13.61
-v 15.74 17.34 13.06
-v 17.17 17.34 12.79
-v 16.21 17.34 12.24
-v 16.83 28.50 13.14
-v 17.49 28.50 10.68
-v 17.49 30.29 10.68
-v 16.83 30.29 13.14
-v 15.03 28.50 14.94
-v 15.03 30.29 14.94
-v 12.57 28.50 15.60
-v 12.57 30.29 15.60
-v 10.10 28.50 14.94
-v 10.10 30.29 14.94
-v 8.30 28.50 13.14
-v 8.30 30.29 13.14
-v 7.64 28.50 10.68
-v 7.64 30.29 10.68
-v 8.30 28.50 8.21
-v 8.30 30.29 8.21
-v 10.10 28.50 6.41
-v 10.10 30.29 6.41
-v 12.57 28.50 5.75
-v 12.57 30.29 5.75
-v 15.03 28.50 6.41
-v 15.03 30.29 6.41
-v 16.83 28.50 8.21
-v 16.83 30.29 8.21
-v 16.78 30.29 10.68
-v 16.21 30.29 12.78
-v 15.03 30.90 14.94
-v 16.83 30.90 13.14
-v 16.21 30.90 12.78
-v 14.67 30.90 14.32
-v 14.67 30.29 14.32
-v 12.57 30.29 14.89
-v 10.10 30.90 14.94
-v 12.57 30.90 15.60
-v 12.57 30.90 14.89
-v 10.46 30.90 14.32
-v 10.46 30.29 14.32
-v 8.92 30.29 12.78
-v 7.64 30.90 10.68
-v 8.30 30.90 13.14
-v 8.92 30.90 12.78
-v 8.36 30.90 10.68
-v 8.36 30.29 10.68
-v 8.92 30.29 8.57
-v 10.10 30.90 6.41
-v 8.30 30.90 8.21
-v 8.92 30.90 8.57
-v 10.46 30.90 7.03
-v 10.46 30.29 7.03
-v 12.57 30.29 6.47
-v 15.03 30.90 6.41
-v 12.57 30.90 5.75
-v 12.57 30.90 6.47
-v 14.67 30.90 7.03
-v 14.67 30.29 7.03
-v 16.21 30.29 8.57
-v 17.49 30.90 10.68
-v 16.83 30.90 8.21
-v 16.21 30.90 8.57
-v 16.78 30.90 10.68
-v 16.78 29.42 10.68
-v 16.21 29.42 12.78
-v 14.67 29.42 14.32
-v 12.57 29.42 14.89
-v 10.46 29.42 14.32
-v 8.92 29.42 12.78
-v 8.36 29.42 10.68
-v 8.92 29.42 8.57
-v 10.46 29.42 7.03
-v 12.57 29.42 6.47
-v 14.67 29.42 7.03
-v 16.21 29.42 8.57
-v 12.57 29.42 10.68
-v 16.55 0.00 -12.98
-v 16.55 7.76 -12.98
-v 17.17 7.76 -10.68
-v 17.17 0.00 -10.68
-v 14.87 0.00 -14.66
-v 14.87 7.76 -14.66
-v 12.57 0.00 -15.28
-v 12.57 7.76 -15.28
-v 10.27 0.00 -14.66
-v 10.27 7.76 -14.66
-v 8.58 0.00 -12.98
-v 8.58 7.76 -12.98
-v 7.97 0.00 -10.68
-v 7.97 7.76 -10.68
-v 8.58 0.00 -8.38
-v 8.58 7.76 -8.38
-v 10.27 0.00 -6.69
-v 10.27 7.76 -6.69
-v 12.57 0.00 -6.08
-v 12.57 7.76 -6.08
-v 14.87 0.00 -6.69
-v 14.87 7.76 -6.69
-v 16.55 0.00 -8.38
-v 16.55 7.76 -8.38
-v 16.78 7.76 -13.11
-v 16.78 8.57 -13.11
-v 17.43 8.57 -10.68
-v 17.43 7.76 -10.68
-v 15.00 7.76 -14.89
-v 15.00 8.57 -14.89
-v 12.57 7.76 -15.54
-v 12.57 8.57 -15.54
-v 10.13 7.76 -14.89
-v 10.13 8.57 -14.89
-v 8.35 7.76 -13.11
-v 8.35 8.57 -13.11
-v 7.70 7.76 -10.68
-v 7.70 8.57 -10.68
-v 8.35 7.76 -8.24
-v 8.35 8.57 -8.24
-v 10.13 7.76 -6.46
-v 10.13 8.57 -6.46
-v 12.57 7.76 -5.81
-v 12.57 8.57 -5.81
-v 15.00 7.76 -6.46
-v 15.00 8.57 -6.46
-v 16.78 7.76 -8.24
-v 16.78 8.57 -8.24
-v 17.17 8.57 -10.68
-v 16.55 8.57 -12.98
-v 14.87 8.57 -14.66
-v 12.57 8.57 -15.28
-v 10.27 8.57 -14.66
-v 8.58 8.57 -12.98
-v 7.97 8.57 -10.68
-v 8.58 8.57 -8.38
-v 10.27 8.57 -6.69
-v 12.57 8.57 -6.08
-v 14.87 8.57 -6.69
-v 16.55 8.57 -8.38
-v 16.55 16.89 -12.98
-v 17.17 16.89 -10.68
-v 14.87 16.89 -14.66
-v 12.57 16.89 -15.28
-v 10.27 16.89 -14.66
-v 8.58 16.89 -12.98
-v 7.97 16.89 -10.68
-v 8.58 16.89 -8.38
-v 10.27 16.89 -6.69
-v 12.57 16.89 -6.08
-v 14.87 16.89 -6.69
-v 16.55 16.89 -8.38
-v 17.13 21.30 -13.31
-v 17.47 21.30 -13.51
-v 18.23 21.30 -10.68
-v 17.83 21.30 -10.68
-v 15.20 21.30 -15.24
-v 15.40 21.30 -15.58
-v 12.57 21.30 -15.94
-v 12.57 21.30 -16.34
-v 9.93 21.30 -15.24
-v 9.73 21.30 -15.58
-v 8.01 21.30 -13.31
-v 7.66 21.30 -13.51
-v 7.30 21.30 -10.68
-v 6.90 21.30 -10.68
-v 8.01 21.30 -8.04
-v 7.66 21.30 -7.84
-v 9.93 21.30 -6.12
-v 9.73 21.30 -5.77
-v 12.57 21.30 -5.41
-v 12.57 21.30 -5.01
-v 15.20 21.30 -6.12
-v 15.40 21.30 -5.77
-v 17.13 21.30 -8.04
-v 17.47 21.30 -7.84
-v 16.17 24.76 -12.76
-v 16.72 24.76 -10.68
-v 14.64 24.76 -14.28
-v 12.57 24.76 -14.83
-v 10.49 24.76 -14.28
-v 8.97 24.76 -12.76
-v 8.41 24.76 -10.68
-v 8.97 24.76 -8.60
-v 10.49 24.76 -7.08
-v 12.57 24.76 -6.52
-v 14.64 24.76 -7.08
-v 16.17 24.76 -8.60
-v 16.13 28.50 -12.74
-v 16.69 28.50 -10.68
-v 14.63 28.50 -14.24
-v 12.57 28.50 -14.80
-v 10.51 28.50 -14.24
-v 9.00 28.50 -12.74
-v 8.45 28.50 -10.68
-v 9.00 28.50 -8.62
-v 10.51 28.50 -7.11
-v 12.57 28.50 -6.56
-v 14.63 28.50 -7.11
-v 16.13 28.50 -8.62
-v 17.13 17.36 -13.31
-v 17.83 17.36 -10.68
-v 15.20 17.36 -15.24
-v 12.57 17.36 -15.94
-v 9.93 17.36 -15.24
-v 8.01 17.36 -13.31
-v 7.30 17.36 -10.68
-v 8.01 17.36 -8.04
-v 9.93 17.36 -6.12
-v 12.57 17.36 -5.41
-v 15.20 17.36 -6.12
-v 17.13 17.36 -8.04
-v 17.91 20.21 -10.37
-v 17.91 19.23 -10.37
-v 17.91 19.21 -10.80
-v 17.91 20.52 -10.80
-v 17.81 19.26 -10.03
-v 17.81 19.12 -10.03
-v 17.91 19.12 -10.04
-v 17.91 19.26 -10.04
-v 17.89 20.75 -10.80
-v 17.84 20.29 -10.15
-v 17.94 20.29 -10.15
-v 17.98 20.75 -10.81
-v 17.68 19.12 -11.55
-v 17.68 19.26 -11.55
-v 17.78 19.26 -11.56
-v 17.78 19.12 -11.56
-v 17.89 19.07 -10.80
-v 17.73 19.12 -11.45
-v 17.82 19.12 -11.45
-v 17.98 19.07 -10.81
-v 18.05 19.12 -10.16
-v 18.08 19.23 -10.39
-v 18.05 19.26 -10.16
-v 17.98 20.21 -10.38
-v 17.98 20.52 -10.81
-v 17.93 19.26 -11.46
-v 18.01 19.24 -11.24
-v 17.93 19.12 -11.46
-v 18.09 19.07 -10.82
-v 18.09 19.21 -10.82
-v 17.83 20.21 -11.23
-v 17.83 19.24 -11.23
-v 17.73 20.29 -11.45
-v 17.82 20.29 -11.45
-v 17.84 19.12 -10.15
-v 17.94 19.12 -10.15
-v 17.90 20.21 -11.23
-v 17.98 19.23 -10.38
-v 17.90 19.24 -11.23
-v 17.98 19.21 -10.81
-v 17.82 19.26 -11.45
-v 17.73 19.26 -11.45
-v 17.84 19.26 -10.15
-v 17.94 19.26 -10.15
-v 18.02 19.12 -10.05
-v 18.02 19.26 -10.05
-v 17.88 19.26 -11.57
-v 17.88 19.12 -11.57
-v 12.87 20.21 -16.02
-v 12.87 19.23 -16.02
-v 12.44 19.21 -16.02
-v 12.44 20.52 -16.02
-v 13.21 19.26 -15.92
-v 13.21 19.12 -15.92
-v 13.20 19.12 -16.02
-v 13.20 19.26 -16.02
-v 12.44 20.75 -16.00
-v 13.10 20.29 -15.95
-v 13.09 20.29 -16.05
-v 12.43 20.75 -16.10
-v 11.69 19.12 -15.79
-v 11.69 19.26 -15.79
-v 11.68 19.26 -15.89
-v 11.68 19.12 -15.89
-v 12.44 19.07 -16.00
-v 11.80 19.12 -15.84
-v 11.79 19.12 -15.94
-v 12.43 19.07 -16.10
-v 13.08 19.12 -16.16
-v 12.85 19.23 -16.20
-v 13.08 19.26 -16.16
-v 12.86 20.21 -16.09
-v 12.43 20.52 -16.10
-v 11.78 19.26 -16.04
-v 12.00 19.24 -16.12
-v 11.78 19.12 -16.04
-v 12.42 19.07 -16.20
-v 12.42 19.21 -16.20
-v 12.01 20.21 -15.94
-v 12.01 19.24 -15.94
-v 11.80 20.29 -15.84
-v 11.79 20.29 -15.94
-v 13.10 19.12 -15.95
-v 13.09 19.12 -16.05
-v 12.01 20.21 -16.01
-v 12.86 19.23 -16.09
-v 12.01 19.24 -16.01
-v 12.43 19.21 -16.10
-v 11.79 19.26 -15.94
-v 11.80 19.26 -15.84
-v 13.10 19.26 -15.95
-v 13.09 19.26 -16.05
-v 13.19 19.12 -16.13
-v 13.19 19.26 -16.13
-v 11.67 19.26 -16.00
-v 11.67 19.12 -16.00
-v 9.24 23.34 -12.52
-v 8.56 24.92 -12.99
-v 9.10 24.92 -13.76
-v 9.78 23.34 -13.29
-v 9.53 28.41 -12.29
-v 8.63 28.41 -12.92
-v 9.18 28.41 -13.70
-v 10.08 28.41 -13.07
-v 12.87 27.21 -14.81
-v 12.87 26.24 -14.81
-v 12.44 26.21 -14.82
-v 12.44 27.52 -14.82
-v 13.21 26.26 -14.72
-v 13.21 26.12 -14.72
-v 13.20 26.12 -14.82
-v 13.20 26.26 -14.82
-v 12.44 27.75 -14.80
-v 13.10 27.30 -14.75
-v 13.09 27.30 -14.85
-v 12.43 27.75 -14.89
-v 11.69 26.12 -14.59
-v 11.69 26.26 -14.59
-v 11.68 26.26 -14.69
-v 11.68 26.12 -14.69
-v 12.44 26.07 -14.80
-v 11.80 26.12 -14.64
-v 11.79 26.12 -14.73
-v 12.43 26.07 -14.89
-v 13.08 26.12 -14.96
-v 12.85 26.24 -14.99
-v 13.08 26.26 -14.96
-v 12.86 27.21 -14.89
-v 12.43 27.52 -14.89
-v 11.78 26.26 -14.84
-v 12.00 26.25 -14.92
-v 11.78 26.12 -14.84
-v 12.42 26.07 -15.00
-v 12.42 26.21 -15.00
-v 12.01 27.21 -14.74
-v 12.01 26.25 -14.74
-v 11.80 27.30 -14.64
-v 11.79 27.30 -14.73
-v 13.10 26.12 -14.75
-v 13.09 26.12 -14.85
-v 12.01 27.21 -14.81
-v 12.86 26.24 -14.89
-v 12.01 26.25 -14.81
-v 12.43 26.21 -14.89
-v 11.79 26.26 -14.73
-v 11.80 26.26 -14.64
-v 13.10 26.26 -14.75
-v 13.09 26.26 -14.85
-v 13.19 26.12 -14.93
-v 13.19 26.26 -14.93
-v 11.67 26.26 -14.79
-v 11.67 26.12 -14.79
-v 14.41 23.34 -14.01
-v 14.88 24.92 -14.68
-v 15.65 24.92 -14.14
-v 15.18 23.34 -13.46
-v 14.18 28.41 -13.71
-v 14.81 28.41 -14.61
-v 15.59 28.41 -14.07
-v 14.96 28.41 -13.17
-v 8.43 27.21 -10.98
-v 8.43 26.24 -10.98
-v 8.42 26.21 -10.55
-v 8.42 27.52 -10.55
-v 8.52 26.26 -11.32
-v 8.52 26.12 -11.32
-v 8.42 26.12 -11.31
-v 8.42 26.26 -11.31
-v 8.45 27.75 -10.55
-v 8.49 27.30 -11.21
-v 8.39 27.30 -11.20
-v 8.35 27.75 -10.54
-v 8.65 26.12 -9.80
-v 8.65 26.26 -9.80
-v 8.56 26.26 -9.79
-v 8.56 26.12 -9.79
-v 8.45 26.07 -10.55
-v 8.61 26.12 -9.91
-v 8.51 26.12 -9.90
-v 8.35 26.07 -10.54
-v 8.29 26.12 -11.19
-v 8.25 26.24 -10.96
-v 8.29 26.26 -11.19
-v 8.35 27.21 -10.97
-v 8.35 27.52 -10.54
-v 8.40 26.26 -9.89
-v 8.32 26.25 -10.11
-v 8.40 26.12 -9.89
-v 8.24 26.07 -10.53
-v 8.24 26.21 -10.53
-v 8.50 27.21 -10.13
-v 8.50 26.25 -10.13
-v 8.61 27.30 -9.91
-v 8.51 27.30 -9.90
-v 8.49 26.12 -11.21
-v 8.39 26.12 -11.20
-v 8.43 27.21 -10.12
-v 8.35 26.24 -10.97
-v 8.43 26.25 -10.12
-v 8.35 26.21 -10.54
-v 8.51 26.26 -9.90
-v 8.61 26.26 -9.91
-v 8.49 26.26 -11.21
-v 8.39 26.26 -11.20
-v 8.32 26.12 -11.30
-v 8.32 26.26 -11.30
-v 8.45 26.26 -9.78
-v 8.45 26.12 -9.78
-v 13.04 12.70 -6.81
-v 13.04 14.28 -5.99
-v 12.09 14.28 -5.99
-v 12.09 12.70 -6.81
-v 13.04 17.34 -6.74
-v 13.04 17.34 -5.64
-v 12.09 17.34 -5.64
-v 12.09 17.34 -6.74
-v 8.98 12.70 -12.20
-v 8.27 14.28 -12.61
-v 8.74 14.28 -13.43
-v 9.46 12.70 -13.02
-v 8.92 17.34 -12.24
-v 7.97 17.34 -12.79
-v 8.44 17.34 -13.61
-v 9.39 17.34 -13.06
-v 12.09 12.70 -14.54
-v 12.09 14.28 -15.36
-v 13.04 14.28 -15.36
-v 13.04 12.70 -14.54
-v 12.09 17.34 -14.62
-v 12.09 17.34 -15.71
-v 13.04 17.34 -15.71
-v 13.04 17.34 -14.62
-v 10.73 23.34 -7.35
-v 10.25 24.92 -6.67
-v 9.48 24.92 -7.22
-v 9.95 23.34 -7.89
-v 10.95 28.41 -7.65
-v 10.32 28.41 -6.74
-v 9.55 28.41 -7.29
-v 10.18 28.41 -8.19
-v 9.46 12.70 -8.34
-v 8.74 14.28 -7.92
-v 8.27 14.28 -8.74
-v 8.98 12.70 -9.15
-v 9.39 17.34 -8.30
-v 8.44 17.34 -7.75
-v 7.97 17.34 -8.57
-v 8.92 17.34 -9.12
-v 7.23 20.21 -10.98
-v 7.23 19.23 -10.98
-v 7.22 19.21 -10.55
-v 7.22 20.52 -10.55
-v 7.32 19.26 -11.32
-v 7.32 19.12 -11.32
-v 7.22 19.12 -11.31
-v 7.22 19.26 -11.31
-v 7.24 20.75 -10.55
-v 7.29 20.29 -11.21
-v 7.19 20.29 -11.20
-v 7.15 20.75 -10.54
-v 7.45 19.12 -9.80
-v 7.45 19.26 -9.80
-v 7.35 19.26 -9.79
-v 7.35 19.12 -9.79
-v 7.24 19.07 -10.55
-v 7.41 19.12 -9.91
-v 7.31 19.12 -9.90
-v 7.15 19.07 -10.54
-v 7.09 19.12 -11.19
-v 7.05 19.23 -10.96
-v 7.09 19.26 -11.19
-v 7.15 20.21 -10.97
-v 7.15 20.52 -10.54
-v 7.20 19.26 -9.89
-v 7.12 19.24 -10.11
-v 7.20 19.12 -9.89
-v 7.04 19.07 -10.53
-v 7.04 19.21 -10.53
-v 7.30 20.21 -10.13
-v 7.30 19.24 -10.13
-v 7.41 20.29 -9.91
-v 7.31 20.29 -9.90
-v 7.29 19.12 -11.21
-v 7.19 19.12 -11.20
-v 7.23 20.21 -10.12
-v 7.15 19.23 -10.97
-v 7.23 19.24 -10.12
-v 7.15 19.21 -10.54
-v 7.31 19.26 -9.90
-v 7.41 19.26 -9.91
-v 7.29 19.26 -11.21
-v 7.19 19.26 -11.20
-v 7.11 19.12 -11.30
-v 7.11 19.26 -11.30
-v 7.25 19.26 -9.78
-v 7.25 19.12 -9.78
-v 12.26 27.21 -6.54
-v 12.26 26.24 -6.54
-v 12.69 26.21 -6.53
-v 12.69 27.52 -6.53
-v 11.92 26.26 -6.63
-v 11.92 26.12 -6.63
-v 11.93 26.12 -6.53
-v 11.93 26.26 -6.53
-v 12.69 27.75 -6.56
-v 12.03 27.30 -6.60
-v 12.04 27.30 -6.51
-v 12.70 27.75 -6.46
-v 13.44 26.12 -6.76
-v 13.44 26.26 -6.76
-v 13.45 26.26 -6.67
-v 13.45 26.12 -6.67
-v 12.69 26.07 -6.56
-v 13.34 26.12 -6.72
-v 13.34 26.12 -6.62
-v 12.70 26.07 -6.46
-v 12.05 26.12 -6.40
-v 12.28 26.24 -6.36
-v 12.05 26.26 -6.40
-v 12.27 27.21 -6.47
-v 12.70 27.52 -6.46
-v 13.35 26.26 -6.51
-v 13.13 26.25 -6.43
-v 13.35 26.12 -6.51
-v 12.71 26.07 -6.35
-v 12.71 26.21 -6.35
-v 13.12 27.21 -6.61
-v 13.12 26.25 -6.61
-v 13.34 27.30 -6.72
-v 13.34 27.30 -6.62
-v 12.03 26.12 -6.60
-v 12.04 26.12 -6.51
-v 13.12 27.21 -6.54
-v 12.27 26.24 -6.47
-v 13.12 26.25 -6.54
-v 12.70 26.21 -6.46
-v 13.34 26.26 -6.62
-v 13.34 26.26 -6.72
-v 12.03 26.26 -6.60
-v 12.04 26.26 -6.51
-v 11.94 26.12 -6.43
-v 11.94 26.26 -6.43
-v 13.46 26.26 -6.56
-v 13.46 26.12 -6.56
-v 16.15 12.70 -9.15
-v 16.86 14.28 -8.74
-v 16.39 14.28 -7.92
-v 15.67 12.70 -8.34
-v 16.21 17.34 -9.12
-v 17.17 17.34 -8.57
-v 16.69 17.34 -7.75
-v 15.74 17.34 -8.30
-v 12.26 20.21 -5.34
-v 12.26 19.23 -5.34
-v 12.69 19.21 -5.33
-v 12.69 20.52 -5.33
-v 11.92 19.26 -5.43
-v 11.92 19.12 -5.43
-v 11.93 19.12 -5.33
-v 11.93 19.26 -5.33
-v 12.69 20.75 -5.36
-v 12.03 20.29 -5.40
-v 12.04 20.29 -5.30
-v 12.70 20.75 -5.26
-v 13.44 19.12 -5.56
-v 13.44 19.26 -5.56
-v 13.45 19.26 -5.47
-v 13.45 19.12 -5.47
-v 12.69 19.07 -5.36
-v 13.34 19.12 -5.52
-v 13.34 19.12 -5.42
-v 12.70 19.07 -5.26
-v 12.05 19.12 -5.20
-v 12.28 19.23 -5.16
-v 12.05 19.26 -5.20
-v 12.27 20.21 -5.26
-v 12.70 20.52 -5.26
-v 13.35 19.26 -5.31
-v 13.13 19.24 -5.23
-v 13.35 19.12 -5.31
-v 12.71 19.07 -5.15
-v 12.71 19.21 -5.15
-v 13.12 20.21 -5.41
-v 13.12 19.24 -5.41
-v 13.34 20.29 -5.52
-v 13.34 20.29 -5.42
-v 12.03 19.12 -5.40
-v 12.04 19.12 -5.30
-v 13.12 20.21 -5.34
-v 12.27 19.23 -5.26
-v 13.12 19.24 -5.34
-v 12.70 19.21 -5.26
-v 13.34 19.26 -5.42
-v 13.34 19.26 -5.52
-v 12.03 19.26 -5.40
-v 12.04 19.26 -5.30
-v 11.94 19.12 -5.23
-v 11.94 19.26 -5.23
-v 13.46 19.26 -5.36
-v 13.46 19.12 -5.36
-v 15.89 23.34 -8.84
-v 16.57 24.92 -8.36
-v 16.03 24.92 -7.59
-v 15.35 23.34 -8.06
-v 15.60 28.41 -9.06
-v 16.50 28.41 -8.43
-v 15.96 28.41 -7.66
-v 15.06 28.41 -8.29
-v 16.70 27.21 -10.37
-v 16.70 26.24 -10.37
-v 16.71 26.21 -10.80
-v 16.71 27.52 -10.80
-v 16.61 26.26 -10.03
-v 16.61 26.12 -10.03
-v 16.71 26.12 -10.04
-v 16.71 26.26 -10.04
-v 16.69 27.75 -10.80
-v 16.64 27.30 -10.15
-v 16.74 27.30 -10.15
-v 16.78 27.75 -10.81
-v 16.48 26.12 -11.55
-v 16.48 26.26 -11.55
-v 16.58 26.26 -11.56
-v 16.58 26.12 -11.56
-v 16.69 26.07 -10.80
-v 16.53 26.12 -11.45
-v 16.62 26.12 -11.45
-v 16.78 26.07 -10.81
-v 16.84 26.12 -10.16
-v 16.88 26.24 -10.39
-v 16.84 26.26 -10.16
-v 16.78 27.21 -10.38
-v 16.78 27.52 -10.81
-v 16.73 26.26 -11.46
-v 16.81 26.25 -11.24
-v 16.73 26.12 -11.46
-v 16.89 26.07 -10.82
-v 16.89 26.21 -10.82
-v 16.63 27.21 -11.23
-v 16.63 26.25 -11.23
-v 16.53 27.30 -11.45
-v 16.62 27.30 -11.45
-v 16.64 26.12 -10.15
-v 16.74 26.12 -10.15
-v 16.70 27.21 -11.23
-v 16.78 26.24 -10.38
-v 16.70 26.25 -11.23
-v 16.78 26.21 -10.81
-v 16.62 26.26 -11.45
-v 16.53 26.26 -11.45
-v 16.64 26.26 -10.15
-v 16.74 26.26 -10.15
-v 16.82 26.12 -10.05
-v 16.82 26.26 -10.05
-v 16.68 26.26 -11.57
-v 16.68 26.12 -11.57
-v 15.67 12.70 -13.02
-v 16.39 14.28 -13.43
-v 16.86 14.28 -12.61
-v 16.15 12.70 -12.20
-v 15.74 17.34 -13.06
-v 16.69 17.34 -13.61
-v 17.17 17.34 -12.79
-v 16.21 17.34 -12.24
-v 16.83 28.50 -13.14
-v 16.83 30.29 -13.14
-v 17.49 30.29 -10.68
-v 17.49 28.50 -10.68
-v 15.03 28.50 -14.94
-v 15.03 30.29 -14.94
-v 12.57 28.50 -15.60
-v 12.57 30.29 -15.60
-v 10.10 28.50 -14.94
-v 10.10 30.29 -14.94
-v 8.30 28.50 -13.14
-v 8.30 30.29 -13.14
-v 7.64 28.50 -10.68
-v 7.64 30.29 -10.68
-v 8.30 28.50 -8.21
-v 8.30 30.29 -8.21
-v 10.10 28.50 -6.41
-v 10.10 30.29 -6.41
-v 12.57 28.50 -5.75
-v 12.57 30.29 -5.75
-v 15.03 28.50 -6.41
-v 15.03 30.29 -6.41
-v 16.83 28.50 -8.21
-v 16.83 30.29 -8.21
-v 16.21 30.29 -12.78
-v 16.78 30.29 -10.68
-v 15.03 30.90 -14.94
-v 14.67 30.90 -14.32
-v 16.21 30.90 -12.78
-v 16.83 30.90 -13.14
-v 12.57 30.29 -14.89
-v 14.67 30.29 -14.32
-v 10.10 30.90 -14.94
-v 10.46 30.90 -14.32
-v 12.57 30.90 -14.89
-v 12.57 30.90 -15.60
-v 8.92 30.29 -12.78
-v 10.46 30.29 -14.32
-v 7.64 30.90 -10.68
-v 8.36 30.90 -10.68
-v 8.92 30.90 -12.78
-v 8.30 30.90 -13.14
-v 8.92 30.29 -8.57
-v 8.36 30.29 -10.68
-v 10.10 30.90 -6.41
-v 10.46 30.90 -7.03
-v 8.92 30.90 -8.57
-v 8.30 30.90 -8.21
-v 12.57 30.29 -6.47
-v 10.46 30.29 -7.03
-v 15.03 30.90 -6.41
-v 14.67 30.90 -7.03
-v 12.57 30.90 -6.47
-v 12.57 30.90 -5.75
-v 16.21 30.29 -8.57
-v 14.67 30.29 -7.03
-v 17.49 30.90 -10.68
-v 16.78 30.90 -10.68
-v 16.21 30.90 -8.57
-v 16.83 30.90 -8.21
-v 16.21 29.42 -12.78
-v 16.78 29.42 -10.68
-v 14.67 29.42 -14.32
-v 12.57 29.42 -14.89
-v 10.46 29.42 -14.32
-v 8.92 29.42 -12.78
-v 8.36 29.42 -10.68
-v 8.92 29.42 -8.57
-v 10.46 29.42 -7.03
-v 12.57 29.42 -6.47
-v 14.67 29.42 -7.03
-v 16.21 29.42 -8.57
-v 12.57 29.42 -10.68
-# 4553 vertices
-
-vn -1.00 0.00 -0.00
-vn -0.48 0.00 -0.88
-vn -0.17 0.00 -0.99
-vn 0.00 0.00 -1.00
-vn 0.17 0.00 -0.99
-vn 0.48 0.00 -0.88
-vn 1.00 0.00 -0.00
-vn 0.48 0.00 0.88
-vn 0.17 0.00 0.99
-vn 0.00 0.00 1.00
-vn -0.17 0.00 0.99
-vn -0.48 0.00 0.88
-vn -0.73 0.00 -0.69
-vn -0.27 0.00 -0.96
-vn -0.08 0.00 -1.00
-vn 0.08 0.00 -1.00
-vn 0.27 0.00 -0.96
-vn 0.73 0.00 -0.69
-vn 0.73 0.00 0.69
-vn 0.27 0.00 0.96
-vn 0.08 0.00 1.00
-vn -0.08 0.00 1.00
-vn -0.27 0.00 0.96
-vn -0.73 0.00 0.69
-vn -0.72 0.00 0.69
-vn 0.00 -1.00 -0.00
-vn 0.00 1.00 -0.00
-vn -0.60 0.56 -0.57
-vn -0.26 0.33 -0.91
-vn -0.07 0.25 -0.96
-vn 0.07 0.25 -0.96
-vn 0.26 0.33 -0.91
-vn 0.60 0.56 -0.57
-vn 0.60 0.56 0.57
-vn 0.26 0.33 0.91
-vn 0.07 0.25 0.96
-vn -0.07 0.25 0.96
-vn -0.26 0.33 0.91
-vn -0.60 0.56 0.57
-vn -0.73 0.01 -0.69
-vn -0.27 0.01 -0.96
-vn -0.08 0.01 -1.00
-vn -0.07 0.01 -1.00
-vn 0.08 0.01 -1.00
-vn 0.27 0.01 -0.96
-vn 0.73 0.01 -0.69
-vn 0.72 0.01 0.69
-vn 0.73 0.01 0.69
-vn 0.27 0.01 0.96
-vn 0.08 0.01 1.00
-vn -0.08 0.01 1.00
-vn -0.07 0.01 1.00
-vn -0.27 0.01 0.96
-vn -0.73 0.01 0.69
-vn -0.72 0.01 0.69
-vn -0.30 -0.91 -0.29
-vn -0.18 -0.75 -0.64
-vn -0.18 -0.74 -0.64
-vn -0.06 -0.65 -0.76
-vn 0.06 -0.65 -0.76
-vn 0.18 -0.75 -0.64
-vn 0.18 -0.74 -0.64
-vn 0.30 -0.91 -0.29
-vn 0.30 -0.91 0.29
-vn 0.18 -0.74 0.64
-vn 0.18 -0.75 0.64
-vn 0.06 -0.65 0.76
-vn -0.06 -0.65 0.76
-vn -0.18 -0.74 0.64
-vn -0.18 -0.75 0.64
-vn -0.30 -0.91 0.29
-vn -1.00 0.00 0.06
-vn -0.02 0.00 1.00
-vn -0.02 0.65 0.76
-vn 0.02 0.00 -1.00
-vn 0.00 -0.99 -0.12
-vn -0.85 0.00 0.52
-vn -0.95 0.12 0.30
-vn -0.62 0.00 -0.78
-vn -0.76 -0.16 -0.63
-vn -0.83 0.00 -0.56
-vn 0.02 0.66 -0.75
-vn -0.00 -0.99 0.12
-vn -0.72 0.09 -0.69
-vn -0.96 -0.21 0.19
-vn 0.02 -0.64 -0.77
-vn -0.02 -0.64 0.77
-vn -0.00 0.99 0.13
-vn 0.00 1.00 -0.10
-vn 0.00 0.99 -0.17
-vn 0.01 0.99 -0.17
-vn -0.00 0.99 0.10
-vn -0.74 0.00 0.67
-vn -0.75 0.00 0.67
-vn -0.54 0.00 -0.84
-vn -0.00 0.00 -1.00
-vn -0.96 0.00 -0.29
-vn -0.95 0.00 -0.30
-vn -0.31 0.95 -0.10
-vn 0.95 0.00 0.30
-vn 0.96 0.00 0.29
-vn 0.03 -1.00 0.01
-vn -0.05 0.00 -1.00
-vn -0.03 0.04 -1.00
-vn 0.10 0.00 -1.00
-vn 0.07 -0.06 -1.00
-vn 0.05 0.00 -1.00
-vn 0.31 0.95 0.10
-vn -0.04 -1.00 -0.01
-vn 0.08 0.04 -1.00
-vn -0.02 -0.06 -1.00
-vn 0.32 -0.94 0.10
-vn -0.32 -0.94 -0.10
-vn -0.04 1.00 -0.01
-vn 0.03 1.00 0.01
-vn 0.05 1.00 0.01
-vn -0.03 1.00 -0.01
-vn -0.07 0.00 -1.00
-vn 0.12 0.00 -0.99
-vn 0.33 -0.45 -0.83
-vn 0.19 -0.00 0.98
-vn 0.37 0.03 -0.93
-vn -0.19 0.00 -0.98
-vn -0.01 0.00 -1.00
-vn -0.96 0.00 -0.30
-vn 0.31 0.95 0.09
-vn -0.18 -0.35 -0.92
-vn 0.37 -0.00 -0.93
-vn -0.19 0.02 -0.98
-vn -0.37 0.00 0.93
-vn 1.00 0.00 -0.06
-vn 0.02 0.65 -0.76
-vn 0.85 0.00 -0.52
-vn 0.95 0.12 -0.30
-vn 0.62 0.00 0.78
-vn 0.76 -0.16 0.63
-vn 0.83 0.00 0.56
-vn 0.82 0.00 0.57
-vn -0.02 0.66 0.75
-vn 0.72 0.09 0.69
-vn 0.96 -0.21 -0.19
-vn 0.00 0.99 -0.13
-vn -0.00 1.00 0.10
-vn -0.00 0.99 0.17
-vn 0.00 0.99 -0.10
-vn 0.75 0.00 -0.67
-vn 0.54 0.00 0.84
-vn 0.00 -0.30 0.95
-vn 0.00 -0.07 1.00
-vn 0.38 -0.49 -0.78
-vn 0.16 0.00 0.99
-vn 0.44 -0.12 -0.89
-vn -0.16 0.00 -0.99
-vn 0.00 -0.30 -0.95
-vn 0.00 -0.07 -1.00
-vn 0.18 -0.35 0.92
-vn -0.37 -0.00 0.93
-vn 0.19 0.02 0.98
-vn 0.37 0.00 -0.93
-vn 0.38 -0.49 0.78
-vn -0.16 0.00 0.99
-vn 0.44 -0.12 0.89
-vn 0.16 0.00 -0.99
-vn 0.01 0.00 1.00
-vn 0.96 0.00 0.30
-vn -0.03 -1.00 -0.01
-vn 0.05 0.00 1.00
-vn 0.03 0.04 1.00
-vn -0.10 0.00 1.00
-vn -0.07 -0.06 1.00
-vn -0.05 0.00 1.00
-vn -0.31 0.95 -0.09
-vn 0.04 -1.00 0.01
-vn -0.08 0.04 1.00
-vn 0.02 -0.06 1.00
-vn 0.04 1.00 0.01
-vn -0.05 1.00 -0.02
-vn 0.07 0.00 1.00
-vn -0.12 0.00 0.99
-vn -0.38 -0.49 0.78
-vn -0.44 -0.12 0.89
-vn -0.43 -0.12 0.89
-vn -0.33 -0.45 0.83
-vn -0.19 -0.00 -0.98
-vn -0.37 0.03 0.93
-vn 0.19 0.00 0.98
-vn -0.38 -0.49 -0.78
-vn -0.44 -0.12 -0.89
-vn -0.43 -0.12 -0.89
-vn 0.72 0.00 0.69
-vn -0.07 0.00 1.00
-vn -0.72 0.00 -0.69
-vn 0.07 0.00 -1.00
-vn 0.72 0.00 -0.69
-vn 0.44 0.00 -0.90
-vn 0.44 0.00 0.90
-vn -0.44 0.00 0.90
-vn -0.44 0.00 -0.90
-vn 0.50 0.87 -0.00
-vn 0.00 0.45 -0.89
-vn -0.50 0.87 -0.00
-vn 0.00 0.42 0.91
-vn 0.08 1.00 -0.00
-vn 0.04 0.55 0.83
-vn -0.00 0.55 0.83
-vn 0.01 0.01 1.00
-vn -0.00 0.55 -0.83
-vn 0.04 0.55 -0.83
-vn 0.01 0.01 -1.00
-vn -0.08 1.00 -0.00
-vn -0.04 0.55 0.83
-vn -0.01 0.01 1.00
-vn -0.04 0.55 -0.83
-vn -0.01 0.01 -1.00
-vn -0.06 0.60 -0.79
-vn -0.91 -0.41 0.00
-vn -0.10 0.98 -0.19
-vn -0.06 0.60 0.79
-vn -0.91 -0.41 -0.00
-vn -0.10 0.98 0.19
-vn -0.05 0.61 -0.79
-vn -0.94 -0.35 -0.00
-vn -0.08 0.98 -0.19
-vn -0.05 0.61 0.79
-vn -0.08 0.98 0.19
-vn -0.04 0.61 -0.79
-vn -0.03 0.61 -0.79
-vn -0.97 -0.25 0.00
-vn -0.97 -0.25 -0.00
-vn -0.06 0.98 -0.19
-vn -0.04 0.61 0.79
-vn -0.03 0.61 0.79
-vn -0.06 0.98 0.19
-vn -0.01 0.61 -0.79
-vn -1.00 -0.07 -0.00
-vn -0.02 0.98 -0.19
-vn -0.01 0.61 0.79
-vn -0.02 0.98 0.19
-vn -1.00 -0.07 0.00
-vn -0.02 0.61 -0.79
-vn -0.99 -0.11 -0.00
-vn -0.02 0.61 0.79
-vn -0.99 -0.11 0.00
-vn 0.06 0.60 -0.79
-vn 0.91 -0.41 0.00
-vn 0.10 0.98 -0.19
-vn 0.06 0.60 0.79
-vn 0.91 -0.41 -0.00
-vn 0.10 0.98 0.19
-vn 0.05 0.61 -0.79
-vn 0.94 -0.35 -0.00
-vn 0.08 0.98 -0.19
-vn 0.05 0.61 0.79
-vn 0.94 -0.35 0.00
-vn 0.08 0.98 0.19
-vn 0.03 0.61 -0.79
-vn 0.04 0.61 -0.79
-vn 0.97 -0.25 0.00
-vn 0.06 0.98 -0.19
-vn 0.03 0.61 0.79
-vn 0.97 -0.25 -0.00
-vn 0.06 0.98 0.19
-vn 0.04 0.61 0.79
-vn 0.01 0.61 -0.79
-vn 1.00 -0.07 -0.00
-vn 0.02 0.98 -0.19
-vn 0.01 0.61 0.79
-vn 0.02 0.98 0.19
-vn 1.00 -0.07 0.00
-vn 0.02 0.61 -0.79
-vn 0.99 -0.11 -0.00
-vn 0.02 0.61 0.79
-vn 0.99 -0.11 0.00
-vn 0.10 0.98 -0.20
-vn 0.10 0.98 0.20
-vn 0.09 0.59 -0.80
-vn -0.82 0.57 0.00
-vn -0.82 0.57 -0.00
-vn 0.15 0.97 -0.20
-vn 0.09 0.59 0.80
-vn 0.15 0.97 0.20
-vn -0.09 0.59 -0.80
-vn 0.82 0.57 0.00
-vn -0.15 0.97 -0.20
-vn -0.09 0.59 0.80
-vn 0.82 0.57 -0.00
-vn -0.15 0.97 0.20
-vn -0.57 0.82 -0.00
-vn 0.08 -1.00 -0.00
-vn 0.57 0.82 -0.00
-vn -0.08 -1.00 -0.00
-vn 0.59 -0.81 -0.00
-vn -0.59 -0.81 -0.00
-vn 0.06 1.00 -0.00
-vn 0.10 0.99 -0.00
-vn -0.06 1.00 -0.00
-vn -0.07 -1.00 -0.00
-vn 0.07 -1.00 -0.00
-vn 0.00 0.37 0.93
-vn 0.00 -0.97 -0.26
-vn 0.00 0.37 -0.93
-vn 0.00 -0.97 0.26
-vn 0.00 -0.36 -0.93
-vn 0.00 -0.36 0.93
-vn 0.00 0.96 0.28
-vn 0.00 0.98 -0.21
-vn 0.00 0.94 -0.35
-vn 0.00 0.98 0.22
-vn 0.00 0.96 -0.28
-vn 0.00 0.98 0.21
-vn 0.00 0.94 0.35
-vn 0.00 0.98 -0.22
-vn 0.11 0.99 -0.00
-vn -0.10 0.99 -0.00
-vn 1.00 0.04 -0.00
-vn 0.87 0.50 -0.00
-vn -1.00 -0.04 -0.00
-vn -0.87 -0.50 -0.00
-vn 0.40 0.92 -0.00
-vn -0.42 -0.91 -0.00
-vn -0.40 0.92 -0.00
-vn 0.42 -0.91 -0.00
-vn -0.87 0.50 -0.00
-vn 0.87 -0.50 -0.00
-vn -1.00 0.04 -0.00
-vn 1.00 -0.04 -0.00
-vn 0.02 0.05 -1.00
-vn 0.95 -0.05 0.30
-vn -0.02 -0.01 1.00
-vn -0.94 0.18 -0.29
-vn 0.03 -0.06 -1.00
-vn 0.02 -0.06 -1.00
-vn 0.96 0.05 0.27
-vn -0.02 0.01 1.00
-vn -0.96 -0.22 -0.19
-vn 0.00 -1.00 -0.05
-vn 0.00 1.00 0.05
-vn 0.00 -1.00 0.05
-vn 0.00 1.00 -0.05
-vn 0.02 -1.00 -0.00
-vn -0.02 1.00 -0.00
-vn -0.01 1.00 -0.00
-vn -0.01 -1.00 -0.00
-vn 0.01 1.00 -0.00
-vn 0.02 0.05 1.00
-vn 0.95 -0.05 -0.30
-vn -0.02 -0.01 -1.00
-vn -0.94 0.18 0.29
-vn 0.03 -0.06 1.00
-vn 0.96 0.05 -0.27
-vn -0.02 0.01 -1.00
-vn -0.96 -0.22 0.19
-vn -0.96 -0.22 0.18
-vn 0.01 -1.00 -0.00
-vn -0.02 -1.00 -0.00
-vn 0.02 1.00 -0.00
-vn -0.99 0.12 -0.00
-vn -1.00 0.01 0.04
-vn -0.99 -0.10 0.07
-vn 0.00 0.01 1.00
-vn 0.00 -0.00 1.00
-vn 1.00 0.01 0.01
-vn 1.00 -0.03 0.02
-vn 0.00 0.04 -1.00
-vn 0.00 0.01 -1.00
-vn 0.00 -0.02 -1.00
-vn 0.13 -0.99 -0.00
-vn -0.13 0.99 -0.00
-vn -0.13 -0.99 -0.00
-vn 0.13 0.99 -0.00
-vn -0.07 1.00 -0.00
-vn 0.07 1.00 -0.00
-vn 0.00 -0.67 -0.74
-vn 0.00 -0.13 -0.99
-vn 0.00 0.67 -0.74
-vn 0.00 0.13 -0.99
-vn 0.00 0.12 -0.99
-vn -1.00 0.01 -0.04
-vn -0.99 -0.10 -0.07
-vn 0.00 -0.00 -1.00
-vn 1.00 0.01 -0.01
-vn 1.00 -0.03 -0.02
-vn 0.00 0.04 1.00
-vn 0.00 -0.02 1.00
-vn 0.72 0.01 -0.69
-vn -0.72 0.01 -0.69
-vn -1.00 0.00 -0.06
-vn -0.02 0.00 -1.00
-vn -0.02 0.65 -0.76
-vn 0.02 0.00 1.00
-vn 0.00 -0.99 0.12
-vn -0.85 0.00 -0.52
-vn -0.95 0.12 -0.30
-vn -0.62 0.00 0.78
-vn -0.76 -0.16 0.63
-vn -0.83 0.00 0.56
-vn 0.02 0.66 0.75
-vn -0.00 -0.99 -0.12
-vn -0.72 0.09 0.69
-vn -0.96 -0.21 -0.19
-vn 0.02 -0.64 0.77
-vn -0.02 -0.64 -0.77
-vn -0.00 0.99 -0.13
-vn 0.00 1.00 0.10
-vn 0.00 0.99 0.17
-vn 0.01 0.99 0.17
-vn -0.00 0.99 -0.10
-vn -0.74 0.00 -0.67
-vn -0.75 0.00 -0.67
-vn -0.54 0.00 0.84
-vn -0.00 0.00 1.00
-vn -0.96 0.00 0.29
-vn -0.95 0.00 0.30
-vn -0.31 0.95 0.10
-vn 0.95 0.00 -0.30
-vn 0.96 0.00 -0.29
-vn 0.03 -1.00 -0.01
-vn -0.03 0.04 1.00
-vn 0.10 0.00 1.00
-vn 0.07 -0.06 1.00
-vn 0.31 0.95 -0.10
-vn -0.04 -1.00 0.01
-vn 0.08 0.04 1.00
-vn -0.02 -0.06 1.00
-vn 0.32 -0.94 -0.10
-vn -0.32 -0.94 0.10
-vn -0.04 1.00 0.01
-vn 0.03 1.00 -0.01
-vn 0.05 1.00 -0.01
-vn -0.03 1.00 0.01
-vn 0.12 0.00 0.99
-vn 0.33 -0.45 0.83
-vn 0.19 -0.00 -0.98
-vn 0.37 0.03 0.93
-vn -0.19 0.00 0.98
-vn -0.01 0.00 1.00
-vn -0.96 0.00 0.30
-vn 0.31 0.95 -0.09
-vn -0.18 -0.35 0.92
-vn 0.37 -0.00 0.93
-vn -0.19 0.02 0.98
-vn -0.37 0.00 -0.93
-vn 1.00 0.00 0.06
-vn 0.02 0.65 0.76
-vn 0.85 0.00 0.52
-vn 0.95 0.12 0.30
-vn 0.62 0.00 -0.78
-vn 0.76 -0.16 -0.63
-vn 0.83 0.00 -0.56
-vn 0.82 0.00 -0.57
-vn -0.02 0.66 -0.75
-vn 0.72 0.09 -0.69
-vn 0.96 -0.21 0.19
-vn 0.00 0.99 0.13
-vn -0.00 1.00 -0.10
-vn -0.00 0.99 -0.17
-vn 0.00 0.99 0.10
-vn 0.75 0.00 0.67
-vn 0.54 0.00 -0.84
-vn 0.18 -0.35 -0.92
-vn -0.37 -0.00 -0.93
-vn 0.19 0.02 -0.98
-vn 0.37 0.00 0.93
-vn 0.01 0.00 -1.00
-vn 0.96 0.00 -0.30
-vn -0.03 -1.00 0.01
-vn 0.03 0.04 -1.00
-vn -0.10 0.00 -1.00
-vn -0.07 -0.06 -1.00
-vn -0.31 0.95 0.09
-vn 0.04 -1.00 -0.01
-vn -0.08 0.04 -1.00
-vn 0.04 1.00 -0.01
-vn -0.05 1.00 0.02
-vn -0.12 0.00 -0.99
-vn -0.33 -0.45 -0.83
-vn -0.19 -0.00 0.98
-vn -0.37 0.03 -0.93
-vn 0.19 0.00 -0.98
-vn 0.74 0.00 -0.67
-vn -0.05 1.00 -0.01
-vn -0.82 0.00 -0.57
-vn 0.05 1.00 0.02
-vn 0.74 0.00 0.67
-vn -0.05 1.00 0.01
-vn -0.82 0.00 0.57
-vn 0.05 1.00 -0.02
-# 487 vertex normals
-
-vt 0.10 0.10 0.00
-vt 0.07 0.10 0.00
-vt 0.07 0.01 0.00
-vt 0.10 0.01 0.00
-vt 0.05 0.10 0.00
-vt 0.05 0.01 0.00
-vt 0.02 0.10 0.00
-vt 0.02 0.01 0.00
-vt 0.38 0.10 0.00
-vt 0.35 0.10 0.00
-vt 0.35 0.01 0.00
-vt 0.38 0.01 0.00
-vt 0.32 0.10 0.00
-vt 0.32 0.01 0.00
-vt 0.29 0.10 0.00
-vt 0.29 0.01 0.00
-vt 0.27 0.10 0.00
-vt 0.27 0.01 0.00
-vt 0.24 0.10 0.00
-vt 0.24 0.01 0.00
-vt 0.21 0.10 0.00
-vt 0.21 0.01 0.00
-vt 0.17 0.10 0.00
-vt 0.17 0.01 0.00
-vt 0.13 0.10 0.00
-vt 0.13 0.01 0.00
-vt 0.34 0.56 0.00
-vt 0.37 0.56 0.00
-vt 0.37 0.57 0.00
-vt 0.34 0.57 0.00
-vt 0.30 0.56 0.00
-vt 0.30 0.57 0.00
-vt 0.27 0.56 0.00
-vt 0.27 0.57 0.00
-vt 0.61 0.56 0.00
-vt 0.64 0.56 0.00
-vt 0.64 0.57 0.00
-vt 0.61 0.57 0.00
-vt 0.58 0.56 0.00
-vt 0.58 0.57 0.00
-vt 0.55 0.56 0.00
-vt 0.55 0.57 0.00
-vt 0.52 0.56 0.00
-vt 0.52 0.57 0.00
-vt 0.49 0.56 0.00
-vt 0.49 0.57 0.00
-vt 0.46 0.56 0.00
-vt 0.46 0.57 0.00
-vt 0.43 0.56 0.00
-vt 0.43 0.57 0.00
-vt 0.40 0.56 0.00
-vt 0.40 0.57 0.00
-vt 0.97 0.27 0.00
-vt 0.96 0.28 0.00
-vt 0.94 0.27 0.00
-vt 0.93 0.26 0.00
-vt 0.93 0.25 0.00
-vt 0.93 0.24 0.00
-vt 0.93 0.23 0.00
-vt 0.94 0.23 0.00
-vt 0.94 0.22 0.00
-vt 0.96 0.22 0.00
-vt 0.97 0.23 0.00
-vt 0.97 0.22 0.00
-vt 0.98 0.24 0.00
-vt 0.98 0.23 0.00
-vt 0.99 0.25 0.00
-vt 0.98 0.26 0.00
-vt 0.81 0.06 0.00
-vt 0.81 0.16 0.00
-vt 0.78 0.16 0.00
-vt 0.78 0.06 0.00
-vt 0.76 0.16 0.00
-vt 0.76 0.06 0.00
-vt 0.73 0.16 0.00
-vt 0.73 0.06 0.00
-vt 0.71 0.16 0.00
-vt 0.71 0.06 0.00
-vt 0.69 0.16 0.00
-vt 0.69 0.06 0.00
-vt 0.98 0.06 0.00
-vt 0.98 0.16 0.00
-vt 0.95 0.16 0.00
-vt 0.95 0.06 0.00
-vt 0.93 0.16 0.00
-vt 0.93 0.06 0.00
-vt 0.91 0.16 0.00
-vt 0.91 0.06 0.00
-vt 0.88 0.16 0.00
-vt 0.88 0.06 0.00
-vt 0.86 0.16 0.00
-vt 0.86 0.07 0.00
-vt 0.83 0.16 0.00
-vt 0.83 0.07 0.00
-vt 0.98 0.28 0.00
-vt 0.96 0.29 0.00
-vt 0.99 0.27 0.00
-vt 1.00 0.25 0.00
-vt 0.99 0.23 0.00
-vt 0.98 0.22 0.00
-vt 0.96 0.21 0.00
-vt 0.92 0.23 0.00
-vt 0.92 0.25 0.00
-vt 0.93 0.27 0.00
-vt 0.92 0.27 0.00
-vt 0.94 0.28 0.00
-vt 0.11 0.23 0.00
-vt 0.09 0.22 0.00
-vt 0.10 0.18 0.00
-vt 0.13 0.19 0.00
-vt 0.14 0.24 0.00
-vt 0.15 0.19 0.00
-vt 0.17 0.24 0.00
-vt 0.18 0.20 0.00
-vt 0.21 0.24 0.00
-vt 0.20 0.20 0.00
-vt 0.24 0.24 0.00
-vt 0.23 0.19 0.00
-vt 0.27 0.23 0.00
-vt 0.25 0.19 0.00
-vt 0.30 0.22 0.00
-vt 0.28 0.18 0.00
-vt 0.32 0.21 0.00
-vt 0.30 0.17 0.00
-vt 0.35 0.19 0.00
-vt 0.32 0.16 0.00
-vt 0.03 0.19 0.00
-vt 0.01 0.17 0.00
-vt 0.04 0.14 0.00
-vt 0.06 0.16 0.00
-vt 0.06 0.21 0.00
-vt 0.08 0.17 0.00
-vt 0.12 0.14 0.00
-vt 0.14 0.15 0.00
-vt 0.16 0.15 0.00
-vt 0.18 0.16 0.00
-vt 0.20 0.16 0.00
-vt 0.22 0.15 0.00
-vt 0.24 0.15 0.00
-vt 0.26 0.14 0.00
-vt 0.28 0.13 0.00
-vt 0.31 0.12 0.00
-vt 0.06 0.11 0.00
-vt 0.08 0.12 0.00
-vt 0.10 0.13 0.00
-vt 0.14 0.12 0.00
-vt 0.12 0.12 0.00
-vt 0.12 0.11 0.00
-vt 0.14 0.11 0.00
-vt 0.10 0.12 0.00
-vt 0.10 0.11 0.00
-vt 0.35 0.12 0.00
-vt 0.33 0.12 0.00
-vt 0.33 0.11 0.00
-vt 0.35 0.11 0.00
-vt 0.31 0.11 0.00
-vt 0.29 0.12 0.00
-vt 0.29 0.11 0.00
-vt 0.27 0.12 0.00
-vt 0.27 0.11 0.00
-vt 0.24 0.12 0.00
-vt 0.24 0.11 0.00
-vt 0.22 0.12 0.00
-vt 0.22 0.11 0.00
-vt 0.20 0.12 0.00
-vt 0.20 0.11 0.00
-vt 0.18 0.12 0.00
-vt 0.18 0.11 0.00
-vt 0.16 0.12 0.00
-vt 0.16 0.11 0.00
-vt 0.67 0.06 0.00
-vt 0.64 0.06 0.00
-vt 0.64 0.01 0.00
-vt 0.67 0.01 0.00
-vt 0.60 0.06 0.00
-vt 0.60 0.01 0.00
-vt 0.99 0.06 0.00
-vt 0.96 0.06 0.00
-vt 0.96 0.01 0.00
-vt 0.99 0.01 0.00
-vt 0.93 0.01 0.00
-vt 0.89 0.06 0.00
-vt 0.89 0.01 0.00
-vt 0.86 0.06 0.00
-vt 0.86 0.01 0.00
-vt 0.83 0.06 0.00
-vt 0.83 0.01 0.00
-vt 0.80 0.06 0.00
-vt 0.80 0.01 0.00
-vt 0.77 0.06 0.00
-vt 0.77 0.01 0.00
-vt 0.73 0.01 0.00
-vt 0.70 0.06 0.00
-vt 0.70 0.01 0.00
-vt 0.95 0.87 0.00
-vt 0.93 0.89 0.00
-vt 0.92 0.82 0.00
-vt 0.95 0.82 0.00
-vt 0.92 0.79 0.00
-vt 0.90 0.79 0.00
-vt 0.90 0.77 0.00
-vt 0.92 0.77 0.00
-vt 0.99 0.56 0.00
-vt 0.98 0.56 0.00
-vt 0.98 0.52 0.00
-vt 0.99 0.52 0.00
-vt 0.93 0.78 0.00
-vt 0.96 0.78 0.00
-vt 0.96 0.79 0.00
-vt 0.96 0.81 0.00
-vt 0.94 0.81 0.00
-vt 0.93 0.90 0.00
-vt 0.95 0.88 0.00
-vt 0.96 0.88 0.00
-vt 0.89 0.79 0.00
-vt 0.89 0.81 0.00
-vt 0.90 0.87 0.00
-vt 0.90 0.82 0.00
-vt 0.99 0.60 0.00
-vt 0.98 0.60 0.00
-vt 0.99 0.66 0.00
-vt 0.99 0.59 0.00
-vt 0.99 0.46 0.00
-vt 0.92 0.76 0.00
-vt 0.86 0.76 0.00
-vt 0.86 0.77 0.00
-vt 0.96 0.83 0.00
-vt 0.95 0.83 0.00
-vt 0.98 0.66 0.00
-vt 0.98 0.46 0.00
-vt 0.96 0.76 0.00
-vt 0.92 0.75 0.00
-vt 0.96 0.75 0.00
-vt 0.86 0.75 0.00
-vt 0.93 0.77 0.00
-vt 0.96 0.77 0.00
-vt 0.97 0.76 0.00
-vt 0.97 0.77 0.00
-vt 0.97 0.75 0.00
-vt 0.97 0.79 0.00
-vt 0.98 0.80 0.00
-vt 0.97 0.78 0.00
-vt 0.62 0.90 0.00
-vt 0.63 0.90 0.00
-vt 0.63 0.93 0.00
-vt 0.62 0.93 0.00
-vt 0.66 0.90 0.00
-vt 0.64 0.93 0.00
-vt 0.64 0.98 0.00
-vt 0.66 0.98 0.00
-vt 0.63 0.99 0.00
-vt 0.62 0.99 0.00
-vt 0.60 0.18 0.00
-vt 0.63 0.18 0.00
-vt 0.63 0.20 0.00
-vt 0.60 0.20 0.00
-vt 0.56 0.18 0.00
-vt 0.56 0.20 0.00
-vt 0.53 0.18 0.00
-vt 0.53 0.20 0.00
-vt 0.89 0.18 0.00
-vt 0.92 0.18 0.00
-vt 0.92 0.20 0.00
-vt 0.89 0.20 0.00
-vt 0.86 0.18 0.00
-vt 0.86 0.20 0.00
-vt 0.82 0.18 0.00
-vt 0.82 0.20 0.00
-vt 0.79 0.18 0.00
-vt 0.79 0.20 0.00
-vt 0.76 0.18 0.00
-vt 0.76 0.20 0.00
-vt 0.73 0.18 0.00
-vt 0.73 0.20 0.00
-vt 0.69 0.18 0.00
-vt 0.69 0.20 0.00
-vt 0.66 0.18 0.00
-vt 0.66 0.20 0.00
-vt 0.86 0.88 0.00
-vt 0.83 0.89 0.00
-vt 0.83 0.88 0.00
-vt 0.85 0.88 0.00
-vt 0.88 0.87 0.00
-vt 0.87 0.86 0.00
-vt 0.88 0.84 0.00
-vt 0.88 0.81 0.00
-vt 0.87 0.82 0.00
-vt 0.86 0.79 0.00
-vt 0.85 0.80 0.00
-vt 0.83 0.79 0.00
-vt 0.83 0.80 0.00
-vt 0.81 0.79 0.00
-vt 0.81 0.80 0.00
-vt 0.79 0.81 0.00
-vt 0.79 0.82 0.00
-vt 0.78 0.84 0.00
-vt 0.79 0.84 0.00
-vt 0.79 0.87 0.00
-vt 0.79 0.86 0.00
-vt 0.81 0.88 0.00
-vt 0.60 0.67 0.00
-vt 0.58 0.67 0.00
-vt 0.58 0.66 0.00
-vt 0.61 0.66 0.00
-vt 0.64 0.67 0.00
-vt 0.64 0.66 0.00
-vt 0.68 0.67 0.00
-vt 0.68 0.66 0.00
-vt 0.72 0.67 0.00
-vt 0.72 0.66 0.00
-vt 0.76 0.67 0.00
-vt 0.76 0.66 0.00
-vt 0.79 0.67 0.00
-vt 0.79 0.66 0.00
-vt 0.81 0.67 0.00
-vt 0.81 0.66 0.00
-vt 0.84 0.67 0.00
-vt 0.84 0.66 0.00
-vt 0.88 0.67 0.00
-vt 0.88 0.66 0.00
-vt 0.53 0.67 0.00
-vt 0.49 0.67 0.00
-vt 0.50 0.66 0.00
-vt 0.53 0.66 0.00
-vt 0.56 0.67 0.00
-vt 0.56 0.66 0.00
-vt 0.66 0.16 0.00
-vt 0.63 0.17 0.00
-vt 0.63 0.12 0.00
-vt 0.68 0.14 0.00
-vt 0.68 0.12 0.00
-vt 0.68 0.09 0.00
-vt 0.66 0.07 0.00
-vt 0.63 0.07 0.00
-vt 0.61 0.07 0.00
-vt 0.59 0.09 0.00
-vt 0.59 0.12 0.00
-vt 0.59 0.14 0.00
-vt 0.61 0.16 0.00
-vt 0.60 0.21 0.00
-vt 0.56 0.21 0.00
-vt 0.64 0.68 0.00
-vt 0.60 0.68 0.00
-vt 0.92 0.21 0.00
-vt 0.89 0.21 0.00
-vt 0.72 0.68 0.00
-vt 0.68 0.68 0.00
-vt 0.86 0.21 0.00
-vt 0.82 0.21 0.00
-vt 0.79 0.68 0.00
-vt 0.76 0.68 0.00
-vt 0.79 0.21 0.00
-vt 0.76 0.21 0.00
-vt 0.84 0.68 0.00
-vt 0.81 0.68 0.00
-vt 0.73 0.21 0.00
-vt 0.69 0.21 0.00
-vt 0.53 0.68 0.00
-vt 0.49 0.68 0.00
-vt 0.66 0.21 0.00
-vt 0.63 0.21 0.00
-vt 0.58 0.68 0.00
-vt 0.56 0.68 0.00
-vt 0.24 0.62 0.00
-vt 0.00 0.62 0.00
-vt 0.05 0.71 0.00
-vt 0.19 0.71 0.00
-vt 0.00 0.41 0.00
-vt 0.28 0.41 0.00
-vt 0.24 0.49 0.00
-vt 0.05 0.49 0.00
-vt 0.01 0.52 0.00
-vt 0.29 0.52 0.00
-vt 0.24 0.59 0.00
-vt 0.05 0.59 0.00
-vt 0.38 0.32 0.00
-vt 0.53 0.32 0.00
-vt 0.53 0.42 0.00
-vt 0.38 0.42 0.00
-vt 0.67 0.21 0.00
-vt 0.49 0.21 0.00
-vt 0.49 0.30 0.00
-vt 0.67 0.30 0.00
-vt 0.46 0.89 0.00
-vt 0.27 0.89 0.00
-vt 0.27 0.99 0.00
-vt 0.46 0.99 0.00
-vt 0.62 0.80 0.00
-vt 0.77 0.80 0.00
-vt 0.77 0.88 0.00
-vt 0.62 0.88 0.00
-vt 0.24 0.73 0.00
-vt 0.32 0.73 0.00
-vt 0.31 0.72 0.00
-vt 0.24 0.72 0.00
-vt 0.32 0.63 0.00
-vt 0.31 0.64 0.00
-vt 0.24 0.63 0.00
-vt 0.24 0.64 0.00
-vt 0.19 0.33 0.00
-vt 0.19 0.25 0.00
-vt 0.20 0.27 0.00
-vt 0.20 0.31 0.00
-vt 0.31 0.25 0.00
-vt 0.30 0.27 0.00
-vt 0.31 0.33 0.00
-vt 0.30 0.31 0.00
-vt 0.14 0.26 0.00
-vt 0.14 0.40 0.00
-vt 0.18 0.34 0.00
-vt 0.18 0.26 0.00
-vt 0.36 0.40 0.00
-vt 0.32 0.34 0.00
-vt 0.36 0.26 0.00
-vt 0.32 0.26 0.00
-vt 0.49 0.15 0.00
-vt 0.49 0.25 0.00
-vt 0.36 0.25 0.00
-vt 0.36 0.15 0.00
-vt 0.41 0.01 0.00
-vt 0.58 0.01 0.00
-vt 0.58 0.14 0.00
-vt 0.41 0.14 0.00
-vt 0.58 0.42 0.00
-vt 0.58 0.54 0.00
-vt 0.45 0.53 0.00
-vt 0.45 0.45 0.00
-vt 0.71 0.95 0.00
-vt 0.66 0.89 0.00
-vt 0.14 0.94 0.00
-vt 0.01 0.95 0.00
-vt 0.76 0.89 0.00
-vt 0.32 0.41 0.00
-vt 0.32 0.53 0.00
-vt 0.27 0.95 0.00
-vt 0.80 0.98 0.00
-vt 0.80 0.93 0.00
-vt 0.81 0.93 0.00
-vt 0.81 0.98 0.00
-vt 0.78 0.98 0.00
-vt 0.78 0.93 0.00
-vt 0.77 0.93 0.00
-vt 0.77 0.98 0.00
-vt 0.77 0.99 0.00
-vt 0.78 0.99 0.00
-vt 0.73 0.93 0.00
-vt 0.74 0.93 0.00
-vt 0.74 0.98 0.00
-vt 0.73 0.98 0.00
-vt 0.76 0.98 0.00
-vt 0.86 0.48 0.00
-vt 0.86 0.45 0.00
-vt 0.94 0.45 0.00
-vt 0.94 0.48 0.00
-vt 0.95 0.40 0.00
-vt 0.99 0.40 0.00
-vt 0.99 0.45 0.00
-vt 0.95 0.45 0.00
-vt 0.99 0.35 0.00
-vt 0.90 0.35 0.00
-vt 0.90 0.39 0.00
-vt 0.99 0.39 0.00
-vt 0.68 0.24 0.00
-vt 0.71 0.24 0.00
-vt 0.71 0.62 0.00
-vt 0.68 0.62 0.00
-vt 0.61 0.69 0.00
-vt 0.80 0.69 0.00
-vt 0.80 0.76 0.00
-vt 0.61 0.76 0.00
-vt 0.87 0.95 0.00
-vt 0.86 0.97 0.00
-vt 0.86 0.91 0.00
-vt 0.87 0.91 0.00
-vt 0.90 0.94 0.00
-vt 0.90 0.91 0.00
-vt 0.91 0.91 0.00
-vt 0.91 0.94 0.00
-vt 0.98 0.83 0.00
-vt 0.98 0.76 0.00
-vt 0.89 0.94 0.00
-vt 0.89 0.91 0.00
-vt 0.95 0.93 0.00
-vt 0.97 0.93 0.00
-vt 0.97 0.94 0.00
-vt 0.97 0.97 0.00
-vt 0.97 0.99 0.00
-vt 0.96 0.99 0.00
-vt 0.86 0.98 0.00
-vt 0.87 0.97 0.00
-vt 0.88 0.97 0.00
-vt 0.86 0.99 0.00
-vt 0.90 0.99 0.00
-vt 0.90 0.97 0.00
-vt 0.91 0.99 0.00
-vt 0.93 0.97 0.00
-vt 0.93 0.98 0.00
-vt 0.85 0.95 0.00
-vt 0.85 0.91 0.00
-vt 0.98 0.90 0.00
-vt 0.93 0.93 0.00
-vt 0.84 0.97 0.00
-vt 0.85 0.97 0.00
-vt 0.99 0.78 0.00
-vt 0.99 0.67 0.00
-vt 0.99 0.83 0.00
-vt 0.99 0.89 0.00
-vt 0.99 0.99 0.00
-vt 0.93 0.95 0.00
-vt 0.93 0.96 0.00
-vt 0.90 0.96 0.00
-vt 0.90 0.95 0.00
-vt 0.96 0.95 0.00
-vt 0.96 0.96 0.00
-vt 0.84 0.92 0.00
-vt 0.85 0.92 0.00
-vt 0.98 0.99 0.00
-vt 0.98 0.67 0.00
-vt 0.88 0.92 0.00
-vt 0.97 0.95 0.00
-vt 0.89 0.95 0.00
-vt 0.95 0.92 0.00
-vt 0.97 0.92 0.00
-vt 0.93 0.92 0.00
-vt 0.98 0.95 0.00
-vt 0.98 0.96 0.00
-vt 0.97 0.96 0.00
-vt 0.98 0.94 0.00
-vt 0.89 0.99 0.00
-vt 0.89 0.97 0.00
-vt 0.88 0.96 0.00
-vt 0.88 0.95 0.00
-vt 0.89 0.96 0.00
-vt 0.04 0.35 0.00
-vt 0.04 0.25 0.00
-vt 0.07 0.25 0.00
-vt 0.07 0.36 0.00
-vt 0.13 0.33 0.00
-vt 0.10 0.35 0.00
-vt 0.10 0.25 0.00
-vt 0.13 0.25 0.00
-vt 0.01 0.33 0.00
-vt 0.01 0.25 0.00
-vt 0.93 0.52 0.00
-vt 0.94 0.52 0.00
-vt 0.94 0.58 0.00
-vt 0.93 0.58 0.00
-vt 0.92 0.49 0.00
-vt 0.91 0.49 0.00
-vt 0.91 0.54 0.00
-vt 0.92 0.55 0.00
-vt 0.97 0.52 0.00
-vt 0.95 0.52 0.00
-vt 0.95 0.58 0.00
-vt 0.97 0.58 0.00
-vt 0.94 0.64 0.00
-vt 0.93 0.64 0.00
-vt 0.89 0.58 0.00
-vt 0.89 0.59 0.00
-vt 0.95 0.64 0.00
-vt 0.97 0.64 0.00
-vt 0.94 0.69 0.00
-vt 0.93 0.69 0.00
-vt 0.86 0.59 0.00
-vt 0.86 0.61 0.00
-vt 0.95 0.69 0.00
-vt 0.97 0.69 0.00
-vt 0.83 0.58 0.00
-vt 0.83 0.59 0.00
-vt 0.81 0.54 0.00
-vt 0.80 0.55 0.00
-vt 0.81 0.49 0.00
-vt 0.80 0.49 0.00
-vt 0.82 0.22 0.00
-vt 0.85 0.22 0.00
-vt 0.84 0.39 0.00
-vt 0.81 0.39 0.00
-vt 0.76 0.22 0.00
-vt 0.80 0.22 0.00
-vt 0.79 0.38 0.00
-vt 0.76 0.38 0.00
-vt 0.82 0.52 0.00
-vt 0.85 0.52 0.00
-vt 0.80 0.51 0.00
-vt 0.76 0.53 0.00
-vt 0.18 0.92 0.00
-vt 0.09 0.92 0.00
-vt 0.09 0.93 0.00
-vt 0.18 0.93 0.00
-vt 0.00 0.90 0.00
-vt 0.10 0.89 0.00
-vt 0.10 0.90 0.00
-vt 0.00 0.91 0.00
-vt 0.00 0.92 0.00
-vt 0.00 0.93 0.00
-vt 0.20 0.90 0.00
-vt 0.20 0.91 0.00
-vt 0.20 0.93 0.00
-vt 0.23 0.90 0.00
-vt 0.23 0.93 0.00
-vt 0.26 0.76 0.00
-vt 0.26 0.90 0.00
-vt 0.22 0.84 0.00
-vt 0.22 0.76 0.00
-vt 0.11 0.81 0.00
-vt 0.11 0.87 0.00
-vt 0.02 0.88 0.00
-vt 0.02 0.81 0.00
-vt 0.31 0.84 0.00
-vt 0.31 0.76 0.00
-vt 0.11 0.74 0.00
-vt 0.11 0.80 0.00
-vt 0.01 0.80 0.00
-vt 0.01 0.74 0.00
-vt 0.20 0.81 0.00
-vt 0.20 0.88 0.00
-vt 0.20 0.74 0.00
-vt 0.20 0.80 0.00
-vt 0.36 0.65 0.00
-vt 0.36 0.75 0.00
-vt 0.34 0.75 0.00
-vt 0.33 0.65 0.00
-vt 0.36 0.89 0.00
-vt 0.33 0.87 0.00
-vt 0.45 0.67 0.00
-vt 0.45 0.76 0.00
-vt 0.43 0.76 0.00
-vt 0.42 0.67 0.00
-vt 0.45 0.89 0.00
-vt 0.42 0.89 0.00
-vt 0.41 0.66 0.00
-vt 0.38 0.66 0.00
-vt 0.39 0.77 0.00
-vt 0.41 0.77 0.00
-vt 0.38 0.88 0.00
-vt 0.41 0.88 0.00
-vt 0.72 0.62 0.00
-vt 0.72 0.52 0.00
-vt 0.73 0.52 0.00
-vt 0.73 0.62 0.00
-vt 0.74 0.62 0.00
-vt 0.74 0.43 0.00
-vt 0.73 0.43 0.00
-vt 0.59 0.58 0.00
-vt 0.64 0.58 0.00
-vt 0.64 0.63 0.00
-vt 0.59 0.63 0.00
-vt 0.75 0.42 0.00
-vt 0.73 0.42 0.00
-vt 0.73 0.36 0.00
-vt 0.75 0.36 0.00
-vt 0.92 0.71 0.00
-vt 0.97 0.71 0.00
-vt 0.92 0.73 0.00
-vt 0.73 0.29 0.00
-vt 0.73 0.24 0.00
-vt 0.75 0.24 0.00
-vt 0.75 0.29 0.00
-vt 0.86 0.72 0.00
-vt 0.86 0.73 0.00
-vt 0.81 0.72 0.00
-vt 0.81 0.70 0.00
-vt 0.73 0.33 0.00
-vt 0.75 0.33 0.00
-vt 0.89 0.74 0.00
-vt 0.89 0.72 0.00
-vt 0.83 0.62 0.00
-vt 0.92 0.62 0.00
-vt 0.92 0.61 0.00
-vt 0.83 0.61 0.00
-vt 0.83 0.63 0.00
-vt 0.92 0.63 0.00
-vt 0.71 0.65 0.00
-vt 0.71 0.66 0.00
-vt 0.75 0.66 0.00
-vt 0.75 0.65 0.00
-vt 0.71 0.64 0.00
-vt 0.75 0.64 0.00
-vt 0.58 0.64 0.00
-vt 0.62 0.66 0.00
-vt 0.62 0.64 0.00
-vt 0.92 0.64 0.00
-vt 0.83 0.64 0.00
-vt 0.75 0.61 0.00
-vt 0.75 0.62 0.00
-vt 0.75 0.63 0.00
-vt 0.67 0.66 0.00
-vt 0.67 0.64 0.00
-vt 0.41 0.65 0.00
-vt 0.41 0.57 0.00
-vt 0.44 0.57 0.00
-vt 0.44 0.66 0.00
-vt 0.48 0.65 0.00
-vt 0.48 0.57 0.00
-# 694 texture coords
-
-o castle
-g castle
-f 1/1/1 2/2/2 3/3/2
-f 3/3/2 4/4/1 1/1/1
-f 2/2/2 5/5/3 6/6/3
-f 6/6/3 3/3/2 2/2/2
-f 5/5/3 7/7/4 8/8/4
-f 8/8/4 6/6/3 5/5/3
-f 7/9/4 9/10/5 10/11/5
-f 10/11/5 8/12/4 7/9/4
-f 9/10/5 11/13/6 12/14/6
-f 12/14/6 10/11/5 9/10/5
-f 11/13/6 13/15/7 14/16/7
-f 14/16/7 12/14/6 11/13/6
-f 13/15/7 15/17/8 16/18/8
-f 16/18/8 14/16/7 13/15/7
-f 15/17/8 17/19/9 18/20/9
-f 18/20/9 16/18/8 15/17/8
-f 17/19/9 19/21/10 20/22/10
-f 20/22/10 18/20/9 17/19/9
-f 19/21/10 21/23/11 22/24/11
-f 22/24/11 20/22/10 19/21/10
-f 21/23/11 23/25/12 24/26/12
-f 24/26/12 22/24/11 21/23/11
-f 23/25/12 1/1/1 4/4/1
-f 4/4/1 24/26/12 23/25/12
-f 25/27/13 26/28/13 27/29/13
-f 27/29/13 28/30/13 25/27/13
-f 29/31/14 25/27/14 28/30/14
-f 28/30/14 30/32/14 29/31/14
-f 31/33/15 29/31/15 30/32/15
-f 30/32/15 32/34/15 31/33/15
-f 33/35/16 31/36/16 32/37/16
-f 32/37/16 34/38/16 33/35/16
-f 35/39/17 33/35/17 34/38/17
-f 34/38/17 36/40/17 35/39/17
-f 37/41/18 35/39/18 36/40/18
-f 36/40/18 38/42/18 37/41/18
-f 39/43/19 37/41/19 38/42/19
-f 38/42/19 40/44/19 39/43/19
-f 41/45/20 39/43/20 40/44/20
-f 40/44/20 42/46/20 41/45/20
-f 43/47/21 41/45/21 42/46/21
-f 42/46/21 44/48/21 43/47/21
-f 45/49/22 43/47/22 44/48/22
-f 44/48/22 46/50/22 45/49/22
-f 47/51/23 45/49/23 46/50/23
-f 46/50/23 48/52/23 47/51/23
-f 26/28/24 47/51/25 48/52/25
-f 48/52/25 27/29/24 26/28/24
-f 2/53/26 1/54/26 26/54/26
-f 26/54/26 25/53/26 2/53/26
-f 1/54/26 23/55/26 47/55/26
-f 47/55/26 26/54/26 1/54/26
-f 23/55/26 21/56/26 45/56/26
-f 45/56/26 47/55/26 23/55/26
-f 21/56/26 19/57/26 43/57/26
-f 43/57/26 45/56/26 21/56/26
-f 19/57/26 17/58/26 41/59/26
-f 41/59/26 43/57/26 19/57/26
-f 17/58/26 15/60/26 39/61/26
-f 39/61/26 41/59/26 17/58/26
-f 15/60/26 13/62/26 37/62/26
-f 37/62/26 39/61/26 15/60/26
-f 13/62/26 11/63/26 35/64/26
-f 35/64/26 37/62/26 13/62/26
-f 11/63/26 9/65/26 33/66/26
-f 33/66/26 35/64/26 11/63/26
-f 9/65/26 7/67/26 31/67/26
-f 31/67/26 33/66/26 9/65/26
-f 7/67/26 5/68/26 29/68/26
-f 29/68/26 31/67/26 7/67/26
-f 5/68/26 2/53/26 25/53/26
-f 25/53/26 29/68/26 5/68/26
-f 49/54/27 50/53/27 28/53/27
-f 28/53/27 27/54/27 49/54/27
-f 50/53/27 51/68/27 30/68/27
-f 30/68/27 28/53/27 50/53/27
-f 51/68/27 52/67/27 32/67/27
-f 32/67/27 30/68/27 51/68/27
-f 52/67/27 53/65/27 34/66/27
-f 34/66/27 32/67/27 52/67/27
-f 53/65/27 54/63/27 36/64/27
-f 36/64/27 34/66/27 53/65/27
-f 54/63/27 55/62/27 38/62/27
-f 38/62/27 36/64/27 54/63/27
-f 55/62/27 56/60/27 40/61/27
-f 40/61/27 38/62/27 55/62/27
-f 56/60/27 57/58/27 42/59/27
-f 42/59/27 40/61/27 56/60/27
-f 57/58/27 58/57/27 44/57/27
-f 44/57/27 42/59/27 57/58/27
-f 58/57/27 59/56/27 46/56/27
-f 46/56/27 44/57/27 58/57/27
-f 59/56/27 60/55/27 48/55/27
-f 48/55/27 46/56/27 59/56/27
-f 60/55/27 49/54/27 27/54/27
-f 27/54/27 48/55/27 60/55/27
-f 49/69/1 61/70/1 62/71/2
-f 62/71/2 50/72/2 49/69/1
-f 50/72/2 62/71/2 63/73/14
-f 63/73/14 51/74/14 50/72/2
-f 51/74/15 63/73/15 64/75/15
-f 64/75/15 52/76/15 51/74/15
-f 52/76/16 64/75/16 65/77/5
-f 65/77/5 53/78/5 52/76/16
-f 53/78/5 65/77/5 66/79/6
-f 66/79/6 54/80/6 53/78/5
-f 54/81/6 66/82/6 67/83/7
-f 67/83/7 55/84/7 54/81/6
-f 55/84/7 67/83/7 68/85/8
-f 68/85/8 56/86/8 55/84/7
-f 56/86/8 68/85/8 69/87/9
-f 69/87/9 57/88/9 56/86/8
-f 57/88/9 69/87/9 70/89/10
-f 70/89/10 58/90/10 57/88/9
-f 58/90/10 70/89/10 71/91/11
-f 71/91/11 59/92/11 58/90/10
-f 59/92/11 71/91/11 72/93/12
-f 72/93/12 60/94/12 59/92/11
-f 60/94/12 72/93/12 61/70/1
-f 61/70/1 49/69/1 60/94/12
-f 73/95/26 74/96/26 75/96/26
-f 75/96/26 76/95/26 73/95/26
-f 77/97/26 73/95/26 76/95/26
-f 76/95/26 78/97/26 77/97/26
-f 79/67/26 77/97/26 78/97/26
-f 78/97/26 80/98/26 79/67/26
-f 81/99/26 79/67/26 80/98/26
-f 80/98/26 82/99/26 81/99/26
-f 83/100/26 81/99/26 82/99/26
-f 82/99/26 84/100/26 83/100/26
-f 85/101/26 83/100/26 84/100/26
-f 84/100/26 86/101/26 85/101/26
-f 87/61/26 85/101/26 86/101/26
-f 86/101/26 88/61/26 87/61/26
-f 89/59/26 87/61/26 88/61/26
-f 88/61/26 90/102/26 89/59/26
-f 91/103/26 89/59/26 90/102/26
-f 90/102/26 92/103/26 91/103/26
-f 93/104/26 91/103/26 92/103/26
-f 92/103/26 94/105/26 93/104/26
-f 95/106/26 93/104/26 94/105/26
-f 94/105/26 96/106/26 95/106/26
-f 74/96/26 95/106/26 96/106/26
-f 96/106/26 75/96/26 74/96/26
-f 76/107/28 75/108/28 97/109/28
-f 97/109/28 98/110/28 76/107/28
-f 78/111/29 76/107/29 98/110/29
-f 98/110/29 99/112/29 78/111/29
-f 80/113/30 78/111/30 99/112/30
-f 99/112/30 100/114/30 80/113/30
-f 82/115/31 80/113/31 100/114/31
-f 100/114/31 101/116/31 82/115/31
-f 84/117/32 82/115/32 101/116/32
-f 101/116/32 102/118/32 84/117/32
-f 86/119/33 84/117/33 102/118/33
-f 102/118/33 103/120/33 86/119/33
-f 88/121/34 86/119/34 103/120/34
-f 103/120/34 104/122/34 88/121/34
-f 90/123/35 88/121/35 104/122/35
-f 104/122/35 105/124/35 90/123/35
-f 92/125/36 90/123/36 105/124/36
-f 105/124/36 106/126/36 92/125/36
-f 94/127/37 92/128/37 106/129/37
-f 106/129/37 107/130/37 94/127/37
-f 96/131/38 94/127/38 107/130/38
-f 107/130/38 108/132/38 96/131/38
-f 75/108/39 96/131/39 108/132/39
-f 108/132/39 97/109/39 75/108/39
-f 98/110/40 97/109/40 109/133/40
-f 109/133/40 110/134/40 98/110/40
-f 99/112/41 98/110/41 110/134/41
-f 110/134/41 111/135/41 99/112/41
-f 100/114/42 99/112/42 111/135/42
-f 111/135/42 112/136/43 100/114/42
-f 101/116/44 100/114/44 112/136/44
-f 112/136/44 113/137/44 101/116/44
-f 102/118/45 101/116/45 113/137/45
-f 113/137/45 114/138/45 102/118/45
-f 103/120/46 102/118/46 114/138/46
-f 114/138/46 115/139/46 103/120/46
-f 104/122/47 103/120/48 115/139/48
-f 115/139/48 116/140/48 104/122/47
-f 105/124/49 104/122/49 116/140/49
-f 116/140/49 117/141/49 105/124/49
-f 106/126/50 105/124/50 117/141/50
-f 117/141/50 118/142/50 106/126/50
-f 107/130/51 106/129/51 118/143/52
-f 118/143/52 119/144/51 107/130/51
-f 108/132/53 107/130/53 119/144/53
-f 119/144/53 120/145/53 108/132/53
-f 97/109/54 108/132/55 120/145/54
-f 120/145/54 109/133/54 97/109/54
-f 121/146/56 122/147/56 62/148/56
-f 62/148/56 61/149/56 121/146/56
-f 122/147/57 123/150/58 63/151/58
-f 63/151/58 62/148/57 122/147/57
-f 123/152/59 124/153/59 64/154/59
-f 64/154/59 63/155/59 123/152/59
-f 124/153/60 125/142/60 65/156/60
-f 65/156/60 64/154/60 124/153/60
-f 125/142/61 126/157/62 66/158/61
-f 66/158/61 65/156/62 125/142/61
-f 126/157/63 127/159/63 67/160/63
-f 67/160/63 66/158/63 126/157/63
-f 127/159/64 128/161/64 68/162/64
-f 68/162/64 67/160/64 127/159/64
-f 128/161/65 129/163/66 69/164/66
-f 69/164/66 68/162/66 128/161/65
-f 129/163/67 130/165/67 70/166/67
-f 70/166/67 69/164/67 129/163/67
-f 130/165/68 131/167/68 71/168/68
-f 71/168/68 70/166/68 130/165/68
-f 131/167/69 132/169/70 72/170/70
-f 72/170/70 71/168/70 131/167/69
-f 132/169/71 121/146/71 61/149/71
-f 61/149/71 72/170/71 132/169/71
-f 74/171/1 73/172/2 122/173/2
-f 122/173/2 121/174/1 74/171/1
-f 73/172/2 77/175/3 123/176/3
-f 123/176/3 122/173/2 73/172/2
-f 77/177/3 79/178/4 124/179/4
-f 124/179/4 123/180/3 77/177/3
-f 79/178/4 81/86/5 125/181/5
-f 125/181/5 124/179/4 79/178/4
-f 81/86/5 83/182/6 126/183/6
-f 126/183/6 125/181/5 81/86/5
-f 83/182/6 85/184/7 127/185/7
-f 127/185/7 126/183/6 83/182/6
-f 85/184/7 87/186/8 128/187/8
-f 128/187/8 127/185/7 85/184/7
-f 87/186/8 89/188/9 129/189/9
-f 129/189/9 128/187/8 87/186/8
-f 89/188/9 91/190/10 130/191/10
-f 130/191/10 129/189/9 89/188/9
-f 91/190/10 93/76/11 131/192/11
-f 131/192/11 130/191/10 91/190/10
-f 93/76/11 95/193/12 132/194/12
-f 132/194/12 131/192/11 93/76/11
-f 95/193/12 74/171/1 121/174/1
-f 121/174/1 132/194/12 95/193/12
-f 133/195/72 134/196/72 135/197/72
-f 135/197/72 136/198/72 133/195/72
-f 137/199/73 138/200/73 139/201/73
-f 139/201/73 140/202/73 137/199/73
-f 141/203/74 142/204/74 143/205/74
-f 143/205/74 144/206/74 141/203/74
-f 145/202/75 146/201/75 147/200/75
-f 147/200/75 148/199/75 145/202/75
-f 149/207/76 150/207/76 151/208/76
-f 151/208/76 152/209/76 149/207/76
-f 153/209/77 154/210/77 155/211/77
-f 142/212/78 156/196/78 157/213/78
-f 157/213/78 143/214/78 142/212/78
-f 158/210/79 159/209/79 160/211/79
-f 161/215/80 162/216/80 160/211/80
-f 160/211/80 159/209/80 161/215/80
-f 163/217/81 164/218/81 135/197/81
-f 135/197/81 134/196/81 163/217/81
-f 165/219/82 166/220/82 142/204/82
-f 142/204/82 141/203/82 165/219/82
-f 167/209/83 168/208/83 150/207/83
-f 150/207/83 149/207/83 167/209/83
-f 142/212/84 166/214/84 169/213/84
-f 169/213/84 156/196/84 142/212/84
-f 161/215/85 153/209/85 155/211/85
-f 155/211/85 162/216/85 161/215/85
-f 170/221/75 157/222/75 133/222/75
-f 133/222/75 136/221/75 170/221/75
-f 157/222/86 156/203/86 134/203/86
-f 134/203/86 133/222/86 157/222/86
-f 156/203/87 169/206/87 163/206/87
-f 163/206/87 134/203/87 156/203/87
-f 169/206/73 171/223/73 164/223/73
-f 164/223/73 163/206/73 169/206/73
-f 171/224/88 172/225/88 135/226/88
-f 135/226/88 164/224/88 171/224/88
-f 172/225/89 170/224/89 136/224/89
-f 136/224/89 135/226/89 172/225/89
-f 166/214/79 173/227/79 171/228/79
-f 171/228/79 169/213/79 166/214/79
-f 173/229/75 166/220/75 165/219/75
-f 165/219/75 174/221/75 173/229/75
-f 144/206/73 143/205/73 175/230/73
-f 175/230/73 176/223/73 144/206/73
-f 175/227/77 143/214/77 157/213/77
-f 157/213/77 170/228/77 175/227/77
-f 139/201/73 138/200/73 177/199/73
-f 177/199/73 178/202/73 139/201/73
-f 175/231/90 170/224/90 155/232/90
-f 155/232/90 154/233/91 175/231/90
-f 170/224/89 172/225/89 162/234/89
-f 162/234/89 155/232/89 170/224/89
-f 172/225/88 171/224/88 160/232/88
-f 160/232/88 162/234/88 172/225/88
-f 171/224/92 173/231/92 158/233/92
-f 158/233/92 160/232/92 171/224/92
-f 147/200/75 146/201/75 179/202/75
-f 179/202/75 180/199/75 147/200/75
-f 151/208/76 150/207/76 161/235/76
-f 161/235/76 159/236/76 151/208/76
-f 150/207/83 168/208/83 153/236/83
-f 153/236/83 161/235/83 150/207/83
-f 176/236/27 175/231/27 138/237/27
-f 138/237/27 137/238/27 176/236/27
-f 175/231/27 154/233/27 177/239/27
-f 177/239/27 138/237/27 175/231/27
-f 154/210/93 153/209/93 178/240/94
-f 178/240/94 177/241/94 154/210/93
-f 153/236/26 168/208/26 139/242/26
-f 139/242/26 178/238/26 153/236/26
-f 168/208/26 167/209/26 140/240/26
-f 140/240/26 139/242/26 168/208/26
-f 152/209/26 151/208/26 146/242/26
-f 146/242/26 145/240/26 152/209/26
-f 151/208/26 159/236/26 179/238/26
-f 179/238/26 146/242/26 151/208/26
-f 159/209/95 158/210/95 180/241/95
-f 180/241/95 179/240/95 159/209/95
-f 158/233/27 173/231/27 147/237/27
-f 147/237/27 180/239/27 158/233/27
-f 173/231/27 174/236/27 148/238/27
-f 148/238/27 147/237/27 173/231/27
-f 181/195/96 182/196/96 183/197/96
-f 183/197/96 184/198/96 181/195/96
-f 185/199/97 186/200/98 187/201/98
-f 187/201/98 188/202/97 185/199/97
-f 189/203/99 190/204/99 191/205/99
-f 191/205/99 192/206/99 189/203/99
-f 193/202/100 194/201/101 195/200/101
-f 195/200/101 196/199/100 193/202/100
-f 197/207/102 198/207/102 199/208/102
-f 199/208/102 200/209/102 197/207/102
-f 201/209/103 202/210/103 203/211/103
-f 190/212/104 204/196/104 205/213/104
-f 205/213/104 191/214/104 190/212/104
-f 206/210/105 207/209/105 208/211/105
-f 209/215/106 210/216/106 208/211/106
-f 208/211/106 207/209/106 209/215/106
-f 211/217/107 212/218/107 183/197/107
-f 183/197/107 182/196/107 211/217/107
-f 213/219/108 214/220/108 190/204/108
-f 190/204/108 189/203/108 213/219/108
-f 215/209/109 216/208/109 198/207/109
-f 198/207/109 197/207/109 215/209/109
-f 190/212/110 214/214/110 217/213/110
-f 217/213/110 204/196/110 190/212/110
-f 209/215/111 201/209/111 203/211/111
-f 203/211/111 210/216/111 209/215/111
-f 218/221/100 205/222/100 181/222/101
-f 181/222/101 184/221/101 218/221/100
-f 205/222/112 204/203/112 182/203/112
-f 182/203/112 181/222/112 205/222/112
-f 204/203/113 217/206/113 211/206/113
-f 211/206/113 182/203/113 204/203/113
-f 217/206/98 219/223/98 212/223/98
-f 212/223/98 211/206/98 217/206/98
-f 219/224/114 220/225/114 183/226/114
-f 183/226/114 212/224/114 219/224/114
-f 220/225/115 218/224/115 184/224/115
-f 184/224/115 183/226/115 220/225/115
-f 214/214/105 221/227/105 219/228/105
-f 219/228/105 217/213/105 214/214/105
-f 221/229/100 214/220/100 213/219/100
-f 213/219/100 222/221/100 221/229/100
-f 192/206/98 191/205/98 223/230/98
-f 223/230/98 224/223/98 192/206/98
-f 223/227/103 191/214/103 205/213/103
-f 205/213/103 218/228/103 223/227/103
-f 187/201/98 186/200/98 225/199/97
-f 225/199/97 226/202/97 187/201/98
-f 223/231/116 218/224/116 203/232/116
-f 203/232/116 202/233/116 223/231/116
-f 218/224/115 220/225/115 210/234/115
-f 210/234/115 203/232/115 218/224/115
-f 220/225/114 219/224/114 208/232/114
-f 208/232/114 210/234/114 220/225/114
-f 219/224/117 221/231/117 206/233/117
-f 206/233/117 208/232/117 219/224/117
-f 195/200/101 194/201/101 227/202/100
-f 227/202/100 228/199/100 195/200/101
-f 199/208/102 198/207/102 209/235/102
-f 209/235/102 207/236/102 199/208/102
-f 198/207/109 216/208/109 201/236/109
-f 201/236/109 209/235/109 198/207/109
-f 224/236/27 223/231/27 186/237/27
-f 186/237/27 185/238/27 224/236/27
-f 223/231/27 202/233/27 225/239/27
-f 225/239/27 186/237/27 223/231/27
-f 202/210/118 201/209/118 226/240/118
-f 226/240/118 225/241/118 202/210/118
-f 201/236/26 216/208/26 187/242/26
-f 187/242/26 226/238/26 201/236/26
-f 216/208/26 215/209/26 188/240/26
-f 188/240/26 187/242/26 216/208/26
-f 200/209/26 199/208/26 194/242/26
-f 194/242/26 193/240/26 200/209/26
-f 199/208/26 207/236/26 227/238/26
-f 227/238/26 194/242/26 199/208/26
-f 207/209/119 206/210/119 228/241/119
-f 228/241/119 227/240/119 207/209/119
-f 206/233/27 221/231/27 195/237/27
-f 195/237/27 228/239/27 206/233/27
-f 221/231/27 222/236/27 196/238/27
-f 196/238/27 195/237/27 221/231/27
-f 229/243/120 230/244/120 231/245/120
-f 231/245/120 232/246/120 229/243/120
-f 229/247/121 232/248/121 233/249/121
-f 233/249/121 234/250/121 229/247/121
-f 232/246/122 231/245/122 235/251/122
-f 235/251/122 233/252/122 232/246/122
-f 231/248/123 230/247/123 236/250/123
-f 236/250/123 235/249/123 231/248/123
-f 237/195/124 238/196/124 239/197/124
-f 239/197/124 240/198/124 237/195/124
-f 241/199/125 242/200/98 243/201/98
-f 243/201/98 244/202/125 241/199/125
-f 245/203/99 246/204/99 247/205/99
-f 247/205/99 248/206/99 245/203/99
-f 249/202/100 250/201/101 251/200/101
-f 251/200/101 252/199/100 249/202/100
-f 253/207/102 254/207/102 255/208/102
-f 255/208/102 256/209/102 253/207/102
-f 257/209/103 258/210/103 259/211/103
-f 246/212/104 260/196/104 261/213/104
-f 261/213/104 247/214/104 246/212/104
-f 262/210/105 263/209/105 264/211/105
-f 265/215/106 266/216/106 264/211/106
-f 264/211/106 263/209/106 265/215/106
-f 267/217/107 268/218/107 239/197/107
-f 239/197/107 238/196/107 267/217/107
-f 269/219/126 270/220/126 246/204/108
-f 246/204/108 245/203/108 269/219/126
-f 271/209/109 272/208/109 254/207/109
-f 254/207/109 253/207/109 271/209/109
-f 246/212/110 270/214/110 273/213/110
-f 273/213/110 260/196/110 246/212/110
-f 265/215/111 257/209/111 259/211/111
-f 259/211/111 266/216/111 265/215/111
-f 274/221/100 261/222/100 237/222/100
-f 237/222/100 240/221/100 274/221/100
-f 261/222/112 260/203/112 238/203/112
-f 238/203/112 237/222/112 261/222/112
-f 260/203/113 273/206/113 267/206/113
-f 267/206/113 238/203/113 260/203/113
-f 273/206/98 275/223/98 268/223/98
-f 268/223/98 267/206/98 273/206/98
-f 275/224/114 276/225/114 239/226/114
-f 239/226/114 268/224/114 275/224/114
-f 276/225/115 274/224/115 240/224/115
-f 240/224/115 239/226/115 276/225/115
-f 270/214/105 277/227/105 275/228/105
-f 275/228/105 273/213/105 270/214/105
-f 277/229/101 270/220/101 269/219/101
-f 269/219/101 278/221/101 277/229/101
-f 248/206/98 247/205/97 279/230/97
-f 279/230/97 280/223/98 248/206/98
-f 279/227/103 247/214/103 261/213/103
-f 261/213/103 274/228/103 279/227/103
-f 243/201/98 242/200/98 281/199/97
-f 281/199/97 282/202/97 243/201/98
-f 279/231/116 274/224/116 259/232/116
-f 259/232/116 258/233/116 279/231/116
-f 274/224/115 276/225/115 266/234/115
-f 266/234/115 259/232/115 274/224/115
-f 276/225/114 275/224/114 264/232/114
-f 264/232/114 266/234/114 276/225/114
-f 275/224/117 277/231/117 262/233/117
-f 262/233/117 264/232/117 275/224/117
-f 251/200/101 250/201/101 283/202/100
-f 283/202/100 284/199/100 251/200/101
-f 255/208/102 254/207/102 265/235/102
-f 265/235/102 263/236/102 255/208/102
-f 254/207/109 272/208/109 257/236/109
-f 257/236/109 265/235/109 254/207/109
-f 280/236/27 279/231/27 242/237/27
-f 242/237/27 241/238/27 280/236/27
-f 279/231/27 258/233/27 281/239/27
-f 281/239/27 242/237/27 279/231/27
-f 258/210/118 257/209/118 282/240/118
-f 282/240/118 281/241/118 258/210/118
-f 257/236/26 272/208/26 243/242/26
-f 243/242/26 282/238/26 257/236/26
-f 272/208/26 271/209/26 244/240/26
-f 244/240/26 243/242/26 272/208/26
-f 256/209/26 255/208/26 250/242/26
-f 250/242/26 249/240/26 256/209/26
-f 255/208/26 263/236/26 283/238/26
-f 283/238/26 250/242/26 255/208/26
-f 263/209/119 262/210/119 284/241/119
-f 284/241/119 283/240/119 263/209/119
-f 262/233/27 277/231/27 251/237/27
-f 251/237/27 284/239/27 262/233/27
-f 277/231/27 278/236/27 252/238/27
-f 252/238/27 251/237/27 277/231/27
-f 285/243/127 286/244/127 287/245/127
-f 287/245/127 288/246/127 285/243/127
-f 285/247/128 288/248/128 289/249/128
-f 289/249/128 290/250/128 285/247/128
-f 288/246/129 287/245/129 291/251/129
-f 291/251/129 289/252/129 288/246/129
-f 287/248/130 286/247/130 292/250/130
-f 292/250/130 291/249/130 287/248/130
-f 293/195/131 294/196/131 295/197/131
-f 295/197/131 296/198/131 293/195/131
-f 297/199/75 298/200/75 299/201/75
-f 299/201/75 300/202/75 297/199/75
-f 301/203/132 302/204/132 303/205/132
-f 303/205/132 304/206/132 301/203/132
-f 305/202/73 306/201/73 307/200/73
-f 307/200/73 308/199/73 305/202/73
-f 309/207/83 310/207/83 311/208/83
-f 311/208/83 312/209/83 309/207/83
-f 313/209/133 314/210/133 315/211/133
-f 302/212/134 316/196/134 317/213/134
-f 317/213/134 303/214/134 302/212/134
-f 318/210/135 319/209/135 320/211/135
-f 321/215/136 322/216/136 320/211/136
-f 320/211/136 319/209/136 321/215/136
-f 323/217/137 324/218/137 295/197/138
-f 295/197/138 294/196/138 323/217/137
-f 325/219/139 326/220/139 302/204/139
-f 302/204/139 301/203/139 325/219/139
-f 327/209/76 328/208/76 310/207/76
-f 310/207/76 309/207/76 327/209/76
-f 302/212/140 326/214/140 329/213/140
-f 329/213/140 316/196/140 302/212/140
-f 321/215/141 313/209/141 315/211/141
-f 315/211/141 322/216/141 321/215/141
-f 330/221/73 317/222/73 293/222/73
-f 293/222/73 296/221/73 330/221/73
-f 317/222/87 316/203/87 294/203/87
-f 294/203/87 293/222/87 317/222/87
-f 316/203/86 329/206/86 323/206/86
-f 323/206/86 294/203/86 316/203/86
-f 329/206/75 331/223/75 324/223/75
-f 324/223/75 323/206/75 329/206/75
-f 331/224/142 332/225/142 295/226/142
-f 295/226/142 324/224/142 331/224/142
-f 332/225/143 330/224/143 296/224/143
-f 296/224/143 295/226/143 332/225/143
-f 326/214/135 333/227/135 331/228/135
-f 331/228/135 329/213/135 326/214/135
-f 333/229/73 326/220/73 325/219/73
-f 325/219/73 334/221/73 333/229/73
-f 304/206/75 303/205/75 335/230/75
-f 335/230/75 336/223/75 304/206/75
-f 335/227/133 303/214/133 317/213/133
-f 317/213/133 330/228/133 335/227/133
-f 299/201/75 298/200/75 337/199/75
-f 337/199/75 338/202/75 299/201/75
-f 335/231/144 330/224/144 315/232/144
-f 315/232/144 314/233/144 335/231/144
-f 330/224/143 332/225/143 322/234/143
-f 322/234/143 315/232/143 330/224/143
-f 332/225/142 331/224/142 320/232/142
-f 320/232/142 322/234/142 332/225/142
-f 331/224/145 333/231/145 318/233/145
-f 318/233/145 320/232/145 331/224/145
-f 307/200/73 306/201/73 339/202/73
-f 339/202/73 340/199/73 307/200/73
-f 311/208/83 310/207/83 321/235/83
-f 321/235/83 319/236/83 311/208/83
-f 310/207/76 328/208/76 313/236/76
-f 313/236/76 321/235/76 310/207/76
-f 336/236/27 335/231/27 298/237/27
-f 298/237/27 297/238/27 336/236/27
-f 335/231/27 314/233/27 337/239/27
-f 337/239/27 298/237/27 335/231/27
-f 314/210/146 313/209/146 338/240/146
-f 338/240/146 337/241/146 314/210/146
-f 313/236/26 328/208/26 299/242/26
-f 299/242/26 338/238/26 313/236/26
-f 328/208/26 327/209/26 300/240/26
-f 300/240/26 299/242/26 328/208/26
-f 312/209/26 311/208/26 306/242/26
-f 306/242/26 305/240/26 312/209/26
-f 311/208/26 319/236/26 339/238/26
-f 339/238/26 306/242/26 311/208/26
-f 319/209/147 318/210/147 340/241/147
-f 340/241/147 339/240/147 319/209/147
-f 318/233/27 333/231/27 307/237/27
-f 307/237/27 340/239/27 318/233/27
-f 333/231/27 334/236/27 308/238/27
-f 308/238/27 307/237/27 333/231/27
-f 341/243/148 342/244/148 343/245/148
-f 343/245/148 344/246/148 341/243/148
-f 341/247/1 344/248/1 345/249/1
-f 345/249/1 346/250/1 341/247/1
-f 344/246/149 343/245/149 347/251/149
-f 347/251/149 345/252/149 344/246/149
-f 343/248/7 342/247/7 348/250/7
-f 348/250/7 347/249/7 343/248/7
-f 349/243/150 350/244/150 351/245/150
-f 351/245/150 352/246/150 349/243/150
-f 349/247/151 352/248/151 353/249/151
-f 353/249/151 354/250/151 349/247/151
-f 352/246/152 351/245/152 355/251/152
-f 355/251/152 353/252/152 352/246/152
-f 351/248/153 350/247/153 356/250/153
-f 356/250/153 355/249/153 351/248/153
-f 357/243/154 358/244/154 359/245/154
-f 359/245/154 360/246/154 357/243/154
-f 357/247/7 360/248/7 361/249/7
-f 361/249/7 362/250/7 357/247/7
-f 360/246/155 359/245/155 363/251/155
-f 363/251/155 361/252/155 360/246/155
-f 359/248/1 358/247/1 364/250/1
-f 364/250/1 363/249/1 359/248/1
-f 365/243/156 366/244/156 367/245/156
-f 367/245/156 368/246/156 365/243/156
-f 365/247/157 368/248/157 369/249/157
-f 369/249/157 370/250/157 365/247/157
-f 368/246/158 367/245/158 371/251/158
-f 371/251/158 369/252/158 368/246/158
-f 367/248/159 366/247/159 372/250/159
-f 372/250/159 371/249/159 367/248/159
-f 373/243/160 374/244/160 375/245/160
-f 375/245/160 376/246/160 373/243/160
-f 373/247/161 376/248/161 377/249/161
-f 377/249/161 378/250/161 373/247/161
-f 376/246/162 375/245/162 379/251/162
-f 379/251/162 377/252/162 376/246/162
-f 375/248/163 374/247/163 380/250/163
-f 380/250/163 379/249/163 375/248/163
-f 381/195/131 382/196/131 383/197/131
-f 383/197/131 384/198/131 381/195/131
-f 385/199/75 386/200/75 387/201/75
-f 387/201/75 388/202/75 385/199/75
-f 389/203/132 390/204/132 391/205/132
-f 391/205/132 392/206/132 389/203/132
-f 393/202/73 394/201/73 395/200/73
-f 395/200/73 396/199/73 393/202/73
-f 397/207/83 398/207/83 399/208/83
-f 399/208/83 400/209/83 397/207/83
-f 401/209/133 402/210/133 403/211/133
-f 390/212/134 404/196/134 405/213/134
-f 405/213/134 391/214/134 390/212/134
-f 406/210/135 407/209/135 408/211/135
-f 409/215/136 410/216/136 408/211/136
-f 408/211/136 407/209/136 409/215/136
-f 411/217/137 412/218/137 383/197/138
-f 383/197/138 382/196/138 411/217/137
-f 413/219/139 414/220/139 390/204/139
-f 390/204/139 389/203/139 413/219/139
-f 415/209/76 416/208/76 398/207/76
-f 398/207/76 397/207/76 415/209/76
-f 390/212/140 414/214/140 417/213/140
-f 417/213/140 404/196/140 390/212/140
-f 409/215/141 401/209/141 403/211/141
-f 403/211/141 410/216/141 409/215/141
-f 418/221/73 405/222/73 381/222/73
-f 381/222/73 384/221/73 418/221/73
-f 405/222/87 404/203/87 382/203/87
-f 382/203/87 381/222/87 405/222/87
-f 404/203/86 417/206/86 411/206/86
-f 411/206/86 382/203/86 404/203/86
-f 417/206/75 419/223/75 412/223/75
-f 412/223/75 411/206/75 417/206/75
-f 419/224/142 420/225/142 383/226/142
-f 383/226/142 412/224/142 419/224/142
-f 420/225/143 418/224/143 384/224/143
-f 384/224/143 383/226/143 420/225/143
-f 414/214/135 421/227/135 419/228/135
-f 419/228/135 417/213/135 414/214/135
-f 421/229/73 414/220/73 413/219/73
-f 413/219/73 422/221/73 421/229/73
-f 392/206/75 391/205/75 423/230/75
-f 423/230/75 424/223/75 392/206/75
-f 423/227/133 391/214/133 405/213/133
-f 405/213/133 418/228/133 423/227/133
-f 387/201/75 386/200/75 425/199/75
-f 425/199/75 426/202/75 387/201/75
-f 423/231/144 418/224/144 403/232/144
-f 403/232/144 402/233/144 423/231/144
-f 418/224/143 420/225/143 410/234/143
-f 410/234/143 403/232/143 418/224/143
-f 420/225/142 419/224/142 408/232/142
-f 408/232/142 410/234/142 420/225/142
-f 419/224/145 421/231/145 406/233/145
-f 406/233/145 408/232/145 419/224/145
-f 395/200/73 394/201/73 427/202/73
-f 427/202/73 428/199/73 395/200/73
-f 399/208/83 398/207/83 409/235/83
-f 409/235/83 407/236/83 399/208/83
-f 398/207/76 416/208/76 401/236/76
-f 401/236/76 409/235/76 398/207/76
-f 424/236/27 423/231/27 386/237/27
-f 386/237/27 385/238/27 424/236/27
-f 423/231/27 402/233/27 425/239/27
-f 425/239/27 386/237/27 423/231/27
-f 402/210/146 401/209/146 426/240/146
-f 426/240/146 425/241/146 402/210/146
-f 401/236/26 416/208/26 387/242/26
-f 387/242/26 426/238/26 401/236/26
-f 416/208/26 415/209/26 388/240/26
-f 388/240/26 387/242/26 416/208/26
-f 400/209/26 399/208/26 394/242/26
-f 394/242/26 393/240/26 400/209/26
-f 399/208/26 407/236/26 427/238/26
-f 427/238/26 394/242/26 399/208/26
-f 407/209/147 406/210/147 428/241/147
-f 428/241/147 427/240/147 407/209/147
-f 406/233/27 421/231/27 395/237/27
-f 395/237/27 428/239/27 406/233/27
-f 421/231/27 422/236/27 396/238/27
-f 396/238/27 395/237/27 421/231/27
-f 429/195/164 430/196/10 431/197/10
-f 431/197/10 432/198/164 429/195/164
-f 433/199/165 434/200/165 435/201/165
-f 435/201/165 436/202/165 433/199/165
-f 437/203/108 438/204/108 439/205/108
-f 439/205/108 440/206/108 437/203/108
-f 441/202/125 442/201/125 443/200/125
-f 443/200/125 444/199/125 441/202/125
-f 445/207/166 446/207/166 447/208/166
-f 447/208/166 448/209/166 445/207/166
-f 449/209/167 450/210/167 451/211/167
-f 438/212/168 452/196/168 453/213/168
-f 453/213/168 439/214/168 438/212/168
-f 454/210/169 455/209/169 456/211/169
-f 457/215/170 458/216/170 456/211/170
-f 456/211/170 455/209/170 457/215/170
-f 459/217/171 460/218/171 431/197/171
-f 431/197/171 430/196/171 459/217/171
-f 461/219/172 462/220/99 438/204/99
-f 438/204/99 437/203/99 461/219/172
-f 463/209/173 464/208/173 446/207/173
-f 446/207/173 445/207/173 463/209/173
-f 438/212/174 462/214/174 465/213/174
-f 465/213/174 452/196/174 438/212/174
-f 457/215/175 449/209/175 451/211/175
-f 451/211/175 458/216/175 457/215/175
-f 466/221/125 453/222/125 429/222/125
-f 429/222/125 432/221/125 466/221/125
-f 453/222/113 452/203/113 430/203/113
-f 430/203/113 429/222/113 453/222/113
-f 452/203/112 465/206/112 459/206/112
-f 459/206/112 430/203/112 452/203/112
-f 465/206/165 467/223/165 460/223/165
-f 460/223/165 459/206/165 465/206/165
-f 467/224/176 468/225/176 431/226/176
-f 431/226/176 460/224/176 467/224/176
-f 468/225/117 466/224/117 432/224/117
-f 432/224/117 431/226/117 468/225/117
-f 462/214/169 469/227/169 467/228/169
-f 467/228/169 465/213/169 462/214/169
-f 469/229/125 462/220/125 461/219/125
-f 461/219/125 470/221/125 469/229/125
-f 440/206/165 439/205/165 471/230/165
-f 471/230/165 472/223/165 440/206/165
-f 471/227/167 439/214/167 453/213/167
-f 453/213/167 466/228/167 471/227/167
-f 435/201/165 434/200/165 473/199/165
-f 473/199/165 474/202/165 435/201/165
-f 471/231/177 466/224/177 451/232/177
-f 451/232/177 450/233/177 471/231/177
-f 466/224/117 468/225/117 458/234/117
-f 458/234/117 451/232/117 466/224/117
-f 468/225/176 467/224/176 456/232/176
-f 456/232/176 458/234/176 468/225/176
-f 467/224/115 469/231/115 454/233/115
-f 454/233/115 456/232/115 467/224/115
-f 443/200/125 442/201/125 475/202/125
-f 475/202/125 476/199/125 443/200/125
-f 447/208/166 446/207/166 457/235/166
-f 457/235/166 455/236/166 447/208/166
-f 446/207/173 464/208/173 449/236/173
-f 449/236/173 457/235/173 446/207/173
-f 472/236/27 471/231/27 434/237/27
-f 434/237/27 433/238/27 472/236/27
-f 471/231/27 450/233/27 473/239/27
-f 473/239/27 434/237/27 471/231/27
-f 450/210/178 449/209/178 474/240/178
-f 474/240/178 473/241/178 450/210/178
-f 449/236/26 464/208/26 435/242/26
-f 435/242/26 474/238/26 449/236/26
-f 464/208/26 463/209/26 436/240/26
-f 436/240/26 435/242/26 464/208/26
-f 448/209/26 447/208/26 442/242/26
-f 442/242/26 441/240/26 448/209/26
-f 447/208/26 455/236/26 475/238/26
-f 475/238/26 442/242/26 447/208/26
-f 455/209/179 454/210/179 476/241/179
-f 476/241/179 475/240/179 455/209/179
-f 454/233/27 469/231/27 443/237/27
-f 443/237/27 476/239/27 454/233/27
-f 469/231/27 470/236/27 444/238/27
-f 444/238/27 443/237/27 469/231/27
-f 477/243/180 478/244/180 479/245/180
-f 479/245/180 480/246/180 477/243/180
-f 477/247/153 480/248/153 481/249/153
-f 481/249/153 482/250/153 477/247/153
-f 480/246/181 479/245/181 483/251/181
-f 483/251/181 481/252/182 480/246/181
-f 479/248/151 478/247/151 484/250/151
-f 484/250/151 483/249/151 479/248/151
-f 485/195/10 486/196/10 487/197/10
-f 487/197/10 488/198/10 485/195/10
-f 489/199/165 490/200/165 491/201/165
-f 491/201/165 492/202/165 489/199/165
-f 493/203/108 494/204/108 495/205/108
-f 495/205/108 496/206/108 493/203/108
-f 497/202/125 498/201/125 499/200/125
-f 499/200/125 500/199/125 497/202/125
-f 501/207/166 502/207/166 503/208/166
-f 503/208/166 504/209/166 501/207/166
-f 505/209/167 506/210/167 507/211/167
-f 494/212/168 508/196/168 509/213/168
-f 509/213/168 495/214/168 494/212/168
-f 510/210/169 511/209/169 512/211/169
-f 513/215/170 514/216/170 512/211/170
-f 512/211/170 511/209/170 513/215/170
-f 515/217/171 516/218/171 487/197/171
-f 487/197/171 486/196/171 515/217/171
-f 517/219/99 518/220/99 494/204/172
-f 494/204/172 493/203/99 517/219/99
-f 519/209/173 520/208/173 502/207/173
-f 502/207/173 501/207/173 519/209/173
-f 494/212/174 518/214/174 521/213/174
-f 521/213/174 508/196/174 494/212/174
-f 513/215/175 505/209/175 507/211/175
-f 507/211/175 514/216/175 513/215/175
-f 522/221/125 509/222/125 485/222/125
-f 485/222/125 488/221/125 522/221/125
-f 509/222/113 508/203/113 486/203/113
-f 486/203/113 485/222/113 509/222/113
-f 508/203/112 521/206/112 515/206/112
-f 515/206/112 486/203/112 508/203/112
-f 521/206/165 523/223/165 516/223/165
-f 516/223/165 515/206/165 521/206/165
-f 523/224/176 524/225/176 487/226/176
-f 487/226/176 516/224/176 523/224/176
-f 524/225/117 522/224/117 488/224/117
-f 488/224/117 487/226/117 524/225/117
-f 518/214/169 525/227/169 523/228/169
-f 523/228/169 521/213/169 518/214/169
-f 525/229/125 518/220/125 517/219/125
-f 517/219/125 526/221/125 525/229/125
-f 496/206/165 495/205/165 527/230/165
-f 527/230/165 528/223/165 496/206/165
-f 527/227/167 495/214/167 509/213/167
-f 509/213/167 522/228/167 527/227/167
-f 491/201/165 490/200/165 529/199/165
-f 529/199/165 530/202/165 491/201/165
-f 527/231/177 522/224/177 507/232/177
-f 507/232/177 506/233/177 527/231/177
-f 522/224/117 524/225/117 514/234/117
-f 514/234/117 507/232/117 522/224/117
-f 524/225/176 523/224/176 512/232/176
-f 512/232/176 514/234/176 524/225/176
-f 523/224/115 525/231/115 510/233/115
-f 510/233/115 512/232/115 523/224/115
-f 499/200/125 498/201/125 531/202/125
-f 531/202/125 532/199/125 499/200/125
-f 503/208/166 502/207/166 513/235/166
-f 513/235/166 511/236/166 503/208/166
-f 502/207/173 520/208/173 505/236/173
-f 505/236/173 513/235/173 502/207/173
-f 528/236/27 527/231/27 490/237/27
-f 490/237/27 489/238/27 528/236/27
-f 527/231/27 506/233/27 529/239/27
-f 529/239/27 490/237/27 527/231/27
-f 506/210/178 505/209/178 530/240/178
-f 530/240/178 529/241/178 506/210/178
-f 505/236/26 520/208/26 491/242/26
-f 491/242/26 530/238/26 505/236/26
-f 520/208/26 519/209/26 492/240/26
-f 492/240/26 491/242/26 520/208/26
-f 504/209/26 503/208/26 498/242/26
-f 498/242/26 497/240/26 504/209/26
-f 503/208/26 511/236/26 531/238/26
-f 531/238/26 498/242/26 503/208/26
-f 511/209/179 510/210/179 532/241/179
-f 532/241/179 531/240/179 511/209/179
-f 510/233/27 525/231/27 499/237/27
-f 499/237/27 532/239/27 510/233/27
-f 525/231/27 526/236/27 500/238/27
-f 500/238/27 499/237/27 525/231/27
-f 533/243/183 534/244/183 535/245/183
-f 535/245/183 536/246/183 533/243/183
-f 533/247/184 536/248/184 537/249/184
-f 537/249/184 538/250/184 533/247/184
-f 536/246/185 535/245/185 539/251/185
-f 539/251/185 537/252/185 536/246/185
-f 535/248/186 534/247/186 540/250/186
-f 540/250/186 539/249/186 535/248/186
-f 541/195/72 542/196/72 543/197/72
-f 543/197/72 544/198/72 541/195/72
-f 545/199/73 546/200/73 547/201/73
-f 547/201/73 548/202/73 545/199/73
-f 549/203/74 550/204/74 551/205/74
-f 551/205/74 552/206/74 549/203/74
-f 553/202/75 554/201/75 555/200/75
-f 555/200/75 556/199/75 553/202/75
-f 557/207/76 558/207/76 559/208/76
-f 559/208/76 560/209/76 557/207/76
-f 561/209/77 562/210/77 563/211/77
-f 550/212/78 564/196/78 565/213/78
-f 565/213/78 551/214/78 550/212/78
-f 566/210/79 567/209/79 568/211/79
-f 569/215/80 570/216/80 568/211/80
-f 568/211/80 567/209/80 569/215/80
-f 571/217/81 572/218/81 543/197/81
-f 543/197/81 542/196/81 571/217/81
-f 573/219/82 574/220/82 550/204/82
-f 550/204/82 549/203/82 573/219/82
-f 575/209/83 576/208/83 558/207/83
-f 558/207/83 557/207/83 575/209/83
-f 550/212/84 574/214/84 577/213/84
-f 577/213/84 564/196/84 550/212/84
-f 569/215/85 561/209/85 563/211/85
-f 563/211/85 570/216/85 569/215/85
-f 578/221/75 565/222/75 541/222/75
-f 541/222/75 544/221/75 578/221/75
-f 565/222/86 564/203/86 542/203/86
-f 542/203/86 541/222/86 565/222/86
-f 564/203/87 577/206/87 571/206/87
-f 571/206/87 542/203/87 564/203/87
-f 577/206/73 579/223/73 572/223/73
-f 572/223/73 571/206/73 577/206/73
-f 579/224/88 580/225/88 543/226/88
-f 543/226/88 572/224/88 579/224/88
-f 580/225/89 578/224/89 544/224/89
-f 544/224/89 543/226/89 580/225/89
-f 574/214/79 581/227/79 579/228/79
-f 579/228/79 577/213/79 574/214/79
-f 581/229/75 574/220/75 573/219/75
-f 573/219/75 582/221/75 581/229/75
-f 552/206/73 551/205/73 583/230/73
-f 583/230/73 584/223/73 552/206/73
-f 583/227/77 551/214/77 565/213/77
-f 565/213/77 578/228/77 583/227/77
-f 547/201/73 546/200/73 585/199/73
-f 585/199/73 586/202/73 547/201/73
-f 583/231/90 578/224/90 563/232/90
-f 563/232/90 562/233/90 583/231/90
-f 578/224/89 580/225/89 570/234/89
-f 570/234/89 563/232/89 578/224/89
-f 580/225/88 579/224/88 568/232/88
-f 568/232/88 570/234/88 580/225/88
-f 579/224/92 581/231/92 566/233/92
-f 566/233/92 568/232/92 579/224/92
-f 555/200/75 554/201/75 587/202/75
-f 587/202/75 588/199/75 555/200/75
-f 559/208/76 558/207/76 569/235/76
-f 569/235/76 567/236/76 559/208/76
-f 558/207/83 576/208/83 561/236/83
-f 561/236/83 569/235/83 558/207/83
-f 584/236/27 583/231/27 546/237/27
-f 546/237/27 545/238/27 584/236/27
-f 583/231/27 562/233/27 585/239/27
-f 585/239/27 546/237/27 583/231/27
-f 562/210/94 561/209/94 586/240/94
-f 586/240/94 585/241/94 562/210/94
-f 561/236/26 576/208/26 547/242/26
-f 547/242/26 586/238/26 561/236/26
-f 576/208/26 575/209/26 548/240/26
-f 548/240/26 547/242/26 576/208/26
-f 560/209/26 559/208/26 554/242/26
-f 554/242/26 553/240/26 560/209/26
-f 559/208/26 567/236/26 587/238/26
-f 587/238/26 554/242/26 559/208/26
-f 567/209/95 566/210/95 588/241/95
-f 588/241/95 587/240/95 567/209/95
-f 566/233/27 581/231/27 555/237/27
-f 555/237/27 588/239/27 566/233/27
-f 581/231/27 582/236/27 556/238/27
-f 556/238/27 555/237/27 581/231/27
-f 589/243/187 590/244/187 591/245/187
-f 591/245/187 592/246/187 589/243/187
-f 589/247/163 592/248/163 593/249/163
-f 593/249/163 594/250/163 589/247/163
-f 592/246/188 591/245/188 595/251/189
-f 595/251/189 593/252/188 592/246/188
-f 591/248/161 590/247/161 596/250/161
-f 596/250/161 595/249/161 591/248/161
-f 597/253/13 598/254/13 599/255/13
-f 599/255/13 600/256/13 597/253/13
-f 601/257/14 597/253/14 600/256/14
-f 600/256/14 602/258/14 601/257/14
-f 603/259/118 601/257/118 602/258/118
-f 602/258/118 604/260/15 603/259/118
-f 605/261/16 603/262/16 604/263/16
-f 604/263/16 606/264/16 605/261/16
-f 607/265/17 605/261/17 606/264/17
-f 606/264/17 608/266/17 607/265/17
-f 609/267/18 607/265/18 608/266/18
-f 608/266/18 610/268/18 609/267/18
-f 611/269/190 609/267/19 610/268/19
-f 610/268/19 612/270/190 611/269/190
-f 613/271/20 611/269/20 612/270/20
-f 612/270/20 614/272/20 613/271/20
-f 615/273/21 613/271/21 614/272/21
-f 614/272/21 616/274/21 615/273/21
-f 617/275/191 615/273/191 616/274/22
-f 616/274/22 618/276/191 617/275/191
-f 619/277/23 617/275/23 618/276/23
-f 618/276/23 620/278/23 619/277/23
-f 598/254/24 619/277/25 620/278/25
-f 620/278/25 599/255/24 598/254/24
-f 600/279/27 599/280/27 621/281/27
-f 621/281/27 622/282/27 600/279/27
-f 623/283/27 624/279/27 625/282/27
-f 625/282/27 626/284/27 623/283/27
-f 604/285/27 602/283/27 627/284/27
-f 627/284/27 628/285/27 604/285/27
-f 629/286/27 630/285/27 631/285/27
-f 631/285/27 632/287/27 629/286/27
-f 608/288/27 606/286/27 633/287/27
-f 633/287/27 634/289/27 608/288/27
-f 635/290/27 636/288/27 637/289/27
-f 637/289/27 638/291/27 635/290/27
-f 612/292/27 610/290/27 639/291/27
-f 639/291/27 640/293/27 612/292/27
-f 641/294/27 642/292/27 643/293/27
-f 643/293/27 644/295/27 641/294/27
-f 616/296/27 614/294/27 645/295/27
-f 645/295/27 646/297/27 616/296/27
-f 647/298/27 648/296/27 649/297/27
-f 649/297/27 650/299/27 647/298/27
-f 620/300/27 618/298/27 651/299/27
-f 651/299/27 652/300/27 620/300/27
-f 653/280/27 654/300/27 655/300/27
-f 655/300/27 656/281/27 653/280/27
-f 622/301/19 621/302/19 657/303/19
-f 657/303/19 658/304/19 622/301/19
-f 627/305/20 622/301/20 658/304/20
-f 658/304/20 659/306/20 627/305/20
-f 628/307/21 627/305/21 659/306/21
-f 659/306/21 660/308/21 628/307/21
-f 633/309/22 628/307/22 660/308/22
-f 660/308/22 661/310/22 633/309/22
-f 634/311/23 633/309/23 661/310/23
-f 661/310/23 662/312/23 634/311/23
-f 639/313/24 634/311/24 662/312/24
-f 662/312/24 663/314/24 639/313/24
-f 640/315/192 639/313/13 663/314/13
-f 663/314/13 664/316/192 640/315/192
-f 645/317/14 640/315/14 664/316/14
-f 664/316/14 665/318/14 645/317/14
-f 646/319/15 645/317/15 665/318/15
-f 665/318/15 666/320/15 646/319/15
-f 651/321/16 646/322/16 666/323/193
-f 666/323/193 667/324/16 651/321/16
-f 652/325/17 651/321/17 667/324/17
-f 667/324/17 668/326/17 652/325/17
-f 621/302/18 652/325/194 668/326/194
-f 668/326/194 657/303/18 621/302/18
-f 658/327/27 657/328/27 669/329/27
-f 659/330/27 658/327/27 669/329/27
-f 660/331/27 659/330/27 669/329/27
-f 661/332/27 660/331/27 669/329/27
-f 662/333/27 661/332/27 669/329/27
-f 663/334/27 662/333/27 669/329/27
-f 664/335/27 663/334/27 669/329/27
-f 665/336/27 664/335/27 669/329/27
-f 666/337/27 665/336/27 669/329/27
-f 667/338/27 666/337/27 669/329/27
-f 668/339/27 667/338/27 669/329/27
-f 657/328/27 668/339/27 669/329/27
-f 602/258/14 600/256/14 624/340/14
-f 624/340/14 623/341/14 602/258/14
-f 600/279/161 622/282/161 625/282/161
-f 625/282/161 624/279/161 600/279/161
-f 622/301/20 627/305/20 626/342/20
-f 626/342/20 625/343/20 622/301/20
-f 627/284/195 602/283/195 623/283/195
-f 623/283/195 626/284/195 627/284/195
-f 606/264/16 604/263/16 630/344/193
-f 630/344/193 629/345/16 606/264/16
-f 604/285/1 628/285/1 631/285/1
-f 631/285/1 630/285/1 604/285/1
-f 628/307/22 633/309/22 632/346/22
-f 632/346/22 631/347/22 628/307/22
-f 633/287/196 606/286/196 629/286/196
-f 629/286/196 632/287/196 633/287/196
-f 610/268/18 608/266/18 636/348/18
-f 636/348/18 635/349/18 610/268/18
-f 608/288/153 634/289/153 637/289/153
-f 637/289/153 636/288/153 608/288/153
-f 634/311/24 639/313/24 638/350/24
-f 638/350/24 637/351/24 634/311/24
-f 639/291/10 610/290/10 635/290/10
-f 635/290/10 638/291/10 639/291/10
-f 614/272/20 612/270/20 642/352/20
-f 642/352/20 641/353/20 614/272/20
-f 612/292/163 640/293/163 643/293/163
-f 643/293/163 642/292/163 612/292/163
-f 640/315/14 645/317/14 644/354/14
-f 644/354/14 643/355/14 640/315/14
-f 645/295/197 614/294/197 641/294/197
-f 641/294/197 644/295/197 645/295/197
-f 618/276/191 616/274/22 648/356/22
-f 648/356/22 647/357/22 618/276/191
-f 616/296/7 646/297/7 649/297/7
-f 649/297/7 648/296/7 616/296/7
-f 646/322/16 651/321/16 650/358/16
-f 650/358/16 649/359/16 646/322/16
-f 651/299/198 618/298/198 647/298/198
-f 647/298/198 650/299/198 651/299/198
-f 599/255/24 620/278/25 654/360/24
-f 654/360/24 653/361/24 599/255/24
-f 620/300/151 652/300/151 655/300/151
-f 655/300/151 654/300/151 620/300/151
-f 652/325/194 621/302/18 656/362/18
-f 656/362/18 655/363/194 652/325/194
-f 621/281/4 599/280/4 653/280/4
-f 653/280/4 656/281/4 621/281/4
-f 670/364/199 671/365/199 672/366/199
-f 672/366/199 673/367/199 670/364/199
-f 671/368/200 674/369/200 675/370/200
-f 675/370/200 672/371/200 671/368/200
-f 674/365/201 676/364/201 677/367/201
-f 677/367/201 675/366/201 674/365/201
-f 676/372/202 670/373/202 673/374/202
-f 673/374/202 677/375/202 676/372/202
-f 678/376/7 679/377/7 680/378/7
-f 680/378/7 681/379/7 678/376/7
-f 679/380/4 682/381/4 683/382/4
-f 683/382/4 680/383/4 679/380/4
-f 684/384/1 685/385/1 686/386/1
-f 686/386/1 687/387/1 684/384/1
-f 688/388/10 678/389/10 681/390/10
-f 681/390/10 689/391/10 688/388/10
-f 676/392/26 674/393/26 683/394/26
-f 683/394/26 689/395/26 676/392/26
-f 683/394/26 674/393/26 671/396/26
-f 671/396/26 680/397/26 683/394/26
-f 680/397/26 671/396/26 670/398/26
-f 670/398/26 681/399/26 680/397/26
-f 681/399/26 670/398/26 676/392/26
-f 676/392/26 689/395/26 681/399/26
-f 673/400/27 672/401/27 690/402/27
-f 690/402/27 691/403/27 673/400/27
-f 672/401/27 675/404/27 692/405/27
-f 692/405/27 690/402/27 672/401/27
-f 675/404/27 677/406/27 693/407/27
-f 693/407/27 692/405/27 675/404/27
-f 677/406/27 673/400/27 691/403/27
-f 691/403/27 693/407/27 677/406/27
-f 688/408/1 689/409/1 694/410/1
-f 694/410/1 695/411/1 688/408/1
-f 689/409/1 683/412/1 696/413/1
-f 696/413/1 694/410/1 689/409/1
-f 683/412/1 682/414/1 697/415/1
-f 697/415/1 696/413/1 683/412/1
-f 695/416/10 694/417/10 686/418/10
-f 686/418/10 685/419/10 695/416/10
-f 694/420/27 696/421/27 687/422/27
-f 687/422/27 686/423/27 694/420/27
-f 696/417/4 697/416/4 684/419/4
-f 684/419/4 687/418/4 696/417/4
-f 698/243/150 699/246/150 700/245/150
-f 700/245/150 701/244/150 698/243/150
-f 698/247/153 702/250/153 703/249/153
-f 703/249/153 699/248/153 698/247/153
-f 699/246/152 703/252/152 704/251/152
-f 704/251/152 700/245/152 699/246/152
-f 700/248/151 704/249/151 705/250/151
-f 705/250/151 701/247/151 700/248/151
-f 706/424/203 707/425/204 708/426/205
-f 708/426/205 709/427/27 706/424/203
-f 710/428/1 711/429/1 707/429/1
-f 707/429/1 706/428/1 710/428/1
-f 712/430/206 708/430/206 707/431/206
-f 707/431/206 711/431/206 712/430/206
-f 706/424/203 709/427/27 713/426/207
-f 713/426/207 714/425/208 706/424/203
-f 710/428/1 706/428/1 714/432/1
-f 714/432/1 715/432/1 710/428/1
-f 714/431/209 713/430/209 716/430/209
-f 716/430/209 715/431/209 714/431/209
-f 717/433/210 709/427/27 708/426/205
-f 708/426/205 718/434/211 717/433/210
-f 719/428/7 717/428/7 718/429/7
-f 718/429/7 720/429/7 719/428/7
-f 718/435/212 708/430/212 712/430/212
-f 712/430/212 720/435/212 718/435/212
-f 717/433/210 721/434/213 713/426/207
-f 713/426/207 709/427/27 717/433/210
-f 719/428/7 722/432/7 721/432/7
-f 721/432/7 717/428/7 719/428/7
-f 716/430/214 713/430/214 721/435/214
-f 721/435/214 722/435/214 716/430/214
-f 723/436/4 724/437/4 725/438/4
-f 725/438/4 726/439/4 723/436/4
-f 724/437/215 723/436/215 727/440/215
-f 727/440/215 728/441/215 724/437/215
-f 723/436/216 726/439/216 729/440/216
-f 729/440/216 727/440/216 723/436/216
-f 730/442/217 728/441/217 727/440/217
-f 727/440/217 731/443/217 730/442/217
-f 732/444/216 731/443/216 727/440/216
-f 727/440/216 729/445/216 732/444/216
-f 733/446/10 734/447/10 735/448/10
-f 735/448/10 736/449/10 733/446/10
-f 734/447/218 737/442/218 738/443/218
-f 738/443/218 735/448/218 734/447/218
-f 735/448/219 738/443/219 739/450/219
-f 739/450/219 736/449/219 735/448/219
-f 738/443/220 737/442/220 730/442/220
-f 730/442/220 731/443/220 738/443/220
-f 732/444/219 739/444/219 738/443/219
-f 738/443/219 731/443/219 732/444/219
-f 740/436/4 741/437/4 742/438/4
-f 742/438/4 743/439/4 740/436/4
-f 741/437/221 740/436/221 744/440/221
-f 744/440/221 745/441/221 741/437/221
-f 740/436/222 743/439/222 746/440/222
-f 746/440/222 744/440/222 740/436/222
-f 747/442/223 745/441/223 744/440/223
-f 744/440/223 748/443/223 747/442/223
-f 749/444/222 748/443/222 744/440/222
-f 744/440/222 746/445/222 749/444/222
-f 750/446/10 751/447/10 752/448/10
-f 752/448/10 753/449/10 750/446/10
-f 751/447/224 754/442/224 755/443/224
-f 755/443/224 752/448/224 751/447/224
-f 752/448/222 755/443/222 756/450/222
-f 756/450/222 753/449/222 752/448/222
-f 755/443/225 754/442/225 747/442/225
-f 747/442/225 748/443/225 755/443/225
-f 749/444/222 756/444/222 755/443/222
-f 755/443/222 748/443/222 749/444/222
-f 757/436/4 758/437/4 759/438/4
-f 759/438/4 760/439/4 757/436/4
-f 758/437/226 757/436/226 761/440/226
-f 761/440/226 762/441/227 758/437/226
-f 757/436/228 760/439/228 763/440/229
-f 763/440/229 761/440/229 757/436/228
-f 764/442/230 762/441/230 761/440/230
-f 761/440/230 765/443/230 764/442/230
-f 766/444/228 765/443/228 761/440/228
-f 761/440/228 763/445/228 766/444/228
-f 767/446/10 768/447/10 769/448/10
-f 769/448/10 770/449/10 767/446/10
-f 768/447/231 771/442/232 772/443/231
-f 772/443/231 769/448/232 768/447/231
-f 769/448/229 772/443/229 773/450/229
-f 773/450/229 770/449/229 769/448/229
-f 772/443/233 771/442/233 764/442/233
-f 764/442/233 765/443/233 772/443/233
-f 766/444/229 773/444/229 772/443/229
-f 772/443/229 765/443/229 766/444/229
-f 774/436/4 775/437/4 776/438/4
-f 776/438/4 777/439/4 774/436/4
-f 775/437/226 774/436/227 778/440/227
-f 778/440/227 779/441/227 775/437/226
-f 774/436/229 777/439/229 780/440/229
-f 780/440/229 778/440/229 774/436/229
-f 781/442/230 779/441/230 778/440/230
-f 778/440/230 782/443/230 781/442/230
-f 783/444/229 782/443/229 778/440/229
-f 778/440/229 780/445/229 783/444/229
-f 784/446/10 785/447/10 786/448/10
-f 786/448/10 787/449/10 784/446/10
-f 785/447/231 788/442/232 789/443/232
-f 789/443/232 786/448/231 785/447/231
-f 786/448/228 789/443/229 790/450/229
-f 790/450/229 787/449/228 786/448/228
-f 789/443/233 788/442/233 781/442/233
-f 781/442/233 782/443/233 789/443/233
-f 783/444/229 790/444/229 789/443/229
-f 789/443/229 782/443/229 783/444/229
-f 791/436/4 792/437/4 793/438/4
-f 793/438/4 794/439/4 791/436/4
-f 792/437/234 791/436/234 795/440/234
-f 795/440/234 796/441/234 792/437/234
-f 791/436/235 794/439/235 797/440/235
-f 797/440/235 795/440/235 791/436/235
-f 798/442/236 796/441/236 795/440/236
-f 795/440/236 799/443/236 798/442/236
-f 800/444/235 799/443/235 795/440/235
-f 795/440/235 797/445/235 800/444/235
-f 801/446/10 802/447/10 803/448/10
-f 803/448/10 804/449/10 801/446/10
-f 802/447/237 805/442/237 806/443/237
-f 806/443/237 803/448/237 802/447/237
-f 803/448/235 806/443/235 807/450/235
-f 807/450/235 804/449/235 803/448/235
-f 806/443/238 805/442/238 798/442/238
-f 798/442/238 799/443/238 806/443/238
-f 800/444/239 807/444/239 806/443/239
-f 806/443/239 799/443/239 800/444/239
-f 808/436/4 809/437/4 810/438/4
-f 810/438/4 811/439/4 808/436/4
-f 809/437/240 808/436/240 812/440/240
-f 812/440/240 813/441/240 809/437/240
-f 808/436/241 811/439/241 814/440/241
-f 814/440/241 812/440/241 808/436/241
-f 815/442/236 813/441/236 812/440/236
-f 812/440/236 816/443/236 815/442/236
-f 817/444/241 816/443/241 812/440/241
-f 812/440/241 814/445/241 817/444/241
-f 818/446/10 819/447/10 820/448/10
-f 820/448/10 821/449/10 818/446/10
-f 819/447/242 822/442/242 823/443/242
-f 823/443/242 820/448/242 819/447/242
-f 820/448/243 823/443/241 824/450/241
-f 824/450/241 821/449/243 820/448/243
-f 823/443/238 822/442/238 815/442/238
-f 815/442/238 816/443/238 823/443/238
-f 817/444/241 824/444/241 823/443/241
-f 823/443/241 816/443/241 817/444/241
-f 825/436/4 826/437/4 827/438/4
-f 827/438/4 828/439/4 825/436/4
-f 826/437/215 825/436/215 829/440/215
-f 829/440/215 830/441/215 826/437/215
-f 825/436/216 828/439/216 831/440/216
-f 831/440/216 829/440/216 825/436/216
-f 832/442/217 830/441/217 829/440/217
-f 829/440/217 833/443/217 832/442/217
-f 834/444/216 833/443/216 829/440/216
-f 829/440/216 831/445/216 834/444/216
-f 835/446/10 836/447/10 837/448/10
-f 837/448/10 838/449/10 835/446/10
-f 836/447/218 839/442/218 840/443/218
-f 840/443/218 837/448/218 836/447/218
-f 837/448/219 840/443/219 841/450/219
-f 841/450/219 838/449/219 837/448/219
-f 840/443/220 839/442/220 832/442/220
-f 832/442/220 833/443/220 840/443/220
-f 834/444/219 841/444/219 840/443/219
-f 840/443/219 833/443/219 834/444/219
-f 842/436/4 843/437/4 844/438/4
-f 844/438/4 845/439/4 842/436/4
-f 843/437/215 842/436/215 846/440/215
-f 846/440/215 847/441/215 843/437/215
-f 842/436/216 845/439/216 848/440/216
-f 848/440/216 846/440/216 842/436/216
-f 849/442/217 847/441/217 846/440/217
-f 846/440/217 850/443/217 849/442/217
-f 851/444/216 850/443/216 846/440/216
-f 846/440/216 848/445/216 851/444/216
-f 852/446/10 853/447/10 854/448/10
-f 854/448/10 855/449/10 852/446/10
-f 853/447/218 856/442/218 857/443/218
-f 857/443/218 854/448/218 853/447/218
-f 854/448/219 857/443/219 858/450/219
-f 858/450/219 855/449/219 854/448/219
-f 857/443/220 856/442/220 849/442/220
-f 849/442/220 850/443/220 857/443/220
-f 851/444/219 858/444/219 857/443/219
-f 857/443/219 850/443/219 851/444/219
-f 859/438/4 860/437/4 861/436/4
-f 861/436/4 862/439/4 859/438/4
-f 863/440/244 861/436/244 860/437/244
-f 860/437/244 864/441/244 863/440/244
-f 865/440/245 862/439/245 861/436/245
-f 861/436/245 863/440/245 865/440/245
-f 863/440/246 864/441/246 866/442/246
-f 866/442/246 867/443/246 863/440/246
-f 868/444/245 865/445/245 863/440/245
-f 863/440/245 867/443/245 868/444/245
-f 869/448/10 870/447/10 871/446/10
-f 871/446/10 872/449/10 869/448/10
-f 873/443/247 874/442/247 870/447/247
-f 870/447/247 869/448/247 873/443/247
-f 875/450/248 873/443/248 869/448/248
-f 869/448/248 872/449/248 875/450/248
-f 866/442/249 874/442/249 873/443/249
-f 873/443/249 867/443/249 866/442/249
-f 868/444/248 867/443/248 873/443/248
-f 873/443/248 875/444/248 868/444/248
-f 876/438/4 877/437/4 878/436/4
-f 878/436/4 879/439/4 876/438/4
-f 880/440/250 878/436/250 877/437/250
-f 877/437/250 881/441/250 880/440/250
-f 882/440/251 879/439/251 878/436/251
-f 878/436/251 880/440/251 882/440/251
-f 880/440/252 881/441/252 883/442/252
-f 883/442/252 884/443/252 880/440/252
-f 885/444/251 882/445/251 880/440/251
-f 880/440/251 884/443/251 885/444/251
-f 886/448/10 887/447/10 888/446/10
-f 888/446/10 889/449/10 886/448/10
-f 890/443/253 891/442/253 887/447/253
-f 887/447/253 886/448/253 890/443/253
-f 892/450/251 890/443/251 886/448/254
-f 886/448/254 889/449/254 892/450/251
-f 883/442/255 891/442/255 890/443/255
-f 890/443/255 884/443/255 883/442/255
-f 885/444/251 884/443/251 890/443/251
-f 890/443/251 892/444/251 885/444/251
-f 893/438/4 894/437/4 895/436/4
-f 895/436/4 896/439/4 893/438/4
-f 897/440/256 895/436/257 894/437/256
-f 894/437/256 898/441/256 897/440/256
-f 899/440/258 896/439/258 895/436/258
-f 895/436/258 897/440/258 899/440/258
-f 897/440/259 898/441/259 900/442/259
-f 900/442/259 901/443/259 897/440/259
-f 902/444/258 899/445/258 897/440/258
-f 897/440/258 901/443/258 902/444/258
-f 903/448/10 904/447/10 905/446/10
-f 905/446/10 906/449/10 903/448/10
-f 907/443/260 908/442/260 904/447/260
-f 904/447/260 903/448/260 907/443/260
-f 909/450/261 907/443/261 903/448/261
-f 903/448/261 906/449/261 909/450/261
-f 900/442/262 908/442/262 907/443/262
-f 907/443/262 901/443/262 900/442/262
-f 902/444/261 901/443/261 907/443/261
-f 907/443/261 909/444/261 902/444/261
-f 910/438/4 911/437/4 912/436/4
-f 912/436/4 913/439/4 910/438/4
-f 914/440/257 912/436/257 911/437/257
-f 911/437/257 915/441/256 914/440/257
-f 916/440/261 913/439/261 912/436/261
-f 912/436/261 914/440/261 916/440/261
-f 914/440/259 915/441/259 917/442/259
-f 917/442/259 918/443/259 914/440/259
-f 919/444/261 916/445/261 914/440/261
-f 914/440/261 918/443/261 919/444/261
-f 920/448/10 921/447/10 922/446/10
-f 922/446/10 923/449/10 920/448/10
-f 924/443/263 925/442/260 921/447/263
-f 921/447/263 920/448/263 924/443/263
-f 926/450/258 924/443/258 920/448/261
-f 920/448/261 923/449/261 926/450/258
-f 917/442/262 925/442/262 924/443/262
-f 924/443/262 918/443/262 917/442/262
-f 919/444/261 918/443/261 924/443/261
-f 924/443/261 926/444/261 919/444/261
-f 927/438/4 928/437/4 929/436/4
-f 929/436/4 930/439/4 927/438/4
-f 931/440/264 929/436/264 928/437/264
-f 928/437/264 932/441/264 931/440/264
-f 933/440/265 930/439/265 929/436/265
-f 929/436/265 931/440/265 933/440/265
-f 931/440/266 932/441/266 934/442/266
-f 934/442/266 935/443/266 931/440/266
-f 936/444/265 933/445/265 931/440/265
-f 931/440/265 935/443/265 936/444/265
-f 937/448/10 938/447/10 939/446/10
-f 939/446/10 940/449/10 937/448/10
-f 941/443/267 942/442/267 938/447/267
-f 938/447/267 937/448/267 941/443/267
-f 943/450/265 941/443/265 937/448/265
-f 937/448/265 940/449/265 943/450/265
-f 934/442/268 942/442/268 941/443/268
-f 941/443/268 935/443/268 934/442/268
-f 936/444/269 935/443/269 941/443/269
-f 941/443/269 943/444/269 936/444/269
-f 944/438/4 945/437/4 946/436/4
-f 946/436/4 947/439/4 944/438/4
-f 948/440/270 946/436/270 945/437/270
-f 945/437/270 949/441/270 948/440/270
-f 950/440/271 947/439/271 946/436/271
-f 946/436/271 948/440/271 950/440/271
-f 948/440/266 949/441/266 951/442/266
-f 951/442/266 952/443/266 948/440/266
-f 953/444/271 950/445/271 948/440/271
-f 948/440/271 952/443/271 953/444/271
-f 954/448/10 955/447/10 956/446/10
-f 956/446/10 957/449/10 954/448/10
-f 958/443/272 959/442/272 955/447/272
-f 955/447/272 954/448/272 958/443/272
-f 960/450/271 958/443/271 954/448/273
-f 954/448/273 957/449/273 960/450/271
-f 951/442/268 959/442/268 958/443/268
-f 958/443/268 952/443/268 951/442/268
-f 953/444/271 952/443/271 958/443/271
-f 958/443/271 960/444/271 953/444/271
-f 961/438/4 962/437/4 963/436/4
-f 963/436/4 964/439/4 961/438/4
-f 965/440/244 963/436/244 962/437/244
-f 962/437/244 966/441/244 965/440/244
-f 967/440/245 964/439/245 963/436/245
-f 963/436/245 965/440/245 967/440/245
-f 965/440/246 966/441/246 968/442/274
-f 968/442/274 969/443/246 965/440/246
-f 970/444/245 967/445/245 965/440/245
-f 965/440/245 969/443/245 970/444/245
-f 971/448/10 972/447/10 973/446/10
-f 973/446/10 974/449/10 971/448/10
-f 975/443/247 976/442/247 972/447/247
-f 972/447/247 971/448/247 975/443/247
-f 977/450/248 975/443/248 971/448/248
-f 971/448/248 974/449/248 977/450/248
-f 968/442/275 976/442/249 975/443/249
-f 975/443/249 969/443/249 968/442/275
-f 970/444/248 969/443/248 975/443/248
-f 975/443/248 977/444/248 970/444/248
-f 978/438/4 979/437/4 980/436/4
-f 980/436/4 981/439/4 978/438/4
-f 982/440/244 980/436/244 979/437/244
-f 979/437/244 983/441/244 982/440/244
-f 984/440/245 981/439/245 980/436/245
-f 980/436/245 982/440/245 984/440/245
-f 982/440/246 983/441/246 985/442/246
-f 985/442/246 986/443/246 982/440/246
-f 987/444/245 984/445/245 982/440/245
-f 982/440/245 986/443/245 987/444/245
-f 988/448/10 989/447/10 990/446/10
-f 990/446/10 991/449/10 988/448/10
-f 992/443/247 993/442/247 989/447/247
-f 989/447/247 988/448/247 992/443/247
-f 994/450/248 992/443/248 988/448/248
-f 988/448/248 991/449/248 994/450/248
-f 985/442/249 993/442/249 992/443/249
-f 992/443/249 986/443/249 985/442/249
-f 987/444/248 986/443/248 992/443/248
-f 992/443/248 994/444/248 987/444/248
-f 995/436/4 996/437/4 997/438/4
-f 997/438/4 998/439/4 995/436/4
-f 996/437/276 995/436/276 999/440/276
-f 999/440/276 1000/441/276 996/437/276
-f 995/436/277 998/439/277 1001/440/278
-f 1001/440/278 999/440/278 995/436/277
-f 1002/442/279 1000/441/279 999/440/279
-f 999/440/279 1003/443/279 1002/442/279
-f 1004/444/277 1003/443/277 999/440/277
-f 999/440/277 1001/445/277 1004/444/277
-f 1005/446/10 1006/447/10 1007/448/10
-f 1007/448/10 1008/449/10 1005/446/10
-f 1006/447/280 1009/442/280 1010/443/280
-f 1010/443/280 1007/448/280 1006/447/280
-f 1007/448/278 1010/443/278 1011/450/278
-f 1011/450/278 1008/449/278 1007/448/278
-f 1010/443/281 1009/442/281 1002/442/281
-f 1002/442/281 1003/443/281 1010/443/281
-f 1004/444/278 1011/444/278 1010/443/278
-f 1010/443/278 1003/443/278 1004/444/278
-f 1012/438/4 1013/437/4 1014/436/4
-f 1014/436/4 1015/439/4 1012/438/4
-f 1016/440/282 1014/436/282 1013/437/282
-f 1013/437/282 1017/441/282 1016/440/282
-f 1018/440/283 1015/439/283 1014/436/283
-f 1014/436/283 1016/440/283 1018/440/283
-f 1016/440/284 1017/441/284 1019/442/284
-f 1019/442/284 1020/443/284 1016/440/284
-f 1021/444/283 1018/445/283 1016/440/283
-f 1016/440/283 1020/443/283 1021/444/283
-f 1022/448/10 1023/447/10 1024/446/10
-f 1024/446/10 1025/449/10 1022/448/10
-f 1026/443/285 1027/442/285 1023/447/285
-f 1023/447/285 1022/448/285 1026/443/285
-f 1028/450/286 1026/443/286 1022/448/286
-f 1022/448/286 1025/449/286 1028/450/286
-f 1019/442/287 1027/442/287 1026/443/287
-f 1026/443/287 1020/443/287 1019/442/287
-f 1021/444/286 1020/443/286 1026/443/286
-f 1026/443/286 1028/444/286 1021/444/286
-f 1029/243/187 1030/244/187 1031/245/187
-f 1031/245/187 1032/246/187 1029/243/187
-f 1029/247/163 1032/248/163 1033/249/163
-f 1033/249/163 1034/250/163 1029/247/163
-f 1032/246/188 1031/245/188 1035/251/188
-f 1035/251/188 1033/252/188 1032/246/188
-f 1031/248/161 1030/247/161 1036/250/161
-f 1036/250/161 1035/249/161 1031/248/161
-f 1037/451/27 1038/452/27 1039/453/27
-f 1039/453/27 1040/454/27 1037/451/27
-f 1041/455/7 1042/456/7 1038/457/7
-f 1038/457/7 1037/458/7 1041/455/7
-f 1042/459/4 1043/460/4 1039/461/4
-f 1039/461/4 1038/462/4 1042/459/4
-f 1043/456/1 1044/455/1 1040/458/1
-f 1040/458/1 1039/457/1 1043/456/1
-f 1044/460/10 1041/459/10 1037/462/10
-f 1037/462/10 1040/461/10 1044/460/10
-f 1045/451/27 1046/452/27 1047/453/27
-f 1047/453/27 1048/454/27 1045/451/27
-f 1049/455/7 1050/456/7 1046/457/7
-f 1046/457/7 1045/458/7 1049/455/7
-f 1050/459/4 1051/460/4 1047/461/4
-f 1047/461/4 1046/462/4 1050/459/4
-f 1051/456/1 1052/455/1 1048/458/1
-f 1048/458/1 1047/457/1 1051/456/1
-f 1052/460/10 1049/459/10 1045/462/10
-f 1045/462/10 1048/461/10 1052/460/10
-f 1053/451/27 1054/452/27 1055/453/27
-f 1055/453/27 1056/454/27 1053/451/27
-f 1057/455/7 1058/456/7 1054/457/7
-f 1054/457/7 1053/458/7 1057/455/7
-f 1058/459/4 1059/460/4 1055/461/4
-f 1055/461/4 1054/462/4 1058/459/4
-f 1059/456/1 1060/455/1 1056/458/1
-f 1056/458/1 1055/457/1 1059/456/1
-f 1060/460/10 1057/459/10 1053/462/10
-f 1053/462/10 1056/461/10 1060/460/10
-f 1061/451/27 1062/452/27 1063/453/27
-f 1063/453/27 1064/454/27 1061/451/27
-f 1065/455/10 1066/456/10 1062/457/10
-f 1062/457/10 1061/458/10 1065/455/10
-f 1066/459/7 1067/460/7 1063/461/7
-f 1063/461/7 1062/462/7 1066/459/7
-f 1067/456/4 1068/455/4 1064/458/4
-f 1064/458/4 1063/457/4 1067/456/4
-f 1068/460/1 1065/459/1 1061/462/1
-f 1061/462/1 1064/461/1 1068/460/1
-f 1069/451/27 1070/452/27 1071/453/27
-f 1071/453/27 1072/454/27 1069/451/27
-f 1073/455/10 1074/456/10 1070/457/10
-f 1070/457/10 1069/458/10 1073/455/10
-f 1074/459/7 1075/460/7 1071/461/7
-f 1071/461/7 1070/462/7 1074/459/7
-f 1075/456/4 1076/455/4 1072/458/4
-f 1072/458/4 1071/457/4 1075/456/4
-f 1076/460/1 1073/459/1 1069/462/1
-f 1069/462/1 1072/461/1 1076/460/1
-f 1077/451/27 1078/452/27 1079/453/27
-f 1079/453/27 1080/454/27 1077/451/27
-f 1081/455/10 1082/456/10 1078/457/10
-f 1078/457/10 1077/458/10 1081/455/10
-f 1082/459/7 1083/460/7 1079/461/7
-f 1079/461/7 1078/462/7 1082/459/7
-f 1083/456/4 1084/455/4 1080/458/4
-f 1080/458/4 1079/457/4 1083/456/4
-f 1084/460/1 1081/459/1 1077/462/1
-f 1077/462/1 1080/461/1 1084/460/1
-f 1085/451/27 1086/452/27 1087/453/27
-f 1087/453/27 1088/454/27 1085/451/27
-f 1089/455/10 1090/456/10 1086/457/10
-f 1086/457/10 1085/458/10 1089/455/10
-f 1090/459/7 1091/460/7 1087/461/7
-f 1087/461/7 1086/462/7 1090/459/7
-f 1091/456/4 1092/455/4 1088/458/4
-f 1088/458/4 1087/457/4 1091/456/4
-f 1092/460/1 1089/459/1 1085/462/1
-f 1085/462/1 1088/461/1 1092/460/1
-f 1093/451/27 1094/452/27 1095/453/27
-f 1095/453/27 1096/454/27 1093/451/27
-f 1097/455/7 1098/456/7 1094/457/7
-f 1094/457/7 1093/458/7 1097/455/7
-f 1098/459/4 1099/460/4 1095/461/4
-f 1095/461/4 1094/462/4 1098/459/4
-f 1099/456/1 1100/455/1 1096/458/1
-f 1096/458/1 1095/457/1 1099/456/1
-f 1100/460/10 1097/459/10 1093/462/10
-f 1093/462/10 1096/461/10 1100/460/10
-f 1101/451/27 1102/452/27 1103/453/27
-f 1103/453/27 1104/454/27 1101/451/27
-f 1105/455/7 1106/456/7 1102/457/7
-f 1102/457/7 1101/458/7 1105/455/7
-f 1106/459/4 1107/460/4 1103/461/4
-f 1103/461/4 1102/462/4 1106/459/4
-f 1107/456/1 1108/455/1 1104/458/1
-f 1104/458/1 1103/457/1 1107/456/1
-f 1108/460/10 1105/459/10 1101/462/10
-f 1101/462/10 1104/461/10 1108/460/10
-f 1109/451/27 1110/452/27 1111/453/27
-f 1111/453/27 1112/454/27 1109/451/27
-f 1113/455/7 1114/456/7 1110/457/7
-f 1110/457/7 1109/458/7 1113/455/7
-f 1114/459/4 1115/460/4 1111/461/4
-f 1111/461/4 1110/462/4 1114/459/4
-f 1115/456/1 1116/455/1 1112/458/1
-f 1112/458/1 1111/457/1 1115/456/1
-f 1116/460/10 1113/459/10 1109/462/10
-f 1109/462/10 1112/461/10 1116/460/10
-f 1117/451/27 1118/452/27 1119/453/27
-f 1119/453/27 1120/454/27 1117/451/27
-f 1121/455/7 1122/456/7 1118/457/7
-f 1118/457/7 1117/458/7 1121/455/7
-f 1122/459/4 1123/460/4 1119/461/4
-f 1119/461/4 1118/462/4 1122/459/4
-f 1123/456/1 1124/455/1 1120/458/1
-f 1120/458/1 1119/457/1 1123/456/1
-f 1124/460/10 1121/459/10 1117/462/10
-f 1117/462/10 1120/461/10 1124/460/10
-f 1125/451/27 1126/452/27 1127/453/27
-f 1127/453/27 1128/454/27 1125/451/27
-f 1129/455/7 1130/456/7 1126/457/7
-f 1126/457/7 1125/458/7 1129/455/7
-f 1130/459/4 1131/460/4 1127/461/4
-f 1127/461/4 1126/462/4 1130/459/4
-f 1131/456/1 1132/455/1 1128/458/1
-f 1128/458/1 1127/457/1 1131/456/1
-f 1132/460/10 1129/459/10 1125/462/10
-f 1125/462/10 1128/461/10 1132/460/10
-f 1133/451/27 1134/452/27 1135/453/27
-f 1135/453/27 1136/454/27 1133/451/27
-f 1137/455/7 1138/456/7 1134/457/7
-f 1134/457/7 1133/458/7 1137/455/7
-f 1138/459/4 1139/460/4 1135/461/4
-f 1135/461/4 1134/462/4 1138/459/4
-f 1139/456/1 1140/455/1 1136/458/1
-f 1136/458/1 1135/457/1 1139/456/1
-f 1140/460/10 1137/459/10 1133/462/10
-f 1133/462/10 1136/461/10 1140/460/10
-f 1141/451/27 1142/452/27 1143/453/27
-f 1143/453/27 1144/454/27 1141/451/27
-f 1145/455/7 1146/456/7 1142/457/7
-f 1142/457/7 1141/458/7 1145/455/7
-f 1146/459/4 1147/460/4 1143/461/4
-f 1143/461/4 1142/462/4 1146/459/4
-f 1147/456/1 1148/455/1 1144/458/1
-f 1144/458/1 1143/457/1 1147/456/1
-f 1148/460/10 1145/459/10 1141/462/10
-f 1141/462/10 1144/461/10 1148/460/10
-f 1149/451/27 1150/452/27 1151/453/27
-f 1151/453/27 1152/454/27 1149/451/27
-f 1153/455/7 1154/456/7 1150/457/7
-f 1150/457/7 1149/458/7 1153/455/7
-f 1154/459/4 1155/460/4 1151/461/4
-f 1151/461/4 1150/462/4 1154/459/4
-f 1155/456/1 1156/455/1 1152/458/1
-f 1152/458/1 1151/457/1 1155/456/1
-f 1156/460/10 1153/459/10 1149/462/10
-f 1149/462/10 1152/461/10 1156/460/10
-f 1157/451/27 1158/452/27 1159/453/27
-f 1159/453/27 1160/454/27 1157/451/27
-f 1161/455/7 1162/456/7 1158/457/7
-f 1158/457/7 1157/458/7 1161/455/7
-f 1162/459/4 1163/460/4 1159/461/4
-f 1159/461/4 1158/462/4 1162/459/4
-f 1163/456/1 1164/455/1 1160/458/1
-f 1160/458/1 1159/457/1 1163/456/1
-f 1164/460/10 1161/459/10 1157/462/10
-f 1157/462/10 1160/461/10 1164/460/10
-f 1165/451/27 1166/452/27 1167/453/27
-f 1167/453/27 1168/454/27 1165/451/27
-f 1169/455/7 1170/456/7 1166/457/7
-f 1166/457/7 1165/458/7 1169/455/7
-f 1170/459/4 1171/460/4 1167/461/4
-f 1167/461/4 1166/462/4 1170/459/4
-f 1171/456/1 1172/455/1 1168/458/1
-f 1168/458/1 1167/457/1 1171/456/1
-f 1172/460/10 1169/459/10 1165/462/10
-f 1165/462/10 1168/461/10 1172/460/10
-f 1173/451/27 1174/452/27 1175/453/27
-f 1175/453/27 1176/454/27 1173/451/27
-f 1177/455/7 1178/456/7 1174/457/7
-f 1174/457/7 1173/458/7 1177/455/7
-f 1178/459/4 1179/460/4 1175/461/4
-f 1175/461/4 1174/462/4 1178/459/4
-f 1179/456/1 1180/455/1 1176/458/1
-f 1176/458/1 1175/457/1 1179/456/1
-f 1180/460/10 1177/459/10 1173/462/10
-f 1173/462/10 1176/461/10 1180/460/10
-f 1181/451/27 1182/452/27 1183/453/27
-f 1183/453/27 1184/454/27 1181/451/27
-f 1185/455/7 1186/456/7 1182/457/7
-f 1182/457/7 1181/458/7 1185/455/7
-f 1186/459/4 1187/460/4 1183/461/4
-f 1183/461/4 1182/462/4 1186/459/4
-f 1187/456/1 1188/455/1 1184/458/1
-f 1184/458/1 1183/457/1 1187/456/1
-f 1188/460/10 1185/459/10 1181/462/10
-f 1181/462/10 1184/461/10 1188/460/10
-f 1189/451/27 1190/452/27 1191/453/27
-f 1191/453/27 1192/454/27 1189/451/27
-f 1193/455/7 1194/456/7 1190/457/7
-f 1190/457/7 1189/458/7 1193/455/7
-f 1194/459/4 1195/460/4 1191/461/4
-f 1191/461/4 1190/462/4 1194/459/4
-f 1195/456/1 1196/455/1 1192/458/1
-f 1192/458/1 1191/457/1 1195/456/1
-f 1196/460/10 1193/459/10 1189/462/10
-f 1189/462/10 1192/461/10 1196/460/10
-f 1197/451/27 1198/452/27 1199/453/27
-f 1199/453/27 1200/454/27 1197/451/27
-f 1201/455/7 1202/456/7 1198/457/7
-f 1198/457/7 1197/458/7 1201/455/7
-f 1202/459/4 1203/460/4 1199/461/4
-f 1199/461/4 1198/462/4 1202/459/4
-f 1203/456/1 1204/455/1 1200/458/1
-f 1200/458/1 1199/457/1 1203/456/1
-f 1204/460/10 1201/459/10 1197/462/10
-f 1197/462/10 1200/461/10 1204/460/10
-f 1205/451/27 1206/452/27 1207/453/27
-f 1207/453/27 1208/454/27 1205/451/27
-f 1209/455/7 1210/456/7 1206/457/7
-f 1206/457/7 1205/458/7 1209/455/7
-f 1210/459/4 1211/460/4 1207/461/4
-f 1207/461/4 1206/462/4 1210/459/4
-f 1211/456/1 1212/455/1 1208/458/1
-f 1208/458/1 1207/457/1 1211/456/1
-f 1212/460/10 1209/459/10 1205/462/10
-f 1205/462/10 1208/461/10 1212/460/10
-f 1213/451/27 1214/452/27 1215/453/27
-f 1215/453/27 1216/454/27 1213/451/27
-f 1217/455/7 1218/456/7 1214/457/7
-f 1214/457/7 1213/458/7 1217/455/7
-f 1218/459/4 1219/460/4 1215/461/4
-f 1215/461/4 1214/462/4 1218/459/4
-f 1219/456/1 1220/455/1 1216/458/1
-f 1216/458/1 1215/457/1 1219/456/1
-f 1220/460/10 1217/459/10 1213/462/10
-f 1213/462/10 1216/461/10 1220/460/10
-f 1221/451/27 1222/452/27 1223/453/27
-f 1223/453/27 1224/454/27 1221/451/27
-f 1225/455/7 1226/456/7 1222/457/7
-f 1222/457/7 1221/458/7 1225/455/7
-f 1226/459/4 1227/460/4 1223/461/4
-f 1223/461/4 1222/462/4 1226/459/4
-f 1227/456/1 1228/455/1 1224/458/1
-f 1224/458/1 1223/457/1 1227/456/1
-f 1228/460/10 1225/459/10 1221/462/10
-f 1221/462/10 1224/461/10 1228/460/10
-f 1229/451/27 1230/452/27 1231/453/27
-f 1231/453/27 1232/454/27 1229/451/27
-f 1233/455/4 1234/456/4 1230/457/4
-f 1230/457/4 1229/458/4 1233/455/4
-f 1234/459/1 1235/460/1 1231/461/1
-f 1231/461/1 1230/462/1 1234/459/1
-f 1235/456/10 1236/455/10 1232/458/10
-f 1232/458/10 1231/457/10 1235/456/10
-f 1236/460/7 1233/459/7 1229/462/7
-f 1229/462/7 1232/461/7 1236/460/7
-f 1237/451/27 1238/452/27 1239/453/27
-f 1239/453/27 1240/454/27 1237/451/27
-f 1241/455/4 1242/456/4 1238/457/4
-f 1238/457/4 1237/458/4 1241/455/4
-f 1242/459/1 1243/460/1 1239/461/1
-f 1239/461/1 1238/462/1 1242/459/1
-f 1243/456/10 1244/455/10 1240/458/10
-f 1240/458/10 1239/457/10 1243/456/10
-f 1244/460/7 1241/459/7 1237/462/7
-f 1237/462/7 1240/461/7 1244/460/7
-f 1245/451/27 1246/452/27 1247/453/27
-f 1247/453/27 1248/454/27 1245/451/27
-f 1249/455/4 1250/456/4 1246/457/4
-f 1246/457/4 1245/458/4 1249/455/4
-f 1250/459/1 1251/460/1 1247/461/1
-f 1247/461/1 1246/462/1 1250/459/1
-f 1251/456/10 1252/455/10 1248/458/10
-f 1248/458/10 1247/457/10 1251/456/10
-f 1252/460/7 1249/459/7 1245/462/7
-f 1245/462/7 1248/461/7 1252/460/7
-f 1253/451/27 1254/452/27 1255/453/27
-f 1255/453/27 1256/454/27 1253/451/27
-f 1257/455/4 1258/456/4 1254/457/4
-f 1254/457/4 1253/458/4 1257/455/4
-f 1258/459/1 1259/460/1 1255/461/1
-f 1255/461/1 1254/462/1 1258/459/1
-f 1259/456/10 1260/455/10 1256/458/10
-f 1256/458/10 1255/457/10 1259/456/10
-f 1260/460/7 1257/459/7 1253/462/7
-f 1253/462/7 1256/461/7 1260/460/7
-f 1261/451/27 1262/452/27 1263/453/27
-f 1263/453/27 1264/454/27 1261/451/27
-f 1265/455/7 1266/456/7 1262/457/7
-f 1262/457/7 1261/458/7 1265/455/7
-f 1266/459/4 1267/460/4 1263/461/4
-f 1263/461/4 1262/462/4 1266/459/4
-f 1267/456/1 1268/455/1 1264/458/1
-f 1264/458/1 1263/457/1 1267/456/1
-f 1268/460/10 1265/459/10 1261/462/10
-f 1261/462/10 1264/461/10 1268/460/10
-f 1269/451/27 1270/452/27 1271/453/27
-f 1271/453/27 1272/454/27 1269/451/27
-f 1273/455/7 1274/456/7 1270/457/7
-f 1270/457/7 1269/458/7 1273/455/7
-f 1274/459/4 1275/460/4 1271/461/4
-f 1271/461/4 1270/462/4 1274/459/4
-f 1275/456/1 1276/455/1 1272/458/1
-f 1272/458/1 1271/457/1 1275/456/1
-f 1276/460/10 1273/459/10 1269/462/10
-f 1269/462/10 1272/461/10 1276/460/10
-f 1277/451/27 1278/452/27 1279/453/27
-f 1279/453/27 1280/454/27 1277/451/27
-f 1281/455/7 1282/456/7 1278/457/7
-f 1278/457/7 1277/458/7 1281/455/7
-f 1282/459/4 1283/460/4 1279/461/4
-f 1279/461/4 1278/462/4 1282/459/4
-f 1283/456/1 1284/455/1 1280/458/1
-f 1280/458/1 1279/457/1 1283/456/1
-f 1284/460/10 1281/459/10 1277/462/10
-f 1277/462/10 1280/461/10 1284/460/10
-f 1285/451/27 1286/452/27 1287/453/27
-f 1287/453/27 1288/454/27 1285/451/27
-f 1289/455/7 1290/456/7 1286/457/7
-f 1286/457/7 1285/458/7 1289/455/7
-f 1290/459/4 1291/460/4 1287/461/4
-f 1287/461/4 1286/462/4 1290/459/4
-f 1291/456/1 1292/455/1 1288/458/1
-f 1288/458/1 1287/457/1 1291/456/1
-f 1292/460/10 1289/459/10 1285/462/10
-f 1285/462/10 1288/461/10 1292/460/10
-f 1293/451/27 1294/452/27 1295/453/27
-f 1295/453/27 1296/454/27 1293/451/27
-f 1297/455/7 1298/456/7 1294/457/7
-f 1294/457/7 1293/458/7 1297/455/7
-f 1298/459/4 1299/460/4 1295/461/4
-f 1295/461/4 1294/462/4 1298/459/4
-f 1299/456/1 1300/455/1 1296/458/1
-f 1296/458/1 1295/457/1 1299/456/1
-f 1300/460/10 1297/459/10 1293/462/10
-f 1293/462/10 1296/461/10 1300/460/10
-f 1301/451/27 1302/452/27 1303/453/27
-f 1303/453/27 1304/454/27 1301/451/27
-f 1305/455/7 1306/456/7 1302/457/7
-f 1302/457/7 1301/458/7 1305/455/7
-f 1306/459/4 1307/460/4 1303/461/4
-f 1303/461/4 1302/462/4 1306/459/4
-f 1307/456/1 1308/455/1 1304/458/1
-f 1304/458/1 1303/457/1 1307/456/1
-f 1308/460/10 1305/459/10 1301/462/10
-f 1301/462/10 1304/461/10 1308/460/10
-f 1309/451/27 1310/452/27 1311/453/27
-f 1311/453/27 1312/454/27 1309/451/27
-f 1313/455/7 1314/456/7 1310/457/7
-f 1310/457/7 1309/458/7 1313/455/7
-f 1314/459/4 1315/460/4 1311/461/4
-f 1311/461/4 1310/462/4 1314/459/4
-f 1315/456/1 1316/455/1 1312/458/1
-f 1312/458/1 1311/457/1 1315/456/1
-f 1316/460/10 1313/459/10 1309/462/10
-f 1309/462/10 1312/461/10 1316/460/10
-f 1317/451/27 1318/452/27 1319/453/27
-f 1319/453/27 1320/454/27 1317/451/27
-f 1321/455/4 1322/456/4 1318/457/4
-f 1318/457/4 1317/458/4 1321/455/4
-f 1322/459/1 1323/460/1 1319/461/1
-f 1319/461/1 1318/462/1 1322/459/1
-f 1323/456/10 1324/455/10 1320/458/10
-f 1320/458/10 1319/457/10 1323/456/10
-f 1324/460/7 1321/459/7 1317/462/7
-f 1317/462/7 1320/461/7 1324/460/7
-f 1325/451/27 1326/452/27 1327/453/27
-f 1327/453/27 1328/454/27 1325/451/27
-f 1329/455/4 1330/456/4 1326/457/4
-f 1326/457/4 1325/458/4 1329/455/4
-f 1330/459/1 1331/460/1 1327/461/1
-f 1327/461/1 1326/462/1 1330/459/1
-f 1331/456/10 1332/455/10 1328/458/10
-f 1328/458/10 1327/457/10 1331/456/10
-f 1332/460/7 1329/459/7 1325/462/7
-f 1325/462/7 1328/461/7 1332/460/7
-f 1333/451/27 1334/452/27 1335/453/27
-f 1335/453/27 1336/454/27 1333/451/27
-f 1337/455/4 1338/456/4 1334/457/4
-f 1334/457/4 1333/458/4 1337/455/4
-f 1338/459/1 1339/460/1 1335/461/1
-f 1335/461/1 1334/462/1 1338/459/1
-f 1339/456/10 1340/455/10 1336/458/10
-f 1336/458/10 1335/457/10 1339/456/10
-f 1340/460/7 1337/459/7 1333/462/7
-f 1333/462/7 1336/461/7 1340/460/7
-f 1341/451/27 1342/452/27 1343/453/27
-f 1343/453/27 1344/454/27 1341/451/27
-f 1345/455/4 1346/456/4 1342/457/4
-f 1342/457/4 1341/458/4 1345/455/4
-f 1346/459/1 1347/460/1 1343/461/1
-f 1343/461/1 1342/462/1 1346/459/1
-f 1347/456/10 1348/455/10 1344/458/10
-f 1344/458/10 1343/457/10 1347/456/10
-f 1348/460/7 1345/459/7 1341/462/7
-f 1341/462/7 1344/461/7 1348/460/7
-f 1349/451/27 1350/452/27 1351/453/27
-f 1351/453/27 1352/454/27 1349/451/27
-f 1353/455/4 1354/456/4 1350/457/4
-f 1350/457/4 1349/458/4 1353/455/4
-f 1354/459/1 1355/460/1 1351/461/1
-f 1351/461/1 1350/462/1 1354/459/1
-f 1355/456/10 1356/455/10 1352/458/10
-f 1352/458/10 1351/457/10 1355/456/10
-f 1356/460/7 1353/459/7 1349/462/7
-f 1349/462/7 1352/461/7 1356/460/7
-f 1357/463/27 1358/464/27 1359/465/27
-f 1359/465/27 1360/466/27 1357/463/27
-f 1361/467/4 1362/468/4 1359/469/4
-f 1359/469/4 1358/470/4 1361/467/4
-f 1363/471/4 1364/472/4 1365/473/4
-f 1365/473/4 1366/474/4 1363/471/4
-f 1367/475/1 1368/476/1 1369/477/1
-f 1369/477/1 1370/478/1 1367/475/1
-f 1371/479/27 1372/480/288 1373/480/288
-f 1373/480/288 1374/479/27 1371/479/27
-f 1375/476/7 1376/475/7 1377/481/7
-f 1377/481/7 1378/482/7 1375/476/7
-f 1379/483/26 1380/484/289 1381/485/289
-f 1381/485/289 1382/483/26 1379/483/26
-f 1383/486/4 1384/487/4 1385/488/4
-f 1386/489/4 1387/490/4 1372/491/4
-f 1372/491/4 1371/492/4 1386/489/4
-f 1388/493/4 1389/494/4 1390/495/4
-f 1391/496/4 1392/497/4 1390/495/4
-f 1390/495/4 1389/494/4 1391/496/4
-f 1393/498/4 1394/499/4 1365/473/4
-f 1365/473/4 1364/472/4 1393/498/4
-f 1395/500/290 1371/479/27 1374/479/27
-f 1374/479/27 1396/500/290 1395/500/290
-f 1397/501/291 1379/483/26 1382/483/26
-f 1382/483/26 1398/501/291 1397/501/291
-f 1395/502/4 1399/503/4 1386/489/4
-f 1386/489/4 1371/492/4 1395/502/4
-f 1391/496/4 1383/486/4 1385/488/4
-f 1385/488/4 1392/497/4 1391/496/4
-f 1387/504/7 1363/504/7 1366/505/7
-f 1366/505/7 1400/505/7 1387/504/7
-f 1386/506/292 1364/506/292 1363/504/292
-f 1363/504/292 1387/504/292 1386/506/292
-f 1399/507/293 1393/507/293 1364/506/293
-f 1364/506/293 1386/506/293 1399/507/293
-f 1401/508/1 1394/508/1 1393/507/1
-f 1393/507/1 1399/507/1 1401/508/1
-f 1402/509/210 1365/510/210 1394/511/210
-f 1394/511/210 1401/512/210 1402/509/210
-f 1400/513/294 1366/514/294 1365/510/294
-f 1365/510/294 1402/509/294 1400/513/294
-f 1403/515/4 1401/516/4 1399/503/4
-f 1399/503/4 1395/502/4 1403/515/4
-f 1395/500/7 1396/500/7 1404/517/7
-f 1404/517/7 1403/517/7 1395/500/7
-f 1372/480/1 1405/518/1 1406/518/1
-f 1406/518/1 1373/480/1 1372/480/1
-f 1405/519/4 1372/491/4 1387/490/4
-f 1387/490/4 1400/474/4 1405/519/4
-f 1367/475/1 1407/481/1 1408/482/1
-f 1408/482/1 1368/476/1 1367/475/1
-f 1400/513/295 1385/513/295 1384/485/295
-f 1384/485/295 1405/520/295 1400/513/295
-f 1402/509/294 1392/509/294 1385/513/294
-f 1385/513/294 1400/513/294 1402/509/294
-f 1401/512/210 1390/512/210 1392/509/210
-f 1392/509/210 1402/509/210 1401/512/210
-f 1403/521/296 1388/521/296 1390/512/296
-f 1390/512/296 1401/512/296 1403/521/296
-f 1375/476/7 1409/477/7 1410/478/7
-f 1410/478/7 1376/475/7 1375/476/7
-f 1379/483/289 1391/522/289 1389/523/289
-f 1389/523/289 1380/484/289 1379/483/289
-f 1397/501/291 1383/524/291 1391/522/291
-f 1391/522/291 1379/483/291 1397/501/291
-f 1405/520/27 1367/525/27 1370/526/27
-f 1370/526/27 1406/527/27 1405/520/27
-f 1384/485/27 1407/528/27 1367/525/27
-f 1367/525/27 1405/520/27 1384/485/27
-f 1383/486/4 1408/486/4 1407/487/4
-f 1407/487/4 1384/487/4 1383/486/4
-f 1397/501/26 1368/501/26 1408/524/26
-f 1408/524/26 1383/524/26 1397/501/26
-f 1398/501/26 1369/501/26 1368/501/26
-f 1368/501/26 1397/501/26 1398/501/26
-f 1380/484/26 1375/484/26 1378/485/26
-f 1378/485/26 1381/485/26 1380/484/26
-f 1389/523/26 1409/523/26 1375/484/26
-f 1375/484/26 1380/484/26 1389/523/26
-f 1388/493/4 1410/529/4 1409/530/4
-f 1409/530/4 1389/494/4 1388/493/4
-f 1403/521/27 1376/531/27 1410/532/27
-f 1410/532/27 1388/521/27 1403/521/27
-f 1404/533/27 1377/531/27 1376/531/27
-f 1376/531/27 1403/521/27 1404/533/27
-f 1411/471/4 1412/472/4 1413/473/4
-f 1413/473/4 1414/474/4 1411/471/4
-f 1415/475/1 1416/476/1 1417/477/1
-f 1417/477/1 1418/478/1 1415/475/1
-f 1419/479/27 1420/480/288 1421/480/288
-f 1421/480/288 1422/479/27 1419/479/27
-f 1423/476/7 1424/475/7 1425/481/7
-f 1425/481/7 1426/482/7 1423/476/7
-f 1427/483/26 1428/484/289 1429/485/289
-f 1429/485/289 1430/483/26 1427/483/26
-f 1431/486/4 1432/487/4 1433/488/4
-f 1434/489/4 1435/490/4 1420/491/4
-f 1420/491/4 1419/492/4 1434/489/4
-f 1436/493/4 1437/494/4 1438/495/4
-f 1439/496/4 1440/497/4 1438/495/4
-f 1438/495/4 1437/494/4 1439/496/4
-f 1441/498/4 1442/499/4 1413/473/4
-f 1413/473/4 1412/472/4 1441/498/4
-f 1443/500/290 1419/479/27 1422/479/27
-f 1422/479/27 1444/500/290 1443/500/290
-f 1445/501/291 1427/483/26 1430/483/26
-f 1430/483/26 1446/501/291 1445/501/291
-f 1443/502/4 1447/503/4 1434/489/4
-f 1434/489/4 1419/492/4 1443/502/4
-f 1439/496/4 1431/486/4 1433/488/4
-f 1433/488/4 1440/497/4 1439/496/4
-f 1435/504/7 1411/504/7 1414/505/7
-f 1414/505/7 1448/505/7 1435/504/7
-f 1434/506/292 1412/506/292 1411/504/292
-f 1411/504/292 1435/504/292 1434/506/292
-f 1447/507/293 1441/507/293 1412/506/293
-f 1412/506/293 1434/506/293 1447/507/293
-f 1449/508/1 1442/508/1 1441/507/1
-f 1441/507/1 1447/507/1 1449/508/1
-f 1450/509/210 1413/510/210 1442/511/210
-f 1442/511/210 1449/512/210 1450/509/210
-f 1448/513/294 1414/514/294 1413/510/294
-f 1413/510/294 1450/509/294 1448/513/294
-f 1451/515/4 1449/516/4 1447/503/4
-f 1447/503/4 1443/502/4 1451/515/4
-f 1443/500/7 1444/500/7 1452/517/7
-f 1452/517/7 1451/517/7 1443/500/7
-f 1420/480/1 1453/518/1 1454/518/1
-f 1454/518/1 1421/480/1 1420/480/1
-f 1453/519/4 1420/491/4 1435/490/4
-f 1435/490/4 1448/474/4 1453/519/4
-f 1415/475/1 1455/481/1 1456/482/1
-f 1456/482/1 1416/476/1 1415/475/1
-f 1448/513/295 1433/513/295 1432/485/295
-f 1432/485/295 1453/520/295 1448/513/295
-f 1450/509/294 1440/509/294 1433/513/294
-f 1433/513/294 1448/513/294 1450/509/294
-f 1449/512/210 1438/512/210 1440/509/210
-f 1440/509/210 1450/509/210 1449/512/210
-f 1451/521/296 1436/521/296 1438/512/296
-f 1438/512/296 1449/512/296 1451/521/296
-f 1423/476/7 1457/477/7 1458/478/7
-f 1458/478/7 1424/475/7 1423/476/7
-f 1427/483/289 1439/522/289 1437/523/289
-f 1437/523/289 1428/484/289 1427/483/289
-f 1445/501/291 1431/524/291 1439/522/291
-f 1439/522/291 1427/483/291 1445/501/291
-f 1453/520/27 1415/525/27 1418/526/27
-f 1418/526/27 1454/527/27 1453/520/27
-f 1432/485/27 1455/528/27 1415/525/27
-f 1415/525/27 1453/520/27 1432/485/27
-f 1431/486/4 1456/486/4 1455/487/4
-f 1455/487/4 1432/487/4 1431/486/4
-f 1445/501/26 1416/501/26 1456/524/26
-f 1456/524/26 1431/524/26 1445/501/26
-f 1446/501/26 1417/501/26 1416/501/26
-f 1416/501/26 1445/501/26 1446/501/26
-f 1428/484/26 1423/484/26 1426/485/26
-f 1426/485/26 1429/485/26 1428/484/26
-f 1437/523/26 1457/523/26 1423/484/26
-f 1423/484/26 1428/484/26 1437/523/26
-f 1436/493/4 1458/529/4 1457/530/4
-f 1457/530/4 1437/494/4 1436/493/4
-f 1451/521/27 1424/531/27 1458/532/27
-f 1458/532/27 1436/521/27 1451/521/27
-f 1452/533/27 1425/531/27 1424/531/27
-f 1424/531/27 1451/521/27 1452/533/27
-f 1459/471/4 1460/472/4 1461/473/4
-f 1461/473/4 1462/474/4 1459/471/4
-f 1463/475/1 1464/476/1 1465/477/1
-f 1465/477/1 1466/478/1 1463/475/1
-f 1467/479/27 1468/480/288 1469/480/288
-f 1469/480/288 1470/479/27 1467/479/27
-f 1471/476/7 1472/475/7 1473/481/7
-f 1473/481/7 1474/482/7 1471/476/7
-f 1475/483/26 1476/484/289 1477/485/289
-f 1477/485/289 1478/483/26 1475/483/26
-f 1479/486/4 1480/487/4 1481/488/4
-f 1482/489/4 1483/490/4 1468/491/4
-f 1468/491/4 1467/492/4 1482/489/4
-f 1484/493/4 1485/494/4 1486/495/4
-f 1487/496/4 1488/497/4 1486/495/4
-f 1486/495/4 1485/494/4 1487/496/4
-f 1489/498/4 1490/499/4 1461/473/4
-f 1461/473/4 1460/472/4 1489/498/4
-f 1491/500/290 1467/479/27 1470/479/27
-f 1470/479/27 1492/500/290 1491/500/290
-f 1493/501/291 1475/483/26 1478/483/26
-f 1478/483/26 1494/501/291 1493/501/291
-f 1491/502/4 1495/503/4 1482/489/4
-f 1482/489/4 1467/492/4 1491/502/4
-f 1487/496/4 1479/486/4 1481/488/4
-f 1481/488/4 1488/497/4 1487/496/4
-f 1483/504/7 1459/504/7 1462/505/7
-f 1462/505/7 1496/505/7 1483/504/7
-f 1482/506/292 1460/506/292 1459/504/292
-f 1459/504/292 1483/504/292 1482/506/292
-f 1495/507/293 1489/507/293 1460/506/293
-f 1460/506/293 1482/506/293 1495/507/293
-f 1497/508/1 1490/508/1 1489/507/1
-f 1489/507/1 1495/507/1 1497/508/1
-f 1498/509/210 1461/510/210 1490/511/210
-f 1490/511/210 1497/512/210 1498/509/210
-f 1496/513/294 1462/514/294 1461/510/294
-f 1461/510/294 1498/509/294 1496/513/294
-f 1499/515/4 1497/516/4 1495/503/4
-f 1495/503/4 1491/502/4 1499/515/4
-f 1491/500/7 1492/500/7 1500/517/7
-f 1500/517/7 1499/517/7 1491/500/7
-f 1468/480/1 1501/518/1 1502/518/1
-f 1502/518/1 1469/480/1 1468/480/1
-f 1501/519/4 1468/491/4 1483/490/4
-f 1483/490/4 1496/474/4 1501/519/4
-f 1463/475/1 1503/481/1 1504/482/1
-f 1504/482/1 1464/476/1 1463/475/1
-f 1496/513/295 1481/513/295 1480/485/295
-f 1480/485/295 1501/520/295 1496/513/295
-f 1498/509/294 1488/509/294 1481/513/294
-f 1481/513/294 1496/513/294 1498/509/294
-f 1497/512/210 1486/512/210 1488/509/210
-f 1488/509/210 1498/509/210 1497/512/210
-f 1499/521/296 1484/521/296 1486/512/296
-f 1486/512/296 1497/512/296 1499/521/296
-f 1471/476/7 1505/477/7 1506/478/7
-f 1506/478/7 1472/475/7 1471/476/7
-f 1475/483/289 1487/522/289 1485/523/289
-f 1485/523/289 1476/484/289 1475/483/289
-f 1493/501/291 1479/524/291 1487/522/291
-f 1487/522/291 1475/483/291 1493/501/291
-f 1501/520/27 1463/525/27 1466/526/27
-f 1466/526/27 1502/527/27 1501/520/27
-f 1480/485/27 1503/528/27 1463/525/27
-f 1463/525/27 1501/520/27 1480/485/27
-f 1479/486/4 1504/486/4 1503/487/4
-f 1503/487/4 1480/487/4 1479/486/4
-f 1493/501/26 1464/501/26 1504/524/26
-f 1504/524/26 1479/524/26 1493/501/26
-f 1494/501/26 1465/501/26 1464/501/26
-f 1464/501/26 1493/501/26 1494/501/26
-f 1476/484/26 1471/484/26 1474/485/26
-f 1474/485/26 1477/485/26 1476/484/26
-f 1485/523/26 1505/523/26 1471/484/26
-f 1471/484/26 1476/484/26 1485/523/26
-f 1484/493/4 1506/529/4 1505/530/4
-f 1505/530/4 1485/494/4 1484/493/4
-f 1499/521/27 1472/531/27 1506/532/27
-f 1506/532/27 1484/521/27 1499/521/27
-f 1500/533/27 1473/531/27 1472/531/27
-f 1472/531/27 1499/521/27 1500/533/27
-f 1507/471/4 1508/472/4 1509/473/4
-f 1509/473/4 1510/474/4 1507/471/4
-f 1511/475/1 1512/476/1 1513/477/1
-f 1513/477/1 1514/478/1 1511/475/1
-f 1515/479/27 1516/480/288 1517/480/288
-f 1517/480/288 1518/479/27 1515/479/27
-f 1519/476/7 1520/475/7 1521/481/7
-f 1521/481/7 1522/482/7 1519/476/7
-f 1523/483/26 1524/484/289 1525/485/289
-f 1525/485/289 1526/483/26 1523/483/26
-f 1527/486/4 1528/487/4 1529/488/4
-f 1530/489/4 1531/490/4 1516/491/4
-f 1516/491/4 1515/492/4 1530/489/4
-f 1532/493/4 1533/494/4 1534/495/4
-f 1535/496/4 1536/497/4 1534/495/4
-f 1534/495/4 1533/494/4 1535/496/4
-f 1537/498/4 1538/499/4 1509/473/4
-f 1509/473/4 1508/472/4 1537/498/4
-f 1539/500/290 1515/479/27 1518/479/27
-f 1518/479/27 1540/500/290 1539/500/290
-f 1541/501/291 1523/483/26 1526/483/26
-f 1526/483/26 1542/501/291 1541/501/291
-f 1539/502/4 1543/503/4 1530/489/4
-f 1530/489/4 1515/492/4 1539/502/4
-f 1535/496/4 1527/486/4 1529/488/4
-f 1529/488/4 1536/497/4 1535/496/4
-f 1531/504/7 1507/504/7 1510/505/7
-f 1510/505/7 1544/505/7 1531/504/7
-f 1530/506/292 1508/506/292 1507/504/292
-f 1507/504/292 1531/504/292 1530/506/292
-f 1543/507/293 1537/507/293 1508/506/293
-f 1508/506/293 1530/506/293 1543/507/293
-f 1545/508/1 1538/508/1 1537/507/1
-f 1537/507/1 1543/507/1 1545/508/1
-f 1546/509/210 1509/510/210 1538/511/210
-f 1538/511/210 1545/512/210 1546/509/210
-f 1544/513/294 1510/514/294 1509/510/294
-f 1509/510/294 1546/509/294 1544/513/294
-f 1547/515/4 1545/516/4 1543/503/4
-f 1543/503/4 1539/502/4 1547/515/4
-f 1539/500/7 1540/500/7 1548/517/7
-f 1548/517/7 1547/517/7 1539/500/7
-f 1516/480/1 1549/518/1 1550/518/1
-f 1550/518/1 1517/480/1 1516/480/1
-f 1549/519/4 1516/491/4 1531/490/4
-f 1531/490/4 1544/474/4 1549/519/4
-f 1511/475/1 1551/481/1 1552/482/1
-f 1552/482/1 1512/476/1 1511/475/1
-f 1544/513/295 1529/513/295 1528/485/295
-f 1528/485/295 1549/520/295 1544/513/295
-f 1546/509/294 1536/509/294 1529/513/294
-f 1529/513/294 1544/513/294 1546/509/294
-f 1545/512/210 1534/512/210 1536/509/210
-f 1536/509/210 1546/509/210 1545/512/210
-f 1547/521/296 1532/521/296 1534/512/296
-f 1534/512/296 1545/512/296 1547/521/296
-f 1519/476/7 1553/477/7 1554/478/7
-f 1554/478/7 1520/475/7 1519/476/7
-f 1523/483/289 1535/522/289 1533/523/289
-f 1533/523/289 1524/484/289 1523/483/289
-f 1541/501/291 1527/524/291 1535/522/291
-f 1535/522/291 1523/483/291 1541/501/291
-f 1549/520/27 1511/525/27 1514/526/27
-f 1514/526/27 1550/527/27 1549/520/27
-f 1528/485/27 1551/528/27 1511/525/27
-f 1511/525/27 1549/520/27 1528/485/27
-f 1527/486/4 1552/486/4 1551/487/4
-f 1551/487/4 1528/487/4 1527/486/4
-f 1541/501/26 1512/501/26 1552/524/26
-f 1552/524/26 1527/524/26 1541/501/26
-f 1542/501/26 1513/501/26 1512/501/26
-f 1512/501/26 1541/501/26 1542/501/26
-f 1524/484/26 1519/484/26 1522/485/26
-f 1522/485/26 1525/485/26 1524/484/26
-f 1533/523/26 1553/523/26 1519/484/26
-f 1519/484/26 1524/484/26 1533/523/26
-f 1532/493/4 1554/529/4 1553/530/4
-f 1553/530/4 1533/494/4 1532/493/4
-f 1547/521/27 1520/531/27 1554/532/27
-f 1554/532/27 1532/521/27 1547/521/27
-f 1548/533/27 1521/531/27 1520/531/27
-f 1520/531/27 1547/521/27 1548/533/27
-f 1555/471/4 1556/472/4 1557/473/4
-f 1557/473/4 1558/474/4 1555/471/4
-f 1559/475/1 1560/476/1 1561/477/1
-f 1561/477/1 1562/478/1 1559/475/1
-f 1563/479/27 1564/480/288 1565/480/288
-f 1565/480/288 1566/479/27 1563/479/27
-f 1567/476/7 1568/475/7 1569/481/7
-f 1569/481/7 1570/482/7 1567/476/7
-f 1571/483/26 1572/484/289 1573/485/289
-f 1573/485/289 1574/483/26 1571/483/26
-f 1575/486/4 1576/487/4 1577/488/4
-f 1578/489/4 1579/490/4 1564/491/4
-f 1564/491/4 1563/492/4 1578/489/4
-f 1580/493/4 1581/494/4 1582/495/4
-f 1583/496/4 1584/497/4 1582/495/4
-f 1582/495/4 1581/494/4 1583/496/4
-f 1585/498/4 1586/499/4 1557/473/4
-f 1557/473/4 1556/472/4 1585/498/4
-f 1587/500/290 1563/479/27 1566/479/27
-f 1566/479/27 1588/500/290 1587/500/290
-f 1589/501/291 1571/483/26 1574/483/26
-f 1574/483/26 1590/501/291 1589/501/291
-f 1587/502/4 1591/503/4 1578/489/4
-f 1578/489/4 1563/492/4 1587/502/4
-f 1583/496/4 1575/486/4 1577/488/4
-f 1577/488/4 1584/497/4 1583/496/4
-f 1579/504/7 1555/504/7 1558/505/7
-f 1558/505/7 1592/505/7 1579/504/7
-f 1578/506/292 1556/506/292 1555/504/292
-f 1555/504/292 1579/504/292 1578/506/292
-f 1591/507/293 1585/507/293 1556/506/293
-f 1556/506/293 1578/506/293 1591/507/293
-f 1593/508/1 1586/508/1 1585/507/1
-f 1585/507/1 1591/507/1 1593/508/1
-f 1594/509/210 1557/510/210 1586/511/210
-f 1586/511/210 1593/512/210 1594/509/210
-f 1592/513/294 1558/514/294 1557/510/294
-f 1557/510/294 1594/509/294 1592/513/294
-f 1595/515/4 1593/516/4 1591/503/4
-f 1591/503/4 1587/502/4 1595/515/4
-f 1587/500/7 1588/500/7 1596/517/7
-f 1596/517/7 1595/517/7 1587/500/7
-f 1564/480/1 1597/518/1 1598/518/1
-f 1598/518/1 1565/480/1 1564/480/1
-f 1597/519/4 1564/491/4 1579/490/4
-f 1579/490/4 1592/474/4 1597/519/4
-f 1559/475/1 1599/481/1 1600/482/1
-f 1600/482/1 1560/476/1 1559/475/1
-f 1592/513/295 1577/513/295 1576/485/295
-f 1576/485/295 1597/520/295 1592/513/295
-f 1594/509/294 1584/509/294 1577/513/294
-f 1577/513/294 1592/513/294 1594/509/294
-f 1593/512/210 1582/512/210 1584/509/210
-f 1584/509/210 1594/509/210 1593/512/210
-f 1595/521/296 1580/521/296 1582/512/296
-f 1582/512/296 1593/512/296 1595/521/296
-f 1567/476/7 1601/477/7 1602/478/7
-f 1602/478/7 1568/475/7 1567/476/7
-f 1571/483/289 1583/522/289 1581/523/289
-f 1581/523/289 1572/484/289 1571/483/289
-f 1589/501/291 1575/524/291 1583/522/291
-f 1583/522/291 1571/483/291 1589/501/291
-f 1597/520/27 1559/525/27 1562/526/27
-f 1562/526/27 1598/527/27 1597/520/27
-f 1576/485/27 1599/528/27 1559/525/27
-f 1559/525/27 1597/520/27 1576/485/27
-f 1575/486/4 1600/486/4 1599/487/4
-f 1599/487/4 1576/487/4 1575/486/4
-f 1589/501/26 1560/501/26 1600/524/26
-f 1600/524/26 1575/524/26 1589/501/26
-f 1590/501/26 1561/501/26 1560/501/26
-f 1560/501/26 1589/501/26 1590/501/26
-f 1572/484/26 1567/484/26 1570/485/26
-f 1570/485/26 1573/485/26 1572/484/26
-f 1581/523/26 1601/523/26 1567/484/26
-f 1567/484/26 1572/484/26 1581/523/26
-f 1580/493/4 1602/529/4 1601/530/4
-f 1601/530/4 1581/494/4 1580/493/4
-f 1595/521/27 1568/531/27 1602/532/27
-f 1602/532/27 1580/521/27 1595/521/27
-f 1596/533/27 1569/531/27 1568/531/27
-f 1568/531/27 1595/521/27 1596/533/27
-f 1603/471/4 1604/472/4 1605/473/4
-f 1605/473/4 1606/474/4 1603/471/4
-f 1607/475/1 1608/476/1 1609/477/1
-f 1609/477/1 1610/478/1 1607/475/1
-f 1611/479/27 1612/480/288 1613/480/288
-f 1613/480/288 1614/479/27 1611/479/27
-f 1615/476/7 1616/475/7 1617/481/7
-f 1617/481/7 1618/482/7 1615/476/7
-f 1619/483/26 1620/484/289 1621/485/289
-f 1621/485/289 1622/483/26 1619/483/26
-f 1623/486/4 1624/487/4 1625/488/4
-f 1626/489/4 1627/490/4 1612/491/4
-f 1612/491/4 1611/492/4 1626/489/4
-f 1628/493/4 1629/494/4 1630/495/4
-f 1631/496/4 1632/497/4 1630/495/4
-f 1630/495/4 1629/494/4 1631/496/4
-f 1633/498/4 1634/499/4 1605/473/4
-f 1605/473/4 1604/472/4 1633/498/4
-f 1635/500/290 1611/479/27 1614/479/27
-f 1614/479/27 1636/500/290 1635/500/290
-f 1637/501/291 1619/483/26 1622/483/26
-f 1622/483/26 1638/501/291 1637/501/291
-f 1635/502/4 1639/503/4 1626/489/4
-f 1626/489/4 1611/492/4 1635/502/4
-f 1631/496/4 1623/486/4 1625/488/4
-f 1625/488/4 1632/497/4 1631/496/4
-f 1627/504/7 1603/504/7 1606/505/7
-f 1606/505/7 1640/505/7 1627/504/7
-f 1626/506/292 1604/506/292 1603/504/292
-f 1603/504/292 1627/504/292 1626/506/292
-f 1639/507/293 1633/507/293 1604/506/293
-f 1604/506/293 1626/506/293 1639/507/293
-f 1641/508/1 1634/508/1 1633/507/1
-f 1633/507/1 1639/507/1 1641/508/1
-f 1642/509/210 1605/510/210 1634/511/210
-f 1634/511/210 1641/512/210 1642/509/210
-f 1640/513/294 1606/514/294 1605/510/294
-f 1605/510/294 1642/509/294 1640/513/294
-f 1643/515/4 1641/516/4 1639/503/4
-f 1639/503/4 1635/502/4 1643/515/4
-f 1635/500/7 1636/500/7 1644/517/7
-f 1644/517/7 1643/517/7 1635/500/7
-f 1612/480/1 1645/518/1 1646/518/1
-f 1646/518/1 1613/480/1 1612/480/1
-f 1645/519/4 1612/491/4 1627/490/4
-f 1627/490/4 1640/474/4 1645/519/4
-f 1607/475/1 1647/481/1 1648/482/1
-f 1648/482/1 1608/476/1 1607/475/1
-f 1640/513/295 1625/513/295 1624/485/295
-f 1624/485/295 1645/520/295 1640/513/295
-f 1642/509/294 1632/509/294 1625/513/294
-f 1625/513/294 1640/513/294 1642/509/294
-f 1641/512/210 1630/512/210 1632/509/210
-f 1632/509/210 1642/509/210 1641/512/210
-f 1643/521/296 1628/521/296 1630/512/296
-f 1630/512/296 1641/512/296 1643/521/296
-f 1615/476/7 1649/477/7 1650/478/7
-f 1650/478/7 1616/475/7 1615/476/7
-f 1619/483/289 1631/522/289 1629/523/289
-f 1629/523/289 1620/484/289 1619/483/289
-f 1637/501/291 1623/524/291 1631/522/297
-f 1631/522/297 1619/483/297 1637/501/291
-f 1645/520/27 1607/525/27 1610/526/27
-f 1610/526/27 1646/527/27 1645/520/27
-f 1624/485/27 1647/528/27 1607/525/27
-f 1607/525/27 1645/520/27 1624/485/27
-f 1623/486/4 1648/486/4 1647/487/4
-f 1647/487/4 1624/487/4 1623/486/4
-f 1637/501/26 1608/501/26 1648/524/26
-f 1648/524/26 1623/524/26 1637/501/26
-f 1638/501/26 1609/501/26 1608/501/26
-f 1608/501/26 1637/501/26 1638/501/26
-f 1620/484/26 1615/484/26 1618/485/26
-f 1618/485/26 1621/485/26 1620/484/26
-f 1629/523/26 1649/523/26 1615/484/26
-f 1615/484/26 1620/484/26 1629/523/26
-f 1628/493/4 1650/529/4 1649/530/4
-f 1649/530/4 1629/494/4 1628/493/4
-f 1643/521/27 1616/531/27 1650/532/27
-f 1650/532/27 1628/521/27 1643/521/27
-f 1644/533/27 1617/531/27 1616/531/27
-f 1616/531/27 1643/521/27 1644/533/27
-f 1651/471/4 1652/472/4 1653/473/4
-f 1653/473/4 1654/474/4 1651/471/4
-f 1655/475/1 1656/476/1 1657/477/1
-f 1657/477/1 1658/478/1 1655/475/1
-f 1659/479/27 1660/480/288 1661/480/288
-f 1661/480/288 1662/479/27 1659/479/27
-f 1663/476/7 1664/475/7 1665/481/7
-f 1665/481/7 1666/482/7 1663/476/7
-f 1667/483/26 1668/484/289 1669/485/289
-f 1669/485/289 1670/483/26 1667/483/26
-f 1671/486/4 1672/487/4 1673/488/4
-f 1674/489/4 1675/490/4 1660/491/4
-f 1660/491/4 1659/492/4 1674/489/4
-f 1676/493/4 1677/494/4 1678/495/4
-f 1679/496/4 1680/497/4 1678/495/4
-f 1678/495/4 1677/494/4 1679/496/4
-f 1681/498/4 1682/499/4 1653/473/4
-f 1653/473/4 1652/472/4 1681/498/4
-f 1683/500/290 1659/479/27 1662/479/27
-f 1662/479/27 1684/500/290 1683/500/290
-f 1685/501/291 1667/483/26 1670/483/26
-f 1670/483/26 1686/501/291 1685/501/291
-f 1683/502/4 1687/503/4 1674/489/4
-f 1674/489/4 1659/492/4 1683/502/4
-f 1679/496/4 1671/486/4 1673/488/4
-f 1673/488/4 1680/497/4 1679/496/4
-f 1675/504/7 1651/504/7 1654/505/7
-f 1654/505/7 1688/505/7 1675/504/7
-f 1674/506/292 1652/506/292 1651/504/292
-f 1651/504/292 1675/504/292 1674/506/292
-f 1687/507/293 1681/507/293 1652/506/293
-f 1652/506/293 1674/506/293 1687/507/293
-f 1689/508/1 1682/508/1 1681/507/1
-f 1681/507/1 1687/507/1 1689/508/1
-f 1690/509/210 1653/510/210 1682/511/210
-f 1682/511/210 1689/512/210 1690/509/210
-f 1688/513/294 1654/514/294 1653/510/294
-f 1653/510/294 1690/509/294 1688/513/294
-f 1691/515/4 1689/516/4 1687/503/4
-f 1687/503/4 1683/502/4 1691/515/4
-f 1683/500/7 1684/500/7 1692/517/7
-f 1692/517/7 1691/517/7 1683/500/7
-f 1660/480/1 1693/518/1 1694/518/1
-f 1694/518/1 1661/480/1 1660/480/1
-f 1693/519/4 1660/491/4 1675/490/4
-f 1675/490/4 1688/474/4 1693/519/4
-f 1655/475/1 1695/481/1 1696/482/1
-f 1696/482/1 1656/476/1 1655/475/1
-f 1688/513/295 1673/513/295 1672/485/295
-f 1672/485/295 1693/520/295 1688/513/295
-f 1690/509/294 1680/509/294 1673/513/294
-f 1673/513/294 1688/513/294 1690/509/294
-f 1689/512/210 1678/512/210 1680/509/210
-f 1680/509/210 1690/509/210 1689/512/210
-f 1691/521/296 1676/521/296 1678/512/296
-f 1678/512/296 1689/512/296 1691/521/296
-f 1663/476/7 1697/477/7 1698/478/7
-f 1698/478/7 1664/475/7 1663/476/7
-f 1667/483/298 1679/522/298 1677/523/289
-f 1677/523/289 1668/484/289 1667/483/298
-f 1685/501/291 1671/524/291 1679/522/297
-f 1679/522/297 1667/483/297 1685/501/291
-f 1693/520/27 1655/525/27 1658/526/27
-f 1658/526/27 1694/527/27 1693/520/27
-f 1672/485/27 1695/528/27 1655/525/27
-f 1655/525/27 1693/520/27 1672/485/27
-f 1671/486/4 1696/486/4 1695/487/4
-f 1695/487/4 1672/487/4 1671/486/4
-f 1685/501/26 1656/501/26 1696/524/26
-f 1696/524/26 1671/524/26 1685/501/26
-f 1686/501/26 1657/501/26 1656/501/26
-f 1656/501/26 1685/501/26 1686/501/26
-f 1668/484/26 1663/484/26 1666/485/26
-f 1666/485/26 1669/485/26 1668/484/26
-f 1677/523/26 1697/523/26 1663/484/26
-f 1663/484/26 1668/484/26 1677/523/26
-f 1676/493/4 1698/529/4 1697/530/4
-f 1697/530/4 1677/494/4 1676/493/4
-f 1691/521/27 1664/531/27 1698/532/27
-f 1698/532/27 1676/521/27 1691/521/27
-f 1692/533/27 1665/531/27 1664/531/27
-f 1664/531/27 1691/521/27 1692/533/27
-f 1699/471/1 1700/472/1 1701/473/1
-f 1701/473/1 1702/474/1 1699/471/1
-f 1703/475/10 1704/476/10 1705/477/10
-f 1705/477/10 1706/478/10 1703/475/10
-f 1707/479/27 1708/480/299 1709/480/299
-f 1709/480/299 1710/479/27 1707/479/27
-f 1711/476/4 1712/475/4 1713/481/4
-f 1713/481/4 1714/482/4 1711/476/4
-f 1715/483/26 1716/484/300 1717/485/300
-f 1717/485/300 1718/483/26 1715/483/26
-f 1719/486/1 1720/487/1 1721/488/1
-f 1722/489/1 1723/490/1 1708/491/1
-f 1708/491/1 1707/492/1 1722/489/1
-f 1724/493/1 1725/494/1 1726/495/1
-f 1727/496/1 1728/497/1 1726/495/1
-f 1726/495/1 1725/494/1 1727/496/1
-f 1729/498/1 1730/499/1 1701/473/1
-f 1701/473/1 1700/472/1 1729/498/1
-f 1731/500/301 1707/479/27 1710/479/27
-f 1710/479/27 1732/500/301 1731/500/301
-f 1733/501/302 1715/483/26 1718/483/26
-f 1718/483/26 1734/501/302 1733/501/302
-f 1731/502/1 1735/503/1 1722/489/1
-f 1722/489/1 1707/492/1 1731/502/1
-f 1727/496/1 1719/486/1 1721/488/1
-f 1721/488/1 1728/497/1 1727/496/1
-f 1723/504/4 1699/504/4 1702/505/4
-f 1702/505/4 1736/505/4 1723/504/4
-f 1722/506/303 1700/506/303 1699/504/303
-f 1699/504/303 1723/504/303 1722/506/303
-f 1735/507/304 1729/507/304 1700/506/304
-f 1700/506/304 1722/506/304 1735/507/304
-f 1737/508/10 1730/508/10 1729/507/10
-f 1729/507/10 1735/507/10 1737/508/10
-f 1738/509/305 1701/510/305 1730/511/305
-f 1730/511/305 1737/512/305 1738/509/305
-f 1736/513/306 1702/514/306 1701/510/306
-f 1701/510/306 1738/509/306 1736/513/306
-f 1739/515/1 1737/516/1 1735/503/1
-f 1735/503/1 1731/502/1 1739/515/1
-f 1731/500/4 1732/500/4 1740/517/4
-f 1740/517/4 1739/517/4 1731/500/4
-f 1708/480/10 1741/518/10 1742/518/10
-f 1742/518/10 1709/480/10 1708/480/10
-f 1741/519/1 1708/491/1 1723/490/1
-f 1723/490/1 1736/474/1 1741/519/1
-f 1703/475/10 1743/481/10 1744/482/10
-f 1744/482/10 1704/476/10 1703/475/10
-f 1736/513/307 1721/513/307 1720/485/307
-f 1720/485/307 1741/520/307 1736/513/307
-f 1738/509/306 1728/509/306 1721/513/306
-f 1721/513/306 1736/513/306 1738/509/306
-f 1737/512/305 1726/512/305 1728/509/305
-f 1728/509/305 1738/509/305 1737/512/305
-f 1739/521/308 1724/521/308 1726/512/308
-f 1726/512/308 1737/512/308 1739/521/308
-f 1711/476/4 1745/477/4 1746/478/4
-f 1746/478/4 1712/475/4 1711/476/4
-f 1715/483/300 1727/522/300 1725/523/300
-f 1725/523/300 1716/484/300 1715/483/300
-f 1733/501/302 1719/524/302 1727/522/302
-f 1727/522/302 1715/483/302 1733/501/302
-f 1741/520/27 1703/525/27 1706/526/27
-f 1706/526/27 1742/527/27 1741/520/27
-f 1720/485/27 1743/528/27 1703/525/27
-f 1703/525/27 1741/520/27 1720/485/27
-f 1719/486/1 1744/486/1 1743/487/1
-f 1743/487/1 1720/487/1 1719/486/1
-f 1733/501/26 1704/501/26 1744/524/26
-f 1744/524/26 1719/524/26 1733/501/26
-f 1734/501/26 1705/501/26 1704/501/26
-f 1704/501/26 1733/501/26 1734/501/26
-f 1716/484/26 1711/484/26 1714/485/26
-f 1714/485/26 1717/485/26 1716/484/26
-f 1725/523/26 1745/523/26 1711/484/26
-f 1711/484/26 1716/484/26 1725/523/26
-f 1724/493/1 1746/529/1 1745/530/1
-f 1745/530/1 1725/494/1 1724/493/1
-f 1739/521/27 1712/531/27 1746/532/27
-f 1746/532/27 1724/521/27 1739/521/27
-f 1740/533/27 1713/531/27 1712/531/27
-f 1712/531/27 1739/521/27 1740/533/27
-f 1747/471/1 1748/474/1 1749/473/1
-f 1749/473/1 1750/472/1 1747/471/1
-f 1751/475/4 1752/478/4 1753/477/4
-f 1753/477/4 1754/476/4 1751/475/4
-f 1755/479/27 1756/479/27 1757/480/301
-f 1757/480/301 1758/480/301 1755/479/27
-f 1759/476/10 1760/482/10 1761/481/10
-f 1761/481/10 1762/475/10 1759/476/10
-f 1763/483/26 1764/483/26 1765/485/302
-f 1765/485/302 1766/484/302 1763/483/26
-f 1767/486/1 1768/488/1 1769/487/1
-f 1770/489/1 1755/492/1 1758/491/1
-f 1758/491/1 1771/490/1 1770/489/1
-f 1772/493/1 1773/495/1 1774/494/1
-f 1775/496/1 1774/494/1 1773/495/1
-f 1773/495/1 1776/497/1 1775/496/1
-f 1777/498/1 1750/472/1 1749/473/1
-f 1749/473/1 1778/499/1 1777/498/1
-f 1779/500/299 1780/500/299 1756/479/27
-f 1756/479/27 1755/479/27 1779/500/299
-f 1781/501/300 1782/501/300 1764/483/26
-f 1764/483/26 1763/483/26 1781/501/300
-f 1779/502/1 1755/492/1 1770/489/1
-f 1770/489/1 1783/503/1 1779/502/1
-f 1775/496/1 1776/497/1 1768/488/1
-f 1768/488/1 1767/486/1 1775/496/1
-f 1771/504/10 1784/505/10 1748/505/10
-f 1748/505/10 1747/504/10 1771/504/10
-f 1770/506/304 1771/504/304 1747/504/304
-f 1747/504/304 1750/506/304 1770/506/304
-f 1783/507/303 1770/506/303 1750/506/303
-f 1750/506/303 1777/507/303 1783/507/303
-f 1785/508/4 1783/507/4 1777/507/4
-f 1777/507/4 1778/508/4 1785/508/4
-f 1786/509/309 1785/512/309 1778/511/309
-f 1778/511/309 1749/510/309 1786/509/309
-f 1784/513/310 1786/509/310 1749/510/310
-f 1749/510/310 1748/514/310 1784/513/310
-f 1787/515/1 1779/502/1 1783/503/1
-f 1783/503/1 1785/516/1 1787/515/1
-f 1779/500/10 1787/517/10 1788/517/10
-f 1788/517/10 1780/500/10 1779/500/10
-f 1758/480/4 1757/480/4 1789/518/4
-f 1789/518/4 1790/518/4 1758/480/4
-f 1790/519/1 1784/474/1 1771/490/1
-f 1771/490/1 1758/491/1 1790/519/1
-f 1751/475/4 1754/476/4 1791/482/4
-f 1791/482/4 1792/481/4 1751/475/4
-f 1784/513/311 1790/520/311 1769/485/311
-f 1769/485/311 1768/513/311 1784/513/311
-f 1786/509/310 1784/513/310 1768/513/310
-f 1768/513/310 1776/509/310 1786/509/310
-f 1785/512/309 1786/509/309 1776/509/309
-f 1776/509/309 1773/512/309 1785/512/309
-f 1787/521/312 1785/512/312 1773/512/312
-f 1773/512/312 1772/521/312 1787/521/312
-f 1759/476/10 1762/475/10 1793/478/10
-f 1793/478/10 1794/477/10 1759/476/10
-f 1763/483/302 1766/484/302 1774/523/302
-f 1774/523/302 1775/522/302 1763/483/302
-f 1781/501/300 1763/483/300 1775/522/300
-f 1775/522/300 1767/524/300 1781/501/300
-f 1790/520/27 1789/527/27 1752/526/27
-f 1752/526/27 1751/525/27 1790/520/27
-f 1769/485/27 1790/520/27 1751/525/27
-f 1751/525/27 1792/528/27 1769/485/27
-f 1767/486/1 1769/487/1 1792/487/1
-f 1792/487/1 1791/486/1 1767/486/1
-f 1781/501/26 1767/524/26 1791/524/26
-f 1791/524/26 1754/501/26 1781/501/26
-f 1782/501/26 1781/501/26 1754/501/26
-f 1754/501/26 1753/501/26 1782/501/26
-f 1766/484/26 1765/485/26 1760/485/26
-f 1760/485/26 1759/484/26 1766/484/26
-f 1774/523/26 1766/484/26 1759/484/26
-f 1759/484/26 1794/523/26 1774/523/26
-f 1772/493/1 1774/494/1 1794/530/1
-f 1794/530/1 1793/529/1 1772/493/1
-f 1787/521/27 1772/521/27 1793/532/27
-f 1793/532/27 1762/531/27 1787/521/27
-f 1788/533/27 1787/521/27 1762/531/27
-f 1762/531/27 1761/531/27 1788/533/27
-f 1795/471/10 1796/474/10 1797/473/10
-f 1797/473/10 1798/472/10 1795/471/10
-f 1799/475/1 1800/478/1 1801/477/1
-f 1801/477/1 1802/476/1 1799/475/1
-f 1803/479/27 1804/479/27 1805/480/288
-f 1805/480/288 1806/480/288 1803/479/27
-f 1807/476/7 1808/482/7 1809/481/7
-f 1809/481/7 1810/475/7 1807/476/7
-f 1811/483/26 1812/483/26 1813/485/289
-f 1813/485/289 1814/484/289 1811/483/26
-f 1815/486/10 1816/488/10 1817/487/10
-f 1818/489/10 1803/492/10 1806/491/10
-f 1806/491/10 1819/490/10 1818/489/10
-f 1820/493/10 1821/495/10 1822/494/10
-f 1823/496/10 1822/494/10 1821/495/10
-f 1821/495/10 1824/497/10 1823/496/10
-f 1825/498/10 1798/472/10 1797/473/10
-f 1797/473/10 1826/499/10 1825/498/10
-f 1827/500/290 1828/500/290 1804/479/27
-f 1804/479/27 1803/479/27 1827/500/290
-f 1829/501/291 1830/501/291 1812/483/26
-f 1812/483/26 1811/483/26 1829/501/291
-f 1827/502/10 1803/492/10 1818/489/10
-f 1818/489/10 1831/503/10 1827/502/10
-f 1823/496/10 1824/497/10 1816/488/10
-f 1816/488/10 1815/486/10 1823/496/10
-f 1819/504/7 1832/505/7 1796/505/7
-f 1796/505/7 1795/504/7 1819/504/7
-f 1818/506/292 1819/504/292 1795/504/292
-f 1795/504/292 1798/506/292 1818/506/292
-f 1831/507/293 1818/506/293 1798/506/293
-f 1798/506/293 1825/507/293 1831/507/293
-f 1833/508/1 1831/507/1 1825/507/1
-f 1825/507/1 1826/508/1 1833/508/1
-f 1834/509/210 1833/512/210 1826/511/210
-f 1826/511/210 1797/510/210 1834/509/210
-f 1832/513/294 1834/509/294 1797/510/294
-f 1797/510/294 1796/514/294 1832/513/294
-f 1835/515/10 1827/502/10 1831/503/10
-f 1831/503/10 1833/516/10 1835/515/10
-f 1827/500/7 1835/517/7 1836/517/7
-f 1836/517/7 1828/500/7 1827/500/7
-f 1806/480/1 1805/480/1 1837/518/1
-f 1837/518/1 1838/518/1 1806/480/1
-f 1838/519/10 1832/474/10 1819/490/10
-f 1819/490/10 1806/491/10 1838/519/10
-f 1799/475/1 1802/476/1 1839/482/1
-f 1839/482/1 1840/481/1 1799/475/1
-f 1832/513/313 1838/520/295 1817/485/295
-f 1817/485/295 1816/513/313 1832/513/313
-f 1834/509/294 1832/513/294 1816/513/294
-f 1816/513/294 1824/509/294 1834/509/294
-f 1833/512/210 1834/509/210 1824/509/210
-f 1824/509/210 1821/512/210 1833/512/210
-f 1835/521/296 1833/512/296 1821/512/296
-f 1821/512/296 1820/521/296 1835/521/296
-f 1807/476/7 1810/475/7 1841/478/7
-f 1841/478/7 1842/477/7 1807/476/7
-f 1811/483/289 1814/484/289 1822/523/289
-f 1822/523/289 1823/522/289 1811/483/289
-f 1829/501/291 1811/483/291 1823/522/291
-f 1823/522/291 1815/524/291 1829/501/291
-f 1838/520/27 1837/527/27 1800/526/27
-f 1800/526/27 1799/525/27 1838/520/27
-f 1817/485/27 1838/520/27 1799/525/27
-f 1799/525/27 1840/528/27 1817/485/27
-f 1815/486/10 1817/487/10 1840/487/10
-f 1840/487/10 1839/486/10 1815/486/10
-f 1829/501/26 1815/524/26 1839/524/26
-f 1839/524/26 1802/501/26 1829/501/26
-f 1830/501/26 1829/501/26 1802/501/26
-f 1802/501/26 1801/501/26 1830/501/26
-f 1814/484/26 1813/485/26 1808/485/26
-f 1808/485/26 1807/484/26 1814/484/26
-f 1822/523/26 1814/484/26 1807/484/26
-f 1807/484/26 1842/523/26 1822/523/26
-f 1820/493/10 1822/494/10 1842/530/10
-f 1842/530/10 1841/529/10 1820/493/10
-f 1835/521/27 1820/521/27 1841/532/27
-f 1841/532/27 1810/531/27 1835/521/27
-f 1836/533/27 1835/521/27 1810/531/27
-f 1810/531/27 1809/531/27 1836/533/27
-f 1843/471/10 1844/474/10 1845/473/10
-f 1845/473/10 1846/472/10 1843/471/10
-f 1847/475/1 1848/478/1 1849/477/1
-f 1849/477/1 1850/476/1 1847/475/1
-f 1851/479/27 1852/479/27 1853/480/288
-f 1853/480/288 1854/480/288 1851/479/27
-f 1855/476/7 1856/482/7 1857/481/7
-f 1857/481/7 1858/475/7 1855/476/7
-f 1859/483/26 1860/483/26 1861/485/289
-f 1861/485/289 1862/484/289 1859/483/26
-f 1863/486/10 1864/488/10 1865/487/10
-f 1866/489/10 1851/492/10 1854/491/10
-f 1854/491/10 1867/490/10 1866/489/10
-f 1868/493/10 1869/495/10 1870/494/10
-f 1871/496/10 1870/494/10 1869/495/10
-f 1869/495/10 1872/497/10 1871/496/10
-f 1873/498/10 1846/472/10 1845/473/10
-f 1845/473/10 1874/499/10 1873/498/10
-f 1875/500/290 1876/500/290 1852/479/27
-f 1852/479/27 1851/479/27 1875/500/290
-f 1877/501/291 1878/501/291 1860/483/26
-f 1860/483/26 1859/483/26 1877/501/291
-f 1875/502/10 1851/492/10 1866/489/10
-f 1866/489/10 1879/503/10 1875/502/10
-f 1871/496/10 1872/497/10 1864/488/10
-f 1864/488/10 1863/486/10 1871/496/10
-f 1867/504/7 1880/505/7 1844/505/7
-f 1844/505/7 1843/504/7 1867/504/7
-f 1866/506/292 1867/504/292 1843/504/292
-f 1843/504/292 1846/506/292 1866/506/292
-f 1879/507/293 1866/506/293 1846/506/293
-f 1846/506/293 1873/507/293 1879/507/293
-f 1881/508/1 1879/507/1 1873/507/1
-f 1873/507/1 1874/508/1 1881/508/1
-f 1882/509/210 1881/512/210 1874/511/210
-f 1874/511/210 1845/510/210 1882/509/210
-f 1880/513/294 1882/509/294 1845/510/294
-f 1845/510/294 1844/514/294 1880/513/294
-f 1883/515/10 1875/502/10 1879/503/10
-f 1879/503/10 1881/516/10 1883/515/10
-f 1875/500/7 1883/517/7 1884/517/7
-f 1884/517/7 1876/500/7 1875/500/7
-f 1854/480/1 1853/480/1 1885/518/1
-f 1885/518/1 1886/518/1 1854/480/1
-f 1886/519/10 1880/474/10 1867/490/10
-f 1867/490/10 1854/491/10 1886/519/10
-f 1847/475/1 1850/476/1 1887/482/1
-f 1887/482/1 1888/481/1 1847/475/1
-f 1880/513/295 1886/520/295 1865/485/295
-f 1865/485/295 1864/513/295 1880/513/295
-f 1882/509/294 1880/513/294 1864/513/294
-f 1864/513/294 1872/509/294 1882/509/294
-f 1881/512/210 1882/509/210 1872/509/210
-f 1872/509/210 1869/512/210 1881/512/210
-f 1883/521/296 1881/512/296 1869/512/296
-f 1869/512/296 1868/521/296 1883/521/296
-f 1855/476/7 1858/475/7 1889/478/7
-f 1889/478/7 1890/477/7 1855/476/7
-f 1859/483/289 1862/484/289 1870/523/289
-f 1870/523/289 1871/522/289 1859/483/289
-f 1877/501/291 1859/483/291 1871/522/291
-f 1871/522/291 1863/524/291 1877/501/291
-f 1886/520/27 1885/527/27 1848/526/27
-f 1848/526/27 1847/525/27 1886/520/27
-f 1865/485/27 1886/520/27 1847/525/27
-f 1847/525/27 1888/528/27 1865/485/27
-f 1863/486/10 1865/487/10 1888/487/10
-f 1888/487/10 1887/486/10 1863/486/10
-f 1877/501/26 1863/524/26 1887/524/26
-f 1887/524/26 1850/501/26 1877/501/26
-f 1878/501/26 1877/501/26 1850/501/26
-f 1850/501/26 1849/501/26 1878/501/26
-f 1862/484/26 1861/485/26 1856/485/26
-f 1856/485/26 1855/484/26 1862/484/26
-f 1870/523/26 1862/484/26 1855/484/26
-f 1855/484/26 1890/523/26 1870/523/26
-f 1868/493/10 1870/494/10 1890/530/10
-f 1890/530/10 1889/529/10 1868/493/10
-f 1883/521/27 1868/521/27 1889/532/27
-f 1889/532/27 1858/531/27 1883/521/27
-f 1884/533/27 1883/521/27 1858/531/27
-f 1858/531/27 1857/531/27 1884/533/27
-f 1891/471/10 1892/474/10 1893/473/10
-f 1893/473/10 1894/472/10 1891/471/10
-f 1895/475/1 1896/478/1 1897/477/1
-f 1897/477/1 1898/476/1 1895/475/1
-f 1899/479/27 1900/479/27 1901/480/288
-f 1901/480/288 1902/480/288 1899/479/27
-f 1903/476/7 1904/482/7 1905/481/7
-f 1905/481/7 1906/475/7 1903/476/7
-f 1907/483/26 1908/483/26 1909/485/289
-f 1909/485/289 1910/484/289 1907/483/26
-f 1911/486/10 1912/488/10 1913/487/10
-f 1914/489/10 1899/492/10 1902/491/10
-f 1902/491/10 1915/490/10 1914/489/10
-f 1916/493/10 1917/495/10 1918/494/10
-f 1919/496/10 1918/494/10 1917/495/10
-f 1917/495/10 1920/497/10 1919/496/10
-f 1921/498/10 1894/472/10 1893/473/10
-f 1893/473/10 1922/499/10 1921/498/10
-f 1923/500/290 1924/500/290 1900/479/27
-f 1900/479/27 1899/479/27 1923/500/290
-f 1925/501/291 1926/501/291 1908/483/26
-f 1908/483/26 1907/483/26 1925/501/291
-f 1923/502/10 1899/492/10 1914/489/10
-f 1914/489/10 1927/503/10 1923/502/10
-f 1919/496/10 1920/497/10 1912/488/10
-f 1912/488/10 1911/486/10 1919/496/10
-f 1915/504/7 1928/505/7 1892/505/7
-f 1892/505/7 1891/504/7 1915/504/7
-f 1914/506/292 1915/504/292 1891/504/292
-f 1891/504/292 1894/506/292 1914/506/292
-f 1927/507/293 1914/506/293 1894/506/293
-f 1894/506/293 1921/507/293 1927/507/293
-f 1929/508/1 1927/507/1 1921/507/1
-f 1921/507/1 1922/508/1 1929/508/1
-f 1930/509/210 1929/512/210 1922/511/210
-f 1922/511/210 1893/510/210 1930/509/210
-f 1928/513/294 1930/509/294 1893/510/294
-f 1893/510/294 1892/514/294 1928/513/294
-f 1931/515/10 1923/502/10 1927/503/10
-f 1927/503/10 1929/516/10 1931/515/10
-f 1923/500/7 1931/517/7 1932/517/7
-f 1932/517/7 1924/500/7 1923/500/7
-f 1902/480/1 1901/480/1 1933/518/1
-f 1933/518/1 1934/518/1 1902/480/1
-f 1934/519/10 1928/474/10 1915/490/10
-f 1915/490/10 1902/491/10 1934/519/10
-f 1895/475/1 1898/476/1 1935/482/1
-f 1935/482/1 1936/481/1 1895/475/1
-f 1928/513/295 1934/520/295 1913/485/295
-f 1913/485/295 1912/513/295 1928/513/295
-f 1930/509/294 1928/513/294 1912/513/294
-f 1912/513/294 1920/509/294 1930/509/294
-f 1929/512/210 1930/509/210 1920/509/210
-f 1920/509/210 1917/512/210 1929/512/210
-f 1931/521/296 1929/512/296 1917/512/296
-f 1917/512/296 1916/521/296 1931/521/296
-f 1903/476/7 1906/475/7 1937/478/7
-f 1937/478/7 1938/477/7 1903/476/7
-f 1907/483/289 1910/484/289 1918/523/289
-f 1918/523/289 1919/522/289 1907/483/289
-f 1925/501/291 1907/483/291 1919/522/291
-f 1919/522/291 1911/524/291 1925/501/291
-f 1934/520/27 1933/527/27 1896/526/27
-f 1896/526/27 1895/525/27 1934/520/27
-f 1913/485/27 1934/520/27 1895/525/27
-f 1895/525/27 1936/528/27 1913/485/27
-f 1911/486/10 1913/487/10 1936/487/10
-f 1936/487/10 1935/486/10 1911/486/10
-f 1925/501/26 1911/524/26 1935/524/26
-f 1935/524/26 1898/501/26 1925/501/26
-f 1926/501/26 1925/501/26 1898/501/26
-f 1898/501/26 1897/501/26 1926/501/26
-f 1910/484/26 1909/485/26 1904/485/26
-f 1904/485/26 1903/484/26 1910/484/26
-f 1918/523/26 1910/484/26 1903/484/26
-f 1903/484/26 1938/523/26 1918/523/26
-f 1916/493/10 1918/494/10 1938/530/10
-f 1938/530/10 1937/529/10 1916/493/10
-f 1931/521/27 1916/521/27 1937/532/27
-f 1937/532/27 1906/531/27 1931/521/27
-f 1932/533/27 1931/521/27 1906/531/27
-f 1906/531/27 1905/531/27 1932/533/27
-f 1939/471/10 1940/474/10 1941/473/10
-f 1941/473/10 1942/472/10 1939/471/10
-f 1943/475/1 1944/478/1 1945/477/1
-f 1945/477/1 1946/476/1 1943/475/1
-f 1947/479/27 1948/479/27 1949/480/288
-f 1949/480/288 1950/480/288 1947/479/27
-f 1951/476/7 1952/482/7 1953/481/7
-f 1953/481/7 1954/475/7 1951/476/7
-f 1955/483/26 1956/483/26 1957/485/289
-f 1957/485/289 1958/484/289 1955/483/26
-f 1959/486/10 1960/488/10 1961/487/10
-f 1962/489/10 1947/492/10 1950/491/10
-f 1950/491/10 1963/490/10 1962/489/10
-f 1964/493/10 1965/495/10 1966/494/10
-f 1967/496/10 1966/494/10 1965/495/10
-f 1965/495/10 1968/497/10 1967/496/10
-f 1969/498/10 1942/472/10 1941/473/10
-f 1941/473/10 1970/499/10 1969/498/10
-f 1971/500/290 1972/500/290 1948/479/27
-f 1948/479/27 1947/479/27 1971/500/290
-f 1973/501/291 1974/501/291 1956/483/26
-f 1956/483/26 1955/483/26 1973/501/291
-f 1971/502/10 1947/492/10 1962/489/10
-f 1962/489/10 1975/503/10 1971/502/10
-f 1967/496/10 1968/497/10 1960/488/10
-f 1960/488/10 1959/486/10 1967/496/10
-f 1963/504/7 1976/505/7 1940/505/7
-f 1940/505/7 1939/504/7 1963/504/7
-f 1962/506/292 1963/504/292 1939/504/292
-f 1939/504/292 1942/506/292 1962/506/292
-f 1975/507/293 1962/506/293 1942/506/293
-f 1942/506/293 1969/507/293 1975/507/293
-f 1977/508/1 1975/507/1 1969/507/1
-f 1969/507/1 1970/508/1 1977/508/1
-f 1978/509/210 1977/512/210 1970/511/210
-f 1970/511/210 1941/510/210 1978/509/210
-f 1976/513/294 1978/509/294 1941/510/294
-f 1941/510/294 1940/514/294 1976/513/294
-f 1979/515/10 1971/502/10 1975/503/10
-f 1975/503/10 1977/516/10 1979/515/10
-f 1971/500/7 1979/517/7 1980/517/7
-f 1980/517/7 1972/500/7 1971/500/7
-f 1950/480/1 1949/480/1 1981/518/1
-f 1981/518/1 1982/518/1 1950/480/1
-f 1982/519/10 1976/474/10 1963/490/10
-f 1963/490/10 1950/491/10 1982/519/10
-f 1943/475/1 1946/476/1 1983/482/1
-f 1983/482/1 1984/481/1 1943/475/1
-f 1976/513/295 1982/520/295 1961/485/295
-f 1961/485/295 1960/513/295 1976/513/295
-f 1978/509/294 1976/513/294 1960/513/294
-f 1960/513/294 1968/509/294 1978/509/294
-f 1977/512/210 1978/509/210 1968/509/210
-f 1968/509/210 1965/512/210 1977/512/210
-f 1979/521/296 1977/512/296 1965/512/296
-f 1965/512/296 1964/521/296 1979/521/296
-f 1951/476/7 1954/475/7 1985/478/7
-f 1985/478/7 1986/477/7 1951/476/7
-f 1955/483/289 1958/484/289 1966/523/289
-f 1966/523/289 1967/522/289 1955/483/289
-f 1973/501/291 1955/483/291 1967/522/291
-f 1967/522/291 1959/524/291 1973/501/291
-f 1982/520/27 1981/527/27 1944/526/27
-f 1944/526/27 1943/525/27 1982/520/27
-f 1961/485/27 1982/520/27 1943/525/27
-f 1943/525/27 1984/528/27 1961/485/27
-f 1959/486/10 1961/487/10 1984/487/10
-f 1984/487/10 1983/486/10 1959/486/10
-f 1973/501/26 1959/524/26 1983/524/26
-f 1983/524/26 1946/501/26 1973/501/26
-f 1974/501/26 1973/501/26 1946/501/26
-f 1946/501/26 1945/501/26 1974/501/26
-f 1958/484/26 1957/485/26 1952/485/26
-f 1952/485/26 1951/484/26 1958/484/26
-f 1966/523/26 1958/484/26 1951/484/26
-f 1951/484/26 1986/523/26 1966/523/26
-f 1964/493/10 1966/494/10 1986/530/10
-f 1986/530/10 1985/529/10 1964/493/10
-f 1979/521/27 1964/521/27 1985/532/27
-f 1985/532/27 1954/531/27 1979/521/27
-f 1980/533/27 1979/521/27 1954/531/27
-f 1954/531/27 1953/531/27 1980/533/27
-f 1987/471/10 1988/472/10 1989/473/10
-f 1989/473/10 1990/474/10 1987/471/10
-f 1991/475/7 1992/476/7 1993/477/7
-f 1993/477/7 1994/478/7 1991/475/7
-f 1995/479/27 1996/480/290 1997/480/290
-f 1997/480/290 1998/479/27 1995/479/27
-f 1999/476/1 2000/475/1 2001/481/1
-f 2001/481/1 2002/482/1 1999/476/1
-f 2003/483/26 2004/484/291 2005/485/291
-f 2005/485/291 2006/483/26 2003/483/26
-f 2007/486/10 2008/487/10 2009/488/10
-f 2010/489/10 2011/490/10 1996/491/10
-f 1996/491/10 1995/492/10 2010/489/10
-f 2012/493/10 2013/494/10 2014/495/10
-f 2015/496/10 2016/497/10 2014/495/10
-f 2014/495/10 2013/494/10 2015/496/10
-f 2017/498/10 2018/499/10 1989/473/10
-f 1989/473/10 1988/472/10 2017/498/10
-f 2019/500/288 1995/479/27 1998/479/27
-f 1998/479/27 2020/500/288 2019/500/288
-f 2021/501/289 2003/483/26 2006/483/26
-f 2006/483/26 2022/501/289 2021/501/289
-f 2019/502/10 2023/503/10 2010/489/10
-f 2010/489/10 1995/492/10 2019/502/10
-f 2015/496/10 2007/486/10 2009/488/10
-f 2009/488/10 2016/497/10 2015/496/10
-f 2011/504/1 1987/504/1 1990/505/1
-f 1990/505/1 2024/505/1 2011/504/1
-f 2010/506/293 1988/506/293 1987/504/293
-f 1987/504/293 2011/504/293 2010/506/293
-f 2023/507/292 2017/507/292 1988/506/292
-f 1988/506/292 2010/506/292 2023/507/292
-f 2025/508/7 2018/508/7 2017/507/7
-f 2017/507/7 2023/507/7 2025/508/7
-f 2026/509/203 1989/510/203 2018/511/203
-f 2018/511/203 2025/512/203 2026/509/203
-f 2024/513/296 1990/514/296 1989/510/296
-f 1989/510/296 2026/509/296 2024/513/296
-f 2027/515/10 2025/516/10 2023/503/10
-f 2023/503/10 2019/502/10 2027/515/10
-f 2019/500/1 2020/500/1 2028/517/1
-f 2028/517/1 2027/517/1 2019/500/1
-f 1996/480/7 2029/518/7 2030/518/7
-f 2030/518/7 1997/480/7 1996/480/7
-f 2029/519/10 1996/491/10 2011/490/10
-f 2011/490/10 2024/474/10 2029/519/10
-f 1991/475/7 2031/481/7 2032/482/7
-f 2032/482/7 1992/476/7 1991/475/7
-f 2024/513/314 2009/513/314 2008/485/314
-f 2008/485/314 2029/520/314 2024/513/314
-f 2026/509/296 2016/509/296 2009/513/296
-f 2009/513/296 2024/513/296 2026/509/296
-f 2025/512/203 2014/512/203 2016/509/203
-f 2016/509/203 2026/509/203 2025/512/203
-f 2027/521/294 2012/521/294 2014/512/294
-f 2014/512/294 2025/512/294 2027/521/294
-f 1999/476/1 2033/477/1 2034/478/1
-f 2034/478/1 2000/475/1 1999/476/1
-f 2003/483/291 2015/522/291 2013/523/291
-f 2013/523/291 2004/484/291 2003/483/291
-f 2021/501/289 2007/524/289 2015/522/289
-f 2015/522/289 2003/483/289 2021/501/289
-f 2029/520/27 1991/525/27 1994/526/27
-f 1994/526/27 2030/527/27 2029/520/27
-f 2008/485/27 2031/528/27 1991/525/27
-f 1991/525/27 2029/520/27 2008/485/27
-f 2007/486/10 2032/486/10 2031/487/10
-f 2031/487/10 2008/487/10 2007/486/10
-f 2021/501/26 1992/501/26 2032/524/26
-f 2032/524/26 2007/524/26 2021/501/26
-f 2022/501/26 1993/501/26 1992/501/26
-f 1992/501/26 2021/501/26 2022/501/26
-f 2004/484/26 1999/484/26 2002/485/26
-f 2002/485/26 2005/485/26 2004/484/26
-f 2013/523/26 2033/523/26 1999/484/26
-f 1999/484/26 2004/484/26 2013/523/26
-f 2012/493/10 2034/529/10 2033/530/10
-f 2033/530/10 2013/494/10 2012/493/10
-f 2027/521/27 2000/531/27 2034/532/27
-f 2034/532/27 2012/521/27 2027/521/27
-f 2028/533/27 2001/531/27 2000/531/27
-f 2000/531/27 2027/521/27 2028/533/27
-f 2035/471/10 2036/472/10 2037/473/10
-f 2037/473/10 2038/474/10 2035/471/10
-f 2039/475/7 2040/476/7 2041/477/7
-f 2041/477/7 2042/478/7 2039/475/7
-f 2043/479/27 2044/480/290 2045/480/290
-f 2045/480/290 2046/479/27 2043/479/27
-f 2047/476/1 2048/475/1 2049/481/1
-f 2049/481/1 2050/482/1 2047/476/1
-f 2051/483/26 2052/484/291 2053/485/291
-f 2053/485/291 2054/483/26 2051/483/26
-f 2055/486/10 2056/487/10 2057/488/10
-f 2058/489/10 2059/490/10 2044/491/10
-f 2044/491/10 2043/492/10 2058/489/10
-f 2060/493/10 2061/494/10 2062/495/10
-f 2063/496/10 2064/497/10 2062/495/10
-f 2062/495/10 2061/494/10 2063/496/10
-f 2065/498/10 2066/499/10 2037/473/10
-f 2037/473/10 2036/472/10 2065/498/10
-f 2067/500/288 2043/479/27 2046/479/27
-f 2046/479/27 2068/500/288 2067/500/288
-f 2069/501/289 2051/483/26 2054/483/26
-f 2054/483/26 2070/501/289 2069/501/289
-f 2067/502/10 2071/503/10 2058/489/10
-f 2058/489/10 2043/492/10 2067/502/10
-f 2063/496/10 2055/486/10 2057/488/10
-f 2057/488/10 2064/497/10 2063/496/10
-f 2059/504/1 2035/504/1 2038/505/1
-f 2038/505/1 2072/505/1 2059/504/1
-f 2058/506/293 2036/506/293 2035/504/293
-f 2035/504/293 2059/504/293 2058/506/293
-f 2071/507/292 2065/507/292 2036/506/292
-f 2036/506/292 2058/506/292 2071/507/292
-f 2073/508/7 2066/508/7 2065/507/7
-f 2065/507/7 2071/507/7 2073/508/7
-f 2074/509/203 2037/510/203 2066/511/203
-f 2066/511/203 2073/512/203 2074/509/203
-f 2072/513/296 2038/514/296 2037/510/296
-f 2037/510/296 2074/509/296 2072/513/296
-f 2075/515/10 2073/516/10 2071/503/10
-f 2071/503/10 2067/502/10 2075/515/10
-f 2067/500/1 2068/500/1 2076/517/1
-f 2076/517/1 2075/517/1 2067/500/1
-f 2044/480/7 2077/518/7 2078/518/7
-f 2078/518/7 2045/480/7 2044/480/7
-f 2077/519/10 2044/491/10 2059/490/10
-f 2059/490/10 2072/474/10 2077/519/10
-f 2039/475/7 2079/481/7 2080/482/7
-f 2080/482/7 2040/476/7 2039/475/7
-f 2072/513/314 2057/513/314 2056/485/314
-f 2056/485/314 2077/520/314 2072/513/314
-f 2074/509/296 2064/509/296 2057/513/296
-f 2057/513/296 2072/513/296 2074/509/296
-f 2073/512/203 2062/512/203 2064/509/203
-f 2064/509/203 2074/509/203 2073/512/203
-f 2075/521/294 2060/521/294 2062/512/294
-f 2062/512/294 2073/512/294 2075/521/294
-f 2047/476/1 2081/477/1 2082/478/1
-f 2082/478/1 2048/475/1 2047/476/1
-f 2051/483/291 2063/522/291 2061/523/291
-f 2061/523/291 2052/484/291 2051/483/291
-f 2069/501/289 2055/524/289 2063/522/298
-f 2063/522/298 2051/483/298 2069/501/289
-f 2077/520/27 2039/525/27 2042/526/27
-f 2042/526/27 2078/527/27 2077/520/27
-f 2056/485/27 2079/528/27 2039/525/27
-f 2039/525/27 2077/520/27 2056/485/27
-f 2055/486/10 2080/486/10 2079/487/10
-f 2079/487/10 2056/487/10 2055/486/10
-f 2069/501/26 2040/501/26 2080/524/26
-f 2080/524/26 2055/524/26 2069/501/26
-f 2070/501/26 2041/501/26 2040/501/26
-f 2040/501/26 2069/501/26 2070/501/26
-f 2052/484/26 2047/484/26 2050/485/26
-f 2050/485/26 2053/485/26 2052/484/26
-f 2061/523/26 2081/523/26 2047/484/26
-f 2047/484/26 2052/484/26 2061/523/26
-f 2060/493/10 2082/529/10 2081/530/10
-f 2081/530/10 2061/494/10 2060/493/10
-f 2075/521/27 2048/531/27 2082/532/27
-f 2082/532/27 2060/521/27 2075/521/27
-f 2076/533/27 2049/531/27 2048/531/27
-f 2048/531/27 2075/521/27 2076/533/27
-f 2083/471/7 2084/472/7 2085/473/7
-f 2085/473/7 2086/474/7 2083/471/7
-f 2087/475/4 2088/476/4 2089/477/4
-f 2089/477/4 2090/478/4 2087/475/4
-f 2091/479/27 2092/480/301 2093/480/301
-f 2093/480/301 2094/479/27 2091/479/27
-f 2095/476/10 2096/475/10 2097/481/10
-f 2097/481/10 2098/482/10 2095/476/10
-f 2099/483/26 2100/484/302 2101/485/302
-f 2101/485/302 2102/483/26 2099/483/26
-f 2103/486/7 2104/487/7 2105/488/7
-f 2106/489/7 2107/490/7 2092/491/7
-f 2092/491/7 2091/492/7 2106/489/7
-f 2108/493/7 2109/494/7 2110/495/7
-f 2111/496/7 2112/497/7 2110/495/7
-f 2110/495/7 2109/494/7 2111/496/7
-f 2113/498/7 2114/499/7 2085/473/7
-f 2085/473/7 2084/472/7 2113/498/7
-f 2115/500/299 2091/479/27 2094/479/27
-f 2094/479/27 2116/500/299 2115/500/299
-f 2117/501/300 2099/483/26 2102/483/26
-f 2102/483/26 2118/501/300 2117/501/300
-f 2115/502/7 2119/503/7 2106/489/7
-f 2106/489/7 2091/492/7 2115/502/7
-f 2111/496/7 2103/486/7 2105/488/7
-f 2105/488/7 2112/497/7 2111/496/7
-f 2107/504/10 2083/504/10 2086/505/10
-f 2086/505/10 2120/505/10 2107/504/10
-f 2106/506/304 2084/506/304 2083/504/304
-f 2083/504/304 2107/504/304 2106/506/304
-f 2119/507/303 2113/507/303 2084/506/303
-f 2084/506/303 2106/506/303 2119/507/303
-f 2121/508/4 2114/508/4 2113/507/4
-f 2113/507/4 2119/507/4 2121/508/4
-f 2122/509/309 2085/510/309 2114/511/309
-f 2114/511/309 2121/512/309 2122/509/309
-f 2120/513/310 2086/514/310 2085/510/310
-f 2085/510/310 2122/509/310 2120/513/310
-f 2123/515/7 2121/516/7 2119/503/7
-f 2119/503/7 2115/502/7 2123/515/7
-f 2115/500/10 2116/500/10 2124/517/10
-f 2124/517/10 2123/517/10 2115/500/10
-f 2092/480/4 2125/518/4 2126/518/4
-f 2126/518/4 2093/480/4 2092/480/4
-f 2125/519/7 2092/491/7 2107/490/7
-f 2107/490/7 2120/474/7 2125/519/7
-f 2087/475/4 2127/481/4 2128/482/4
-f 2128/482/4 2088/476/4 2087/475/4
-f 2120/513/311 2105/513/311 2104/485/311
-f 2104/485/311 2125/520/311 2120/513/311
-f 2122/509/310 2112/509/310 2105/513/310
-f 2105/513/310 2120/513/310 2122/509/310
-f 2121/512/309 2110/512/309 2112/509/309
-f 2112/509/309 2122/509/309 2121/512/309
-f 2123/521/312 2108/521/312 2110/512/312
-f 2110/512/312 2121/512/312 2123/521/312
-f 2095/476/10 2129/477/10 2130/478/10
-f 2130/478/10 2096/475/10 2095/476/10
-f 2099/483/302 2111/522/302 2109/523/302
-f 2109/523/302 2100/484/302 2099/483/302
-f 2117/501/300 2103/524/300 2111/522/300
-f 2111/522/300 2099/483/300 2117/501/300
-f 2125/520/27 2087/525/27 2090/526/27
-f 2090/526/27 2126/527/27 2125/520/27
-f 2104/485/27 2127/528/27 2087/525/27
-f 2087/525/27 2125/520/27 2104/485/27
-f 2103/486/7 2128/486/7 2127/487/7
-f 2127/487/7 2104/487/7 2103/486/7
-f 2117/501/26 2088/501/26 2128/524/26
-f 2128/524/26 2103/524/26 2117/501/26
-f 2118/501/26 2089/501/26 2088/501/26
-f 2088/501/26 2117/501/26 2118/501/26
-f 2100/484/26 2095/484/26 2098/485/26
-f 2098/485/26 2101/485/26 2100/484/26
-f 2109/523/26 2129/523/26 2095/484/26
-f 2095/484/26 2100/484/26 2109/523/26
-f 2108/493/7 2130/529/7 2129/530/7
-f 2129/530/7 2109/494/7 2108/493/7
-f 2123/521/27 2096/531/27 2130/532/27
-f 2130/532/27 2108/521/27 2123/521/27
-f 2124/533/27 2097/531/27 2096/531/27
-f 2096/531/27 2123/521/27 2124/533/27
-f 2131/471/7 2132/472/7 2133/473/7
-f 2133/473/7 2134/474/7 2131/471/7
-f 2135/475/4 2136/476/4 2137/477/4
-f 2137/477/4 2138/478/4 2135/475/4
-f 2139/479/27 2140/480/301 2141/480/301
-f 2141/480/301 2142/479/27 2139/479/27
-f 2143/476/10 2144/475/10 2145/481/10
-f 2145/481/10 2146/482/10 2143/476/10
-f 2147/483/26 2148/484/302 2149/485/302
-f 2149/485/302 2150/483/26 2147/483/26
-f 2151/486/7 2152/487/7 2153/488/7
-f 2154/489/7 2155/490/7 2140/491/7
-f 2140/491/7 2139/492/7 2154/489/7
-f 2156/493/7 2157/494/7 2158/495/7
-f 2159/496/7 2160/497/7 2158/495/7
-f 2158/495/7 2157/494/7 2159/496/7
-f 2161/498/7 2162/499/7 2133/473/7
-f 2133/473/7 2132/472/7 2161/498/7
-f 2163/500/299 2139/479/27 2142/479/27
-f 2142/479/27 2164/500/299 2163/500/299
-f 2165/501/300 2147/483/26 2150/483/26
-f 2150/483/26 2166/501/300 2165/501/300
-f 2163/502/7 2167/503/7 2154/489/7
-f 2154/489/7 2139/492/7 2163/502/7
-f 2159/496/7 2151/486/7 2153/488/7
-f 2153/488/7 2160/497/7 2159/496/7
-f 2155/504/10 2131/504/10 2134/505/10
-f 2134/505/10 2168/505/10 2155/504/10
-f 2154/506/304 2132/506/304 2131/504/304
-f 2131/504/304 2155/504/304 2154/506/304
-f 2167/507/303 2161/507/303 2132/506/303
-f 2132/506/303 2154/506/303 2167/507/303
-f 2169/508/4 2162/508/4 2161/507/4
-f 2161/507/4 2167/507/4 2169/508/4
-f 2170/509/309 2133/510/309 2162/511/309
-f 2162/511/309 2169/512/309 2170/509/309
-f 2168/513/310 2134/514/310 2133/510/310
-f 2133/510/310 2170/509/310 2168/513/310
-f 2171/515/7 2169/516/7 2167/503/7
-f 2167/503/7 2163/502/7 2171/515/7
-f 2163/500/10 2164/500/10 2172/517/10
-f 2172/517/10 2171/517/10 2163/500/10
-f 2140/480/4 2173/518/4 2174/518/4
-f 2174/518/4 2141/480/4 2140/480/4
-f 2173/519/7 2140/491/7 2155/490/7
-f 2155/490/7 2168/474/7 2173/519/7
-f 2135/475/4 2175/481/4 2176/482/4
-f 2176/482/4 2136/476/4 2135/475/4
-f 2168/513/311 2153/513/311 2152/485/311
-f 2152/485/311 2173/520/311 2168/513/311
-f 2170/509/310 2160/509/310 2153/513/310
-f 2153/513/310 2168/513/310 2170/509/310
-f 2169/512/309 2158/512/309 2160/509/309
-f 2160/509/309 2170/509/309 2169/512/309
-f 2171/521/312 2156/521/312 2158/512/312
-f 2158/512/312 2169/512/312 2171/521/312
-f 2143/476/10 2177/477/10 2178/478/10
-f 2178/478/10 2144/475/10 2143/476/10
-f 2147/483/302 2159/522/302 2157/523/302
-f 2157/523/302 2148/484/302 2147/483/302
-f 2165/501/300 2151/524/300 2159/522/300
-f 2159/522/300 2147/483/300 2165/501/300
-f 2173/520/27 2135/525/27 2138/526/27
-f 2138/526/27 2174/527/27 2173/520/27
-f 2152/485/27 2175/528/27 2135/525/27
-f 2135/525/27 2173/520/27 2152/485/27
-f 2151/486/7 2176/486/7 2175/487/7
-f 2175/487/7 2152/487/7 2151/486/7
-f 2165/501/26 2136/501/26 2176/524/26
-f 2176/524/26 2151/524/26 2165/501/26
-f 2166/501/26 2137/501/26 2136/501/26
-f 2136/501/26 2165/501/26 2166/501/26
-f 2148/484/26 2143/484/26 2146/485/26
-f 2146/485/26 2149/485/26 2148/484/26
-f 2157/523/26 2177/523/26 2143/484/26
-f 2143/484/26 2148/484/26 2157/523/26
-f 2156/493/7 2178/529/7 2177/530/7
-f 2177/530/7 2157/494/7 2156/493/7
-f 2171/521/27 2144/531/27 2178/532/27
-f 2178/532/27 2156/521/27 2171/521/27
-f 2172/533/27 2145/531/27 2144/531/27
-f 2144/531/27 2171/521/27 2172/533/27
-f 2179/471/7 2180/474/7 2181/473/7
-f 2181/473/7 2182/472/7 2179/471/7
-f 2183/475/10 2184/478/10 2185/477/10
-f 2185/477/10 2186/476/10 2183/475/10
-f 2187/479/27 2188/479/27 2189/480/299
-f 2189/480/299 2190/480/299 2187/479/27
-f 2191/476/4 2192/482/4 2193/481/4
-f 2193/481/4 2194/475/4 2191/476/4
-f 2195/483/26 2196/483/26 2197/485/300
-f 2197/485/300 2198/484/300 2195/483/26
-f 2199/486/7 2200/488/7 2201/487/7
-f 2202/489/7 2187/492/7 2190/491/7
-f 2190/491/7 2203/490/7 2202/489/7
-f 2204/493/7 2205/495/7 2206/494/7
-f 2207/496/7 2206/494/7 2205/495/7
-f 2205/495/7 2208/497/7 2207/496/7
-f 2209/498/7 2182/472/7 2181/473/7
-f 2181/473/7 2210/499/7 2209/498/7
-f 2211/500/301 2212/500/301 2188/479/27
-f 2188/479/27 2187/479/27 2211/500/301
-f 2213/501/302 2214/501/302 2196/483/26
-f 2196/483/26 2195/483/26 2213/501/302
-f 2211/502/7 2187/492/7 2202/489/7
-f 2202/489/7 2215/503/7 2211/502/7
-f 2207/496/7 2208/497/7 2200/488/7
-f 2200/488/7 2199/486/7 2207/496/7
-f 2203/504/4 2216/505/4 2180/505/4
-f 2180/505/4 2179/504/4 2203/504/4
-f 2202/506/303 2203/504/303 2179/504/303
-f 2179/504/303 2182/506/303 2202/506/303
-f 2215/507/304 2202/506/304 2182/506/304
-f 2182/506/304 2209/507/304 2215/507/304
-f 2217/508/10 2215/507/10 2209/507/10
-f 2209/507/10 2210/508/10 2217/508/10
-f 2218/509/305 2217/512/305 2210/511/305
-f 2210/511/305 2181/510/305 2218/509/305
-f 2216/513/306 2218/509/306 2181/510/306
-f 2181/510/306 2180/514/306 2216/513/306
-f 2219/515/7 2211/502/7 2215/503/7
-f 2215/503/7 2217/516/7 2219/515/7
-f 2211/500/4 2219/517/4 2220/517/4
-f 2220/517/4 2212/500/4 2211/500/4
-f 2190/480/10 2189/480/10 2221/518/10
-f 2221/518/10 2222/518/10 2190/480/10
-f 2222/519/7 2216/474/7 2203/490/7
-f 2203/490/7 2190/491/7 2222/519/7
-f 2183/475/10 2186/476/10 2223/482/10
-f 2223/482/10 2224/481/10 2183/475/10
-f 2216/513/307 2222/520/307 2201/485/307
-f 2201/485/307 2200/513/307 2216/513/307
-f 2218/509/306 2216/513/306 2200/513/306
-f 2200/513/306 2208/509/306 2218/509/306
-f 2217/512/305 2218/509/305 2208/509/305
-f 2208/509/305 2205/512/305 2217/512/305
-f 2219/521/308 2217/512/308 2205/512/308
-f 2205/512/308 2204/521/308 2219/521/308
-f 2191/476/4 2194/475/4 2225/478/4
-f 2225/478/4 2226/477/4 2191/476/4
-f 2195/483/300 2198/484/300 2206/523/300
-f 2206/523/300 2207/522/300 2195/483/300
-f 2213/501/302 2195/483/302 2207/522/302
-f 2207/522/302 2199/524/302 2213/501/302
-f 2222/520/27 2221/527/27 2184/526/27
-f 2184/526/27 2183/525/27 2222/520/27
-f 2201/485/27 2222/520/27 2183/525/27
-f 2183/525/27 2224/528/27 2201/485/27
-f 2199/486/7 2201/487/7 2224/487/7
-f 2224/487/7 2223/486/7 2199/486/7
-f 2213/501/26 2199/524/26 2223/524/26
-f 2223/524/26 2186/501/26 2213/501/26
-f 2214/501/26 2213/501/26 2186/501/26
-f 2186/501/26 2185/501/26 2214/501/26
-f 2198/484/26 2197/485/26 2192/485/26
-f 2192/485/26 2191/484/26 2198/484/26
-f 2206/523/26 2198/484/26 2191/484/26
-f 2191/484/26 2226/523/26 2206/523/26
-f 2204/493/7 2206/494/7 2226/530/7
-f 2226/530/7 2225/529/7 2204/493/7
-f 2219/521/27 2204/521/27 2225/532/27
-f 2225/532/27 2194/531/27 2219/521/27
-f 2220/533/27 2219/521/27 2194/531/27
-f 2194/531/27 2193/531/27 2220/533/27
-f 2227/471/10 2228/472/10 2229/473/10
-f 2229/473/10 2230/474/10 2227/471/10
-f 2231/475/7 2232/476/7 2233/477/7
-f 2233/477/7 2234/478/7 2231/475/7
-f 2235/479/27 2236/480/290 2237/480/290
-f 2237/480/290 2238/479/27 2235/479/27
-f 2239/476/1 2240/475/1 2241/481/1
-f 2241/481/1 2242/482/1 2239/476/1
-f 2243/483/26 2244/484/291 2245/485/291
-f 2245/485/291 2246/483/26 2243/483/26
-f 2247/486/10 2248/487/10 2249/488/10
-f 2250/489/10 2251/490/10 2236/491/10
-f 2236/491/10 2235/492/10 2250/489/10
-f 2252/493/10 2253/494/10 2254/495/10
-f 2255/496/10 2256/497/10 2254/495/10
-f 2254/495/10 2253/494/10 2255/496/10
-f 2257/498/10 2258/499/10 2229/473/10
-f 2229/473/10 2228/472/10 2257/498/10
-f 2259/500/288 2235/479/27 2238/479/27
-f 2238/479/27 2260/500/288 2259/500/288
-f 2261/501/289 2243/483/26 2246/483/26
-f 2246/483/26 2262/501/289 2261/501/289
-f 2259/502/10 2263/503/10 2250/489/10
-f 2250/489/10 2235/492/10 2259/502/10
-f 2255/496/10 2247/486/10 2249/488/10
-f 2249/488/10 2256/497/10 2255/496/10
-f 2251/504/1 2227/504/1 2230/505/1
-f 2230/505/1 2264/505/1 2251/504/1
-f 2250/506/293 2228/506/293 2227/504/293
-f 2227/504/293 2251/504/293 2250/506/293
-f 2263/507/292 2257/507/292 2228/506/292
-f 2228/506/292 2250/506/292 2263/507/292
-f 2265/508/7 2258/508/7 2257/507/7
-f 2257/507/7 2263/507/7 2265/508/7
-f 2266/509/203 2229/510/203 2258/511/203
-f 2258/511/203 2265/512/203 2266/509/203
-f 2264/513/296 2230/514/296 2229/510/296
-f 2229/510/296 2266/509/296 2264/513/296
-f 2267/515/10 2265/516/10 2263/503/10
-f 2263/503/10 2259/502/10 2267/515/10
-f 2259/500/1 2260/500/1 2268/517/1
-f 2268/517/1 2267/517/1 2259/500/1
-f 2236/480/7 2269/518/7 2270/518/7
-f 2270/518/7 2237/480/7 2236/480/7
-f 2269/519/10 2236/491/10 2251/490/10
-f 2251/490/10 2264/474/10 2269/519/10
-f 2231/475/7 2271/481/7 2272/482/7
-f 2272/482/7 2232/476/7 2231/475/7
-f 2264/513/314 2249/513/314 2248/485/314
-f 2248/485/314 2269/520/314 2264/513/314
-f 2266/509/296 2256/509/296 2249/513/296
-f 2249/513/296 2264/513/296 2266/509/296
-f 2265/512/203 2254/512/203 2256/509/203
-f 2256/509/203 2266/509/203 2265/512/203
-f 2267/521/294 2252/521/294 2254/512/294
-f 2254/512/294 2265/512/294 2267/521/294
-f 2239/476/1 2273/477/1 2274/478/1
-f 2274/478/1 2240/475/1 2239/476/1
-f 2243/483/297 2255/522/297 2253/523/291
-f 2253/523/291 2244/484/291 2243/483/297
-f 2261/501/289 2247/524/289 2255/522/289
-f 2255/522/289 2243/483/289 2261/501/289
-f 2269/520/27 2231/525/27 2234/526/27
-f 2234/526/27 2270/527/27 2269/520/27
-f 2248/485/27 2271/528/27 2231/525/27
-f 2231/525/27 2269/520/27 2248/485/27
-f 2247/486/10 2272/486/10 2271/487/10
-f 2271/487/10 2248/487/10 2247/486/10
-f 2261/501/26 2232/501/26 2272/524/26
-f 2272/524/26 2247/524/26 2261/501/26
-f 2262/501/26 2233/501/26 2232/501/26
-f 2232/501/26 2261/501/26 2262/501/26
-f 2244/484/26 2239/484/26 2242/485/26
-f 2242/485/26 2245/485/26 2244/484/26
-f 2253/523/26 2273/523/26 2239/484/26
-f 2239/484/26 2244/484/26 2253/523/26
-f 2252/493/10 2274/529/10 2273/530/10
-f 2273/530/10 2253/494/10 2252/493/10
-f 2267/521/27 2240/531/27 2274/532/27
-f 2274/532/27 2252/521/27 2267/521/27
-f 2268/533/27 2241/531/27 2240/531/27
-f 2240/531/27 2267/521/27 2268/533/27
-f 2275/534/4 2276/535/4 2277/536/4
-f 2277/536/4 2278/537/4 2275/534/4
-f 2279/538/4 2280/539/4 2281/540/4
-f 2281/540/4 2282/541/4 2279/538/4
-f 2283/542/4 2284/543/4 2276/535/4
-f 2276/535/4 2275/534/4 2283/542/4
-f 2280/539/4 2278/537/4 2277/536/4
-f 2277/536/4 2281/540/4 2280/539/4
-f 2285/544/315 2286/545/315 2287/546/316
-f 2287/546/316 2288/547/316 2285/544/315
-f 2286/548/4 2289/549/4 2290/550/4
-f 2290/550/4 2287/551/4 2286/548/4
-f 2289/552/317 2291/553/317 2292/554/318
-f 2292/554/318 2290/555/318 2289/552/317
-f 2288/547/316 2287/546/316 2293/556/319
-f 2293/556/319 2294/557/319 2288/547/316
-f 2287/551/4 2290/550/4 2295/558/4
-f 2295/558/4 2293/559/4 2287/551/4
-f 2290/555/318 2292/554/318 2296/560/320
-f 2296/560/320 2295/561/320 2290/555/318
-f 2294/557/319 2293/556/319 2297/562/27
-f 2297/562/27 2298/563/27 2294/557/319
-f 2293/559/4 2295/558/4 2299/564/4
-f 2299/564/4 2297/565/4 2293/559/4
-f 2295/561/320 2296/560/320 2300/566/26
-f 2300/566/26 2299/567/26 2295/561/320
-f 2298/563/27 2297/562/27 2301/556/321
-f 2301/556/321 2302/557/321 2298/563/27
-f 2297/565/4 2299/564/4 2303/568/4
-f 2303/568/4 2301/569/4 2297/565/4
-f 2299/567/26 2300/566/26 2304/560/322
-f 2304/560/322 2303/561/322 2299/567/26
-f 2302/557/321 2301/556/321 2305/546/323
-f 2305/546/323 2306/547/323 2302/557/321
-f 2301/569/4 2303/568/4 2307/570/4
-f 2307/570/4 2305/571/4 2301/569/4
-f 2303/561/322 2304/560/322 2308/554/324
-f 2308/554/324 2307/555/324 2303/561/322
-f 2306/547/323 2305/546/323 2309/545/325
-f 2309/545/325 2310/544/325 2306/547/323
-f 2305/571/4 2307/570/4 2311/572/4
-f 2311/572/4 2309/573/4 2305/571/4
-f 2307/555/324 2308/554/324 2312/553/326
-f 2312/553/326 2311/552/326 2307/555/324
-f 2313/574/327 2314/575/327 2315/576/327
-f 2315/576/327 2316/577/327 2313/574/327
-f 2317/578/328 2313/579/328 2316/580/328
-f 2316/580/328 2318/581/328 2317/578/328
-f 2319/579/329 2317/578/329 2318/581/329
-f 2318/581/329 2320/580/329 2319/579/329
-f 2319/578/330 2320/581/330 2315/580/330
-f 2315/580/330 2314/579/330 2319/578/330
-f 2321/582/331 2316/577/331 2315/576/331
-f 2315/576/331 2322/583/332 2321/582/331
-f 2318/581/333 2316/580/333 2321/584/333
-f 2321/584/333 2323/585/333 2318/581/333
-f 2324/584/334 2320/580/334 2318/581/334
-f 2318/581/334 2323/585/334 2324/584/334
-f 2322/584/335 2315/580/335 2320/581/335
-f 2320/581/335 2324/585/335 2322/584/335
-f 2325/586/336 2326/587/26 2327/588/26
-f 2327/588/26 2328/589/336 2325/586/336
-f 2328/590/1 2327/591/1 2329/592/1
-f 2329/592/1 2330/593/1 2328/590/1
-f 2330/589/337 2329/588/27 2331/587/27
-f 2331/587/27 2332/586/337 2330/589/337
-f 2327/588/26 2326/587/26 2333/594/338
-f 2333/594/338 2334/595/338 2327/588/26
-f 2329/592/1 2327/591/1 2334/596/1
-f 2334/596/1 2335/597/1 2329/592/1
-f 2331/587/27 2329/588/27 2335/595/339
-f 2335/595/339 2336/594/339 2331/587/27
-f 2337/586/340 2338/587/26 2339/588/26
-f 2339/588/26 2340/589/340 2337/586/340
-f 2340/590/4 2339/591/4 2341/592/4
-f 2341/592/4 2342/593/4 2340/590/4
-f 2342/589/341 2341/588/27 2343/587/27
-f 2343/587/27 2344/586/342 2342/589/341
-f 2339/588/26 2338/587/26 2345/594/343
-f 2345/594/343 2346/595/343 2339/588/26
-f 2341/592/4 2339/591/4 2346/596/4
-f 2346/596/4 2347/597/4 2341/592/4
-f 2343/587/27 2341/588/27 2347/595/344
-f 2347/595/344 2348/594/344 2343/587/27
-f 2347/598/1 2346/596/1 2345/599/1
-f 2345/599/1 2348/600/1 2347/598/1
-f 2349/574/345 2350/577/345 2351/576/345
-f 2351/576/345 2352/575/345 2349/574/345
-f 2353/578/346 2354/581/346 2350/580/346
-f 2350/580/346 2349/579/346 2353/578/346
-f 2355/579/347 2356/580/347 2354/581/347
-f 2354/581/347 2353/578/347 2355/579/347
-f 2355/578/348 2352/579/348 2351/580/348
-f 2351/580/348 2356/581/348 2355/578/348
-f 2357/582/175 2358/583/349 2351/576/349
-f 2351/576/349 2350/577/349 2357/582/175
-f 2354/581/350 2359/585/350 2357/584/350
-f 2357/584/350 2350/580/350 2354/581/350
-f 2360/584/351 2359/585/351 2354/581/351
-f 2354/581/351 2356/580/351 2360/584/351
-f 2358/584/352 2360/585/352 2356/581/353
-f 2356/581/353 2351/580/352 2358/584/352
-f 2361/586/340 2362/589/340 2363/588/26
-f 2363/588/26 2364/587/26 2361/586/340
-f 2362/590/10 2365/593/10 2366/592/10
-f 2366/592/10 2363/591/10 2362/590/10
-f 2365/589/341 2367/586/342 2368/587/27
-f 2368/587/27 2366/588/27 2365/589/341
-f 2363/588/26 2369/595/343 2370/594/343
-f 2370/594/343 2364/587/26 2363/588/26
-f 2366/592/10 2371/597/10 2369/596/10
-f 2369/596/10 2363/591/10 2366/592/10
-f 2368/587/27 2372/594/344 2371/595/344
-f 2371/595/344 2366/588/27 2368/587/27
-f 2370/599/1 2369/596/1 2371/598/1
-f 2371/598/1 2372/600/1 2370/599/1
-f 2373/586/354 2374/589/340 2375/588/26
-f 2375/588/26 2376/587/26 2373/586/354
-f 2374/590/10 2377/593/10 2378/592/10
-f 2378/592/10 2375/591/10 2374/590/10
-f 2377/589/342 2379/586/341 2380/587/27
-f 2380/587/27 2378/588/27 2377/589/342
-f 2375/588/26 2381/595/355 2382/594/355
-f 2382/594/355 2376/587/26 2375/588/26
-f 2378/592/10 2383/597/10 2381/596/10
-f 2381/596/10 2375/591/10 2378/592/10
-f 2380/587/27 2384/594/356 2383/595/344
-f 2383/595/344 2378/588/27 2380/587/27
-f 2385/601/7 2386/602/7 2387/603/7
-f 2387/603/7 691/604/7 2385/601/7
-f 2388/605/4 2389/606/4 2390/607/4
-f 2390/607/4 690/608/4 2388/605/4
-f 2391/601/1 2392/602/1 2393/609/1
-f 2393/609/1 692/610/1 2391/601/1
-f 2394/611/10 2395/612/10 2396/613/10
-f 2396/613/10 693/614/10 2394/611/10
-f 690/610/7 2390/609/7 2386/602/7
-f 2386/602/7 2385/601/7 690/610/7
-f 693/604/1 2396/603/1 2392/602/1
-f 2392/602/1 2391/601/1 693/604/1
-f 692/615/4 2393/616/4 2389/606/4
-f 2389/606/4 2388/605/4 692/615/4
-f 691/617/10 2387/618/10 2395/612/10
-f 2395/612/10 2394/611/10 691/617/10
-f 2397/619/357 2398/620/358 2399/621/358
-f 2399/621/358 2400/622/357 2397/619/357
-f 2398/620/358 2401/623/359 2402/624/359
-f 2402/624/359 2399/621/358 2398/620/358
-f 2403/625/360 2404/626/10 2398/627/10
-f 2398/627/10 2397/628/360 2403/625/360
-f 2398/627/10 2404/626/10 2405/629/361
-f 2405/629/361 2401/630/361 2398/627/10
-f 2403/619/315 2406/622/315 2407/621/362
-f 2407/621/362 2404/620/362 2403/619/315
-f 2404/620/362 2407/621/362 2408/624/363
-f 2408/624/363 2405/623/363 2404/620/362
-f 2406/631/364 2400/632/364 2399/633/365
-f 2399/633/365 2407/634/365 2406/631/364
-f 2399/633/365 2402/635/366 2408/636/366
-f 2408/636/366 2407/634/365 2399/633/365
-f 2409/637/7 2410/638/7 2411/639/7
-f 2411/639/7 2412/640/7 2409/637/7
-f 2413/640/4 2412/641/4 2411/642/4
-f 2411/642/4 2414/643/4 2413/640/4
-f 2413/637/1 2414/638/1 2415/639/1
-f 2415/639/1 2416/640/1 2413/637/1
-f 2417/644/1 2418/645/1 2419/646/1
-f 2419/646/1 2420/647/1 2417/644/1
-f 2421/647/7 2422/644/7 2423/645/7
-f 2423/645/7 2424/646/7 2421/647/7
-f 2418/648/367 2417/649/367 2425/650/367
-f 2425/650/367 2426/651/367 2418/648/367
-f 2425/652/4 2417/567/4 2420/653/4
-f 2420/653/4 2427/654/4 2425/652/4
-f 2420/648/368 2419/649/368 2428/650/368
-f 2428/650/368 2427/651/368 2420/648/368
-f 2429/637/7 2430/638/7 2431/639/7
-f 2431/639/7 2432/640/7 2429/637/7
-f 2432/640/4 2431/643/4 2433/642/4
-f 2433/642/4 2434/641/4 2432/640/4
-f 2434/637/1 2433/638/1 2435/639/1
-f 2435/639/1 2436/640/1 2434/637/1
-f 2437/655/369 2423/656/369 2422/657/369
-f 2422/657/369 2438/658/369 2437/655/369
-f 2437/659/4 2439/660/4 2424/661/4
-f 2424/661/4 2423/662/4 2437/659/4
-f 2440/655/370 2421/656/370 2424/657/370
-f 2424/657/370 2439/658/370 2440/655/370
-f 2441/663/298 2442/664/298 2426/651/298
-f 2426/651/298 2425/650/298 2441/663/298
-f 2427/654/4 2443/665/4 2441/666/4
-f 2441/666/4 2425/652/4 2427/654/4
-f 2444/663/371 2443/664/371 2427/651/371
-f 2427/651/371 2428/650/371 2444/663/371
-f 2437/655/297 2438/658/297 2442/664/297
-f 2442/664/297 2441/663/297 2437/655/297
-f 2439/660/4 2437/659/4 2441/666/4
-f 2441/666/4 2443/665/4 2439/660/4
-f 2440/655/372 2439/658/372 2443/664/372
-f 2443/664/372 2444/663/372 2440/655/372
-f 2445/667/373 2446/668/373 2447/669/373
-f 2447/669/373 2448/670/373 2445/667/373
-f 2449/671/374 2450/672/374 2446/668/374
-f 2446/668/374 2445/667/374 2449/671/374
-f 2451/673/7 2452/674/7 2453/675/7
-f 2453/675/7 2454/676/7 2451/673/7
-f 2451/673/7 2450/673/7 2455/673/7
-f 2455/673/7 2452/674/7 2451/673/7
-f 2451/673/7 2447/677/7 2446/677/7
-f 2446/677/7 2450/673/7 2451/673/7
-f 2456/678/7 2447/677/7 2451/673/7
-f 2451/673/7 2454/676/7 2456/678/7
-f 2453/679/27 2452/303/27 2457/680/27
-f 2457/680/27 2458/681/27 2453/679/27
-f 2452/682/375 2455/672/375 2459/671/375
-f 2459/671/375 2457/683/375 2452/682/375
-f 2455/672/376 2450/672/377 2449/671/377
-f 2449/671/377 2459/671/376 2455/672/376
-f 2460/684/373 2461/685/373 2445/667/373
-f 2445/667/373 2448/670/373 2460/684/373
-f 2461/685/374 2462/686/374 2449/671/374
-f 2449/671/374 2445/667/374 2461/685/374
-f 2463/678/1 2464/677/1 2465/673/1
-f 2465/673/1 2466/676/1 2463/678/1
-f 2465/673/1 2464/677/1 2467/677/1
-f 2467/677/1 2462/673/1 2465/673/1
-f 2465/673/1 2462/673/1 2461/673/1
-f 2461/673/1 2460/674/1 2465/673/1
-f 2465/673/1 2460/674/1 2468/675/1
-f 2468/675/1 2466/676/1 2465/673/1
-f 2457/680/27 2464/687/27 2463/688/27
-f 2463/688/27 2458/681/27 2457/680/27
-f 2459/671/375 2467/686/375 2464/678/375
-f 2464/678/375 2457/683/375 2459/671/375
-f 2449/671/377 2462/686/377 2467/686/376
-f 2467/686/376 2459/671/376 2449/671/377
-f 2469/689/4 2470/690/4 2471/691/4
-f 2471/691/4 2472/692/4 2469/689/4
-f 2473/693/4 2472/692/4 2471/691/4
-f 2471/691/4 2474/694/4 2473/693/4
-f 2475/619/357 2476/620/358 2477/621/358
-f 2477/621/358 2478/622/357 2475/619/357
-f 2476/620/358 2479/623/359 2480/624/359
-f 2480/624/359 2477/621/358 2476/620/358
-f 2481/625/360 2482/626/10 2476/627/10
-f 2476/627/10 2475/628/360 2481/625/360
-f 2476/627/10 2482/626/10 2483/629/361
-f 2483/629/361 2479/630/361 2476/627/10
-f 2481/619/315 2484/622/315 2485/621/362
-f 2485/621/362 2482/620/362 2481/619/315
-f 2482/620/362 2485/621/362 2486/624/363
-f 2486/624/363 2483/623/363 2482/620/362
-f 2484/631/364 2478/632/364 2477/633/365
-f 2477/633/365 2485/634/365 2484/631/364
-f 2477/633/365 2480/635/366 2486/636/366
-f 2486/636/366 2485/634/365 2477/633/365
-f 2487/619/357 2488/622/357 2489/621/378
-f 2489/621/378 2490/620/378 2487/619/357
-f 2490/620/378 2489/621/378 2491/624/379
-f 2491/624/379 2492/623/379 2490/620/378
-f 2493/625/365 2487/628/365 2490/627/4
-f 2490/627/4 2494/626/4 2493/625/365
-f 2490/627/4 2492/630/380 2495/629/380
-f 2495/629/380 2494/626/4 2490/627/4
-f 2493/619/315 2494/620/381 2496/621/381
-f 2496/621/381 2497/622/315 2493/619/315
-f 2494/620/381 2495/623/382 2498/624/382
-f 2498/624/382 2496/621/381 2494/620/381
-f 2497/631/383 2496/634/360 2489/633/360
-f 2489/633/360 2488/632/383 2497/631/383
-f 2489/633/360 2496/634/360 2498/636/384
-f 2498/636/384 2491/635/384 2489/633/360
-f 2499/619/357 2500/622/357 2501/621/378
-f 2501/621/378 2502/620/378 2499/619/357
-f 2502/620/378 2501/621/378 2503/624/379
-f 2503/624/379 2504/623/379 2502/620/378
-f 2505/625/365 2499/628/365 2502/627/4
-f 2502/627/4 2506/626/4 2505/625/365
-f 2502/627/4 2504/630/380 2507/629/380
-f 2507/629/380 2506/626/4 2502/627/4
-f 2505/619/315 2506/620/381 2508/621/381
-f 2508/621/381 2509/622/315 2505/619/315
-f 2506/620/381 2507/623/382 2510/624/382
-f 2510/624/382 2508/621/381 2506/620/381
-f 2509/631/383 2508/634/360 2501/633/360
-f 2501/633/360 2500/632/383 2509/631/383
-f 2501/633/360 2508/634/360 2510/636/384
-f 2510/636/384 2503/635/384 2501/633/360
-f 2511/586/336 2512/589/336 2513/588/26
-f 2513/588/26 2514/587/26 2511/586/336
-f 2512/590/7 2515/593/7 2516/592/7
-f 2516/592/7 2513/591/7 2512/590/7
-f 2515/589/337 2517/586/337 2518/587/27
-f 2518/587/27 2516/588/27 2515/589/337
-f 2513/588/26 2519/595/338 2520/594/338
-f 2520/594/338 2514/587/26 2513/588/26
-f 2516/592/7 2521/597/7 2519/596/7
-f 2519/596/7 2513/591/7 2516/592/7
-f 2518/587/27 2522/594/339 2521/595/339
-f 2521/595/339 2516/588/27 2518/587/27
-f 2523/451/27 2524/452/27 2525/453/27
-f 2525/453/27 2526/454/27 2523/451/27
-f 2527/455/4 2528/456/4 2524/457/4
-f 2524/457/4 2523/458/4 2527/455/4
-f 2528/459/1 2529/460/1 2525/461/1
-f 2525/461/1 2524/462/1 2528/459/1
-f 2529/456/10 2530/455/10 2526/458/10
-f 2526/458/10 2525/457/10 2529/456/10
-f 2530/460/7 2527/459/7 2523/462/7
-f 2523/462/7 2526/461/7 2530/460/7
-f 2531/451/27 2532/452/27 2533/453/27
-f 2533/453/27 2534/454/27 2531/451/27
-f 2535/455/7 2536/456/7 2532/457/7
-f 2532/457/7 2531/458/7 2535/455/7
-f 2536/459/4 2537/460/4 2533/461/4
-f 2533/461/4 2532/462/4 2536/459/4
-f 2537/456/1 2538/455/1 2534/458/1
-f 2534/458/1 2533/457/1 2537/456/1
-f 2538/460/10 2535/459/10 2531/462/10
-f 2531/462/10 2534/461/10 2538/460/10
-f 2539/451/27 2540/452/27 2541/453/27
-f 2541/453/27 2542/454/27 2539/451/27
-f 2543/455/7 2544/456/7 2540/457/7
-f 2540/457/7 2539/458/7 2543/455/7
-f 2544/459/4 2545/460/4 2541/461/4
-f 2541/461/4 2540/462/4 2544/459/4
-f 2545/456/1 2546/455/1 2542/458/1
-f 2542/458/1 2541/457/1 2545/456/1
-f 2546/460/10 2543/459/10 2539/462/10
-f 2539/462/10 2542/461/10 2546/460/10
-f 2547/3/12 2548/2/12 2549/1/1
-f 2549/1/1 2550/4/1 2547/3/12
-f 2551/6/11 2552/5/11 2548/2/12
-f 2548/2/12 2547/3/12 2551/6/11
-f 2553/8/10 2554/7/10 2552/5/11
-f 2552/5/11 2551/6/11 2553/8/10
-f 2555/11/9 2556/10/9 2554/9/10
-f 2554/9/10 2553/12/10 2555/11/9
-f 2557/14/8 2558/13/8 2556/10/9
-f 2556/10/9 2555/11/9 2557/14/8
-f 2559/16/7 2560/15/7 2558/13/8
-f 2558/13/8 2557/14/8 2559/16/7
-f 2561/18/6 2562/17/6 2560/15/7
-f 2560/15/7 2559/16/7 2561/18/6
-f 2563/20/5 2564/19/5 2562/17/6
-f 2562/17/6 2561/18/6 2563/20/5
-f 2565/22/4 2566/21/4 2564/19/5
-f 2564/19/5 2563/20/5 2565/22/4
-f 2567/24/3 2568/23/3 2566/21/4
-f 2566/21/4 2565/22/4 2567/24/3
-f 2569/26/2 2570/25/2 2568/23/3
-f 2568/23/3 2567/24/3 2569/26/2
-f 2550/4/1 2549/1/1 2570/25/2
-f 2570/25/2 2569/26/2 2550/4/1
-f 2571/27/24 2572/30/24 2573/29/24
-f 2573/29/24 2574/28/24 2571/27/24
-f 2575/31/23 2576/32/23 2572/30/23
-f 2572/30/23 2571/27/23 2575/31/23
-f 2577/33/22 2578/34/22 2576/32/22
-f 2576/32/22 2575/31/22 2577/33/22
-f 2579/35/21 2580/38/21 2578/37/21
-f 2578/37/21 2577/36/21 2579/35/21
-f 2581/39/20 2582/40/20 2580/38/20
-f 2580/38/20 2579/35/20 2581/39/20
-f 2583/41/19 2584/42/19 2582/40/19
-f 2582/40/19 2581/39/19 2583/41/19
-f 2585/43/18 2586/44/18 2584/42/18
-f 2584/42/18 2583/41/18 2585/43/18
-f 2587/45/17 2588/46/17 2586/44/17
-f 2586/44/17 2585/43/17 2587/45/17
-f 2589/47/16 2590/48/16 2588/46/16
-f 2588/46/16 2587/45/16 2589/47/16
-f 2591/49/15 2592/50/15 2590/48/15
-f 2590/48/15 2589/47/15 2591/49/15
-f 2593/51/14 2594/52/14 2592/50/14
-f 2592/50/14 2591/49/14 2593/51/14
-f 2574/28/13 2573/29/13 2594/52/192
-f 2594/52/192 2593/51/192 2574/28/13
-f 2548/53/26 2571/53/26 2574/54/26
-f 2574/54/26 2549/54/26 2548/53/26
-f 2549/54/26 2574/54/26 2593/55/26
-f 2593/55/26 2570/55/26 2549/54/26
-f 2570/55/26 2593/55/26 2591/56/26
-f 2591/56/26 2568/56/26 2570/55/26
-f 2568/56/26 2591/56/26 2589/57/26
-f 2589/57/26 2566/57/26 2568/56/26
-f 2566/57/26 2589/57/26 2587/59/26
-f 2587/59/26 2564/58/26 2566/57/26
-f 2564/58/26 2587/59/26 2585/61/26
-f 2585/61/26 2562/60/26 2564/58/26
-f 2562/60/26 2585/61/26 2583/62/26
-f 2583/62/26 2560/62/26 2562/60/26
-f 2560/62/26 2583/62/26 2581/64/26
-f 2581/64/26 2558/63/26 2560/62/26
-f 2558/63/26 2581/64/26 2579/66/26
-f 2579/66/26 2556/65/26 2558/63/26
-f 2556/65/26 2579/66/26 2577/67/26
-f 2577/67/26 2554/67/26 2556/65/26
-f 2554/67/26 2577/67/26 2575/68/26
-f 2575/68/26 2552/68/26 2554/67/26
-f 2552/68/26 2575/68/26 2571/53/26
-f 2571/53/26 2548/53/26 2552/68/26
-f 2595/54/27 2573/54/27 2572/53/27
-f 2572/53/27 2596/53/27 2595/54/27
-f 2596/53/27 2572/53/27 2576/68/27
-f 2576/68/27 2597/68/27 2596/53/27
-f 2597/68/27 2576/68/27 2578/67/27
-f 2578/67/27 2598/67/27 2597/68/27
-f 2598/67/27 2578/67/27 2580/66/27
-f 2580/66/27 2599/65/27 2598/67/27
-f 2599/65/27 2580/66/27 2582/64/27
-f 2582/64/27 2600/63/27 2599/65/27
-f 2600/63/27 2582/64/27 2584/62/27
-f 2584/62/27 2601/62/27 2600/63/27
-f 2601/62/27 2584/62/27 2586/61/27
-f 2586/61/27 2602/60/27 2601/62/27
-f 2602/60/27 2586/61/27 2588/59/27
-f 2588/59/27 2603/58/27 2602/60/27
-f 2603/58/27 2588/59/27 2590/57/27
-f 2590/57/27 2604/57/27 2603/58/27
-f 2604/57/27 2590/57/27 2592/56/27
-f 2592/56/27 2605/56/27 2604/57/27
-f 2605/56/27 2592/56/27 2594/55/27
-f 2594/55/27 2606/55/27 2605/56/27
-f 2606/55/27 2594/55/27 2573/54/27
-f 2573/54/27 2595/54/27 2606/55/27
-f 2607/71/12 2608/70/1 2595/69/1
-f 2595/69/1 2596/72/12 2607/71/12
-f 2609/73/23 2607/71/12 2596/72/12
-f 2596/72/12 2597/74/23 2609/73/23
-f 2610/75/22 2609/73/22 2597/74/22
-f 2597/74/22 2598/76/22 2610/75/22
-f 2611/77/9 2610/75/21 2598/76/21
-f 2598/76/21 2599/78/9 2611/77/9
-f 2612/79/8 2611/77/9 2599/78/9
-f 2599/78/9 2600/80/8 2612/79/8
-f 2613/83/7 2612/82/8 2600/81/8
-f 2600/81/8 2601/84/7 2613/83/7
-f 2614/85/6 2613/83/7 2601/84/7
-f 2601/84/7 2602/86/6 2614/85/6
-f 2615/87/5 2614/85/6 2602/86/6
-f 2602/86/6 2603/88/5 2615/87/5
-f 2616/89/4 2615/87/5 2603/88/5
-f 2603/88/5 2604/90/4 2616/89/4
-f 2617/91/3 2616/89/4 2604/90/4
-f 2604/90/4 2605/92/3 2617/91/3
-f 2618/93/2 2617/91/3 2605/92/3
-f 2605/92/3 2606/94/2 2618/93/2
-f 2608/70/1 2618/93/2 2606/94/2
-f 2606/94/2 2595/69/1 2608/70/1
-f 2619/95/26 2620/95/26 2621/96/26
-f 2621/96/26 2622/96/26 2619/95/26
-f 2623/97/26 2624/97/26 2620/95/26
-f 2620/95/26 2619/95/26 2623/97/26
-f 2625/67/26 2626/98/26 2624/97/26
-f 2624/97/26 2623/97/26 2625/67/26
-f 2627/99/26 2628/99/26 2626/98/26
-f 2626/98/26 2625/67/26 2627/99/26
-f 2629/100/26 2630/100/26 2628/99/26
-f 2628/99/26 2627/99/26 2629/100/26
-f 2631/101/26 2632/101/26 2630/100/26
-f 2630/100/26 2629/100/26 2631/101/26
-f 2633/61/26 2634/61/26 2632/101/26
-f 2632/101/26 2631/101/26 2633/61/26
-f 2635/59/26 2636/102/26 2634/61/26
-f 2634/61/26 2633/61/26 2635/59/26
-f 2637/103/26 2638/103/26 2636/102/26
-f 2636/102/26 2635/59/26 2637/103/26
-f 2639/104/26 2640/105/26 2638/103/26
-f 2638/103/26 2637/103/26 2639/104/26
-f 2641/106/26 2642/106/26 2640/105/26
-f 2640/105/26 2639/104/26 2641/106/26
-f 2622/96/26 2621/96/26 2642/106/26
-f 2642/106/26 2641/106/26 2622/96/26
-f 2620/107/39 2643/110/39 2644/109/39
-f 2644/109/39 2621/108/39 2620/107/39
-f 2624/111/38 2645/112/38 2643/110/38
-f 2643/110/38 2620/107/38 2624/111/38
-f 2626/113/37 2646/114/37 2645/112/37
-f 2645/112/37 2624/111/37 2626/113/37
-f 2628/115/36 2647/116/36 2646/114/36
-f 2646/114/36 2626/113/36 2628/115/36
-f 2630/117/35 2648/118/35 2647/116/35
-f 2647/116/35 2628/115/35 2630/117/35
-f 2632/119/34 2649/120/34 2648/118/34
-f 2648/118/34 2630/117/34 2632/119/34
-f 2634/121/33 2650/122/33 2649/120/33
-f 2649/120/33 2632/119/33 2634/121/33
-f 2636/123/32 2651/124/32 2650/122/32
-f 2650/122/32 2634/121/32 2636/123/32
-f 2638/125/31 2652/126/31 2651/124/31
-f 2651/124/31 2636/123/31 2638/125/31
-f 2640/127/30 2653/130/30 2652/129/30
-f 2652/129/30 2638/128/30 2640/127/30
-f 2642/131/29 2654/132/29 2653/130/29
-f 2653/130/29 2640/127/29 2642/131/29
-f 2621/108/28 2644/109/28 2654/132/28
-f 2654/132/28 2642/131/28 2621/108/28
-f 2643/110/54 2655/134/54 2656/133/54
-f 2656/133/54 2644/109/54 2643/110/54
-f 2645/112/53 2657/135/53 2655/134/53
-f 2655/134/53 2643/110/53 2645/112/53
-f 2646/114/51 2658/136/52 2657/135/51
-f 2657/135/51 2645/112/51 2646/114/51
-f 2647/116/50 2659/137/50 2658/136/50
-f 2658/136/50 2646/114/50 2647/116/50
-f 2648/118/49 2660/138/49 2659/137/49
-f 2659/137/49 2647/116/49 2648/118/49
-f 2649/120/48 2661/139/48 2660/138/48
-f 2660/138/48 2648/118/48 2649/120/48
-f 2650/122/385 2662/140/46 2661/139/46
-f 2661/139/46 2649/120/46 2650/122/385
-f 2651/124/45 2663/141/45 2662/140/45
-f 2662/140/45 2650/122/45 2651/124/45
-f 2652/126/44 2664/142/44 2663/141/44
-f 2663/141/44 2651/124/44 2652/126/44
-f 2653/130/42 2665/144/42 2664/143/43
-f 2664/143/43 2652/129/42 2653/130/42
-f 2654/132/41 2666/145/41 2665/144/41
-f 2665/144/41 2653/130/41 2654/132/41
-f 2644/109/40 2656/133/40 2666/145/40
-f 2666/145/40 2654/132/386 2644/109/40
-f 2607/148/71 2667/147/71 2668/146/71
-f 2668/146/71 2608/149/71 2607/148/71
-f 2609/151/69 2669/150/70 2667/147/70
-f 2667/147/70 2607/148/69 2609/151/69
-f 2610/154/68 2670/153/68 2669/152/68
-f 2669/152/68 2609/155/68 2610/154/68
-f 2611/156/67 2671/142/67 2670/153/67
-f 2670/153/67 2610/154/67 2611/156/67
-f 2612/158/65 2672/157/66 2671/142/66
-f 2671/142/66 2611/156/65 2612/158/65
-f 2613/160/64 2673/159/64 2672/157/64
-f 2672/157/64 2612/158/64 2613/160/64
-f 2614/162/63 2674/161/63 2673/159/63
-f 2673/159/63 2613/160/63 2614/162/63
-f 2615/164/62 2675/163/61 2674/161/61
-f 2674/161/61 2614/162/62 2615/164/62
-f 2616/166/60 2676/165/60 2675/163/60
-f 2675/163/60 2615/164/60 2616/166/60
-f 2617/168/59 2677/167/59 2676/165/59
-f 2676/165/59 2616/166/59 2617/168/59
-f 2618/170/58 2678/169/57 2677/167/57
-f 2677/167/57 2617/168/57 2618/170/58
-f 2608/149/56 2668/146/56 2678/169/56
-f 2678/169/56 2618/170/56 2608/149/56
-f 2667/173/12 2619/172/12 2622/171/1
-f 2622/171/1 2668/174/1 2667/173/12
-f 2669/176/11 2623/175/11 2619/172/12
-f 2619/172/12 2667/173/12 2669/176/11
-f 2670/179/10 2625/178/10 2623/177/11
-f 2623/177/11 2669/180/11 2670/179/10
-f 2671/181/9 2627/86/9 2625/178/10
-f 2625/178/10 2670/179/10 2671/181/9
-f 2672/183/8 2629/182/8 2627/86/9
-f 2627/86/9 2671/181/9 2672/183/8
-f 2673/185/7 2631/184/7 2629/182/8
-f 2629/182/8 2672/183/8 2673/185/7
-f 2674/187/6 2633/186/6 2631/184/7
-f 2631/184/7 2673/185/7 2674/187/6
-f 2675/189/5 2635/188/5 2633/186/6
-f 2633/186/6 2674/187/6 2675/189/5
-f 2676/191/4 2637/190/4 2635/188/5
-f 2635/188/5 2675/189/5 2676/191/4
-f 2677/192/3 2639/76/3 2637/190/4
-f 2637/190/4 2676/191/4 2677/192/3
-f 2678/194/2 2641/193/2 2639/76/3
-f 2639/76/3 2677/192/3 2678/194/2
-f 2668/174/1 2622/171/1 2641/193/2
-f 2641/193/2 2678/194/2 2668/174/1
-f 2679/195/387 2680/198/387 2681/197/387
-f 2681/197/387 2682/196/387 2679/195/387
-f 2683/199/388 2684/202/388 2685/201/388
-f 2685/201/388 2686/200/388 2683/199/388
-f 2687/203/389 2688/206/389 2689/205/389
-f 2689/205/389 2690/204/389 2687/203/389
-f 2691/202/390 2692/199/390 2693/200/390
-f 2693/200/390 2694/201/390 2691/202/390
-f 2695/207/391 2696/209/391 2697/208/391
-f 2697/208/391 2698/207/391 2695/207/391
-f 2699/209/392 2700/211/392 2701/210/392
-f 2690/212/393 2689/214/393 2702/213/393
-f 2702/213/393 2703/196/393 2690/212/393
-f 2704/210/394 2705/211/394 2706/209/394
-f 2707/215/395 2706/209/395 2705/211/395
-f 2705/211/395 2708/216/395 2707/215/395
-f 2709/217/396 2682/196/396 2681/197/396
-f 2681/197/396 2710/218/396 2709/217/396
-f 2711/219/397 2687/203/397 2690/204/397
-f 2690/204/397 2712/220/397 2711/219/397
-f 2713/209/398 2695/207/398 2698/207/398
-f 2698/207/398 2714/208/398 2713/209/398
-f 2690/212/399 2703/196/399 2715/213/399
-f 2715/213/399 2712/214/399 2690/212/399
-f 2707/215/400 2708/216/400 2700/211/400
-f 2700/211/400 2699/209/400 2707/215/400
-f 2716/221/390 2680/221/390 2679/222/390
-f 2679/222/390 2702/222/390 2716/221/390
-f 2702/222/401 2679/222/401 2682/203/401
-f 2682/203/401 2703/203/401 2702/222/401
-f 2703/203/402 2682/203/402 2709/206/402
-f 2709/206/402 2715/206/402 2703/203/402
-f 2715/206/388 2709/206/388 2710/223/388
-f 2710/223/388 2717/223/388 2715/206/388
-f 2717/224/403 2710/224/403 2681/226/403
-f 2681/226/403 2718/225/403 2717/224/403
-f 2718/225/404 2681/226/404 2680/224/404
-f 2680/224/404 2716/224/404 2718/225/404
-f 2712/214/394 2715/213/394 2717/228/394
-f 2717/228/394 2719/227/394 2712/214/394
-f 2719/229/390 2720/221/390 2711/219/390
-f 2711/219/390 2712/220/390 2719/229/390
-f 2688/206/388 2721/223/388 2722/230/388
-f 2722/230/388 2689/205/388 2688/206/388
-f 2722/227/392 2716/228/392 2702/213/392
-f 2702/213/392 2689/214/392 2722/227/392
-f 2685/201/388 2723/202/388 2724/199/388
-f 2724/199/388 2686/200/388 2685/201/388
-f 2722/231/405 2701/233/406 2700/232/405
-f 2700/232/405 2716/224/405 2722/231/405
-f 2716/224/404 2700/232/404 2708/234/404
-f 2708/234/404 2718/225/404 2716/224/404
-f 2718/225/403 2708/234/403 2705/232/403
-f 2705/232/403 2717/224/403 2718/225/403
-f 2717/224/407 2705/232/407 2704/233/407
-f 2704/233/407 2719/231/407 2717/224/407
-f 2693/200/390 2725/199/390 2726/202/390
-f 2726/202/390 2694/201/390 2693/200/390
-f 2697/208/391 2706/236/391 2707/235/391
-f 2707/235/391 2698/207/391 2697/208/391
-f 2698/207/398 2707/235/398 2699/236/398
-f 2699/236/398 2714/208/398 2698/207/398
-f 2721/236/27 2683/238/27 2686/237/27
-f 2686/237/27 2722/231/27 2721/236/27
-f 2722/231/27 2686/237/27 2724/239/27
-f 2724/239/27 2701/233/27 2722/231/27
-f 2701/210/408 2724/241/409 2723/240/409
-f 2723/240/409 2699/209/408 2701/210/408
-f 2699/236/26 2723/238/26 2685/242/26
-f 2685/242/26 2714/208/26 2699/236/26
-f 2714/208/26 2685/242/26 2684/240/26
-f 2684/240/26 2713/209/26 2714/208/26
-f 2696/209/26 2691/240/26 2694/242/26
-f 2694/242/26 2697/208/26 2696/209/26
-f 2697/208/26 2694/242/26 2726/238/26
-f 2726/238/26 2706/236/26 2697/208/26
-f 2706/209/410 2726/240/410 2725/241/410
-f 2725/241/410 2704/210/410 2706/209/410
-f 2704/233/27 2725/239/27 2693/237/27
-f 2693/237/27 2719/231/27 2704/233/27
-f 2719/231/27 2693/237/27 2692/238/27
-f 2692/238/27 2720/236/27 2719/231/27
-f 2727/195/411 2728/198/411 2729/197/411
-f 2729/197/411 2730/196/411 2727/195/411
-f 2731/199/412 2732/202/412 2733/201/413
-f 2733/201/413 2734/200/413 2731/199/412
-f 2735/203/414 2736/206/414 2737/205/414
-f 2737/205/414 2738/204/414 2735/203/414
-f 2739/202/415 2740/199/415 2741/200/416
-f 2741/200/416 2742/201/416 2739/202/415
-f 2743/207/417 2744/209/417 2745/208/417
-f 2745/208/417 2746/207/417 2743/207/417
-f 2747/209/171 2748/211/171 2749/210/171
-f 2738/212/418 2737/214/418 2750/213/418
-f 2750/213/418 2751/196/418 2738/212/418
-f 2752/210/419 2753/211/419 2754/209/419
-f 2755/215/420 2754/209/420 2753/211/420
-f 2753/211/420 2756/216/420 2755/215/420
-f 2757/217/167 2730/196/167 2729/197/167
-f 2729/197/167 2758/218/167 2757/217/167
-f 2759/219/421 2735/203/421 2738/204/421
-f 2738/204/421 2760/220/421 2759/219/421
-f 2761/209/422 2743/207/422 2746/207/422
-f 2746/207/422 2762/208/422 2761/209/422
-f 2738/212/423 2751/196/423 2763/213/423
-f 2763/213/423 2760/214/423 2738/212/423
-f 2755/215/424 2756/216/424 2748/211/424
-f 2748/211/424 2747/209/424 2755/215/424
-f 2764/221/415 2728/221/416 2727/222/416
-f 2727/222/416 2750/222/415 2764/221/415
-f 2750/222/425 2727/222/425 2730/203/425
-f 2730/203/425 2751/203/425 2750/222/425
-f 2751/203/426 2730/203/426 2757/206/426
-f 2757/206/426 2763/206/426 2751/203/426
-f 2763/206/413 2757/206/413 2758/223/413
-f 2758/223/413 2765/223/413 2763/206/413
-f 2765/224/427 2758/224/427 2729/226/427
-f 2729/226/427 2766/225/427 2765/224/427
-f 2766/225/428 2729/226/428 2728/224/428
-f 2728/224/428 2764/224/428 2766/225/428
-f 2760/214/419 2763/213/419 2765/228/419
-f 2765/228/419 2767/227/419 2760/214/419
-f 2767/229/415 2768/221/415 2759/219/415
-f 2759/219/415 2760/220/415 2767/229/415
-f 2736/206/413 2769/223/413 2770/230/413
-f 2770/230/413 2737/205/413 2736/206/413
-f 2770/227/171 2764/228/171 2750/213/171
-f 2750/213/171 2737/214/171 2770/227/171
-f 2733/201/413 2771/202/412 2772/199/412
-f 2772/199/412 2734/200/413 2733/201/413
-f 2770/231/429 2749/233/429 2748/232/429
-f 2748/232/429 2764/224/429 2770/231/429
-f 2764/224/428 2748/232/428 2756/234/428
-f 2756/234/428 2766/225/428 2764/224/428
-f 2766/225/427 2756/234/427 2753/232/427
-f 2753/232/427 2765/224/427 2766/225/427
-f 2765/224/430 2753/232/430 2752/233/430
-f 2752/233/430 2767/231/430 2765/224/430
-f 2741/200/416 2773/199/415 2774/202/415
-f 2774/202/415 2742/201/416 2741/200/416
-f 2745/208/417 2754/236/417 2755/235/417
-f 2755/235/417 2746/207/417 2745/208/417
-f 2746/207/422 2755/235/422 2747/236/422
-f 2747/236/422 2762/208/422 2746/207/422
-f 2769/236/27 2731/238/27 2734/237/27
-f 2734/237/27 2770/231/27 2769/236/27
-f 2770/231/27 2734/237/27 2772/239/27
-f 2772/239/27 2749/233/27 2770/231/27
-f 2749/210/191 2772/241/191 2771/240/191
-f 2771/240/191 2747/209/191 2749/210/191
-f 2747/236/26 2771/238/26 2733/242/26
-f 2733/242/26 2762/208/26 2747/236/26
-f 2762/208/26 2733/242/26 2732/240/26
-f 2732/240/26 2761/209/26 2762/208/26
-f 2744/209/26 2739/240/26 2742/242/26
-f 2742/242/26 2745/208/26 2744/209/26
-f 2745/208/26 2742/242/26 2774/238/26
-f 2774/238/26 2754/236/26 2745/208/26
-f 2754/209/431 2774/240/431 2773/241/431
-f 2773/241/431 2752/210/431 2754/209/431
-f 2752/233/27 2773/239/27 2741/237/27
-f 2741/237/27 2767/231/27 2752/233/27
-f 2767/231/27 2741/237/27 2740/238/27
-f 2740/238/27 2768/236/27 2767/231/27
-f 2775/243/432 2776/246/432 2777/245/432
-f 2777/245/432 2778/244/432 2775/243/432
-f 2775/247/433 2779/250/433 2780/249/433
-f 2780/249/433 2776/248/433 2775/247/433
-f 2776/246/434 2780/252/434 2781/251/434
-f 2781/251/434 2777/245/434 2776/246/434
-f 2777/248/435 2781/249/435 2782/250/435
-f 2782/250/435 2778/247/435 2777/248/435
-f 2783/195/436 2784/198/436 2785/197/436
-f 2785/197/436 2786/196/436 2783/195/436
-f 2787/199/437 2788/202/437 2789/201/413
-f 2789/201/413 2790/200/413 2787/199/437
-f 2791/203/414 2792/206/414 2793/205/414
-f 2793/205/414 2794/204/414 2791/203/414
-f 2795/202/415 2796/199/415 2797/200/416
-f 2797/200/416 2798/201/416 2795/202/415
-f 2799/207/417 2800/209/417 2801/208/417
-f 2801/208/417 2802/207/417 2799/207/417
-f 2803/209/171 2804/211/171 2805/210/171
-f 2794/212/418 2793/214/418 2806/213/418
-f 2806/213/418 2807/196/418 2794/212/418
-f 2808/210/419 2809/211/419 2810/209/419
-f 2811/215/420 2810/209/420 2809/211/420
-f 2809/211/420 2812/216/420 2811/215/420
-f 2813/217/167 2786/196/167 2785/197/167
-f 2785/197/167 2814/218/167 2813/217/167
-f 2815/219/438 2791/203/421 2794/204/421
-f 2794/204/421 2816/220/438 2815/219/438
-f 2817/209/422 2799/207/422 2802/207/422
-f 2802/207/422 2818/208/422 2817/209/422
-f 2794/212/423 2807/196/423 2819/213/423
-f 2819/213/423 2816/214/423 2794/212/423
-f 2811/215/424 2812/216/424 2804/211/424
-f 2804/211/424 2803/209/424 2811/215/424
-f 2820/221/415 2784/221/415 2783/222/415
-f 2783/222/415 2806/222/415 2820/221/415
-f 2806/222/425 2783/222/425 2786/203/425
-f 2786/203/425 2807/203/425 2806/222/425
-f 2807/203/426 2786/203/426 2813/206/426
-f 2813/206/426 2819/206/426 2807/203/426
-f 2819/206/413 2813/206/413 2814/223/413
-f 2814/223/413 2821/223/413 2819/206/413
-f 2821/224/427 2814/224/427 2785/226/427
-f 2785/226/427 2822/225/427 2821/224/427
-f 2822/225/428 2785/226/428 2784/224/428
-f 2784/224/428 2820/224/428 2822/225/428
-f 2816/214/419 2819/213/419 2821/228/419
-f 2821/228/419 2823/227/419 2816/214/419
-f 2823/229/416 2824/221/416 2815/219/416
-f 2815/219/416 2816/220/416 2823/229/416
-f 2792/206/413 2825/223/413 2826/230/412
-f 2826/230/412 2793/205/412 2792/206/413
-f 2826/227/171 2820/228/171 2806/213/171
-f 2806/213/171 2793/214/171 2826/227/171
-f 2789/201/413 2827/202/412 2828/199/412
-f 2828/199/412 2790/200/413 2789/201/413
-f 2826/231/429 2805/233/429 2804/232/429
-f 2804/232/429 2820/224/429 2826/231/429
-f 2820/224/428 2804/232/428 2812/234/428
-f 2812/234/428 2822/225/428 2820/224/428
-f 2822/225/427 2812/234/427 2809/232/427
-f 2809/232/427 2821/224/427 2822/225/427
-f 2821/224/430 2809/232/430 2808/233/430
-f 2808/233/430 2823/231/430 2821/224/430
-f 2797/200/416 2829/199/415 2830/202/415
-f 2830/202/415 2798/201/416 2797/200/416
-f 2801/208/417 2810/236/417 2811/235/417
-f 2811/235/417 2802/207/417 2801/208/417
-f 2802/207/422 2811/235/422 2803/236/422
-f 2803/236/422 2818/208/422 2802/207/422
-f 2825/236/27 2787/238/27 2790/237/27
-f 2790/237/27 2826/231/27 2825/236/27
-f 2826/231/27 2790/237/27 2828/239/27
-f 2828/239/27 2805/233/27 2826/231/27
-f 2805/210/191 2828/241/191 2827/240/191
-f 2827/240/191 2803/209/191 2805/210/191
-f 2803/236/26 2827/238/26 2789/242/26
-f 2789/242/26 2818/208/26 2803/236/26
-f 2818/208/26 2789/242/26 2788/240/26
-f 2788/240/26 2817/209/26 2818/208/26
-f 2800/209/26 2795/240/26 2798/242/26
-f 2798/242/26 2801/208/26 2800/209/26
-f 2801/208/26 2798/242/26 2830/238/26
-f 2830/238/26 2810/236/26 2801/208/26
-f 2810/209/431 2830/240/431 2829/241/431
-f 2829/241/431 2808/210/431 2810/209/431
-f 2808/233/27 2829/239/27 2797/237/27
-f 2797/237/27 2823/231/27 2808/233/27
-f 2823/231/27 2797/237/27 2796/238/27
-f 2796/238/27 2824/236/27 2823/231/27
-f 2831/243/439 2832/246/439 2833/245/439
-f 2833/245/439 2834/244/439 2831/243/439
-f 2831/247/440 2835/250/440 2836/249/440
-f 2836/249/440 2832/248/440 2831/247/440
-f 2832/246/441 2836/252/441 2837/251/441
-f 2837/251/441 2833/245/441 2832/246/441
-f 2833/248/442 2837/249/442 2838/250/442
-f 2838/250/442 2834/247/442 2833/248/442
-f 2839/195/443 2840/198/443 2841/197/443
-f 2841/197/443 2842/196/443 2839/195/443
-f 2843/199/390 2844/202/390 2845/201/390
-f 2845/201/390 2846/200/390 2843/199/390
-f 2847/203/444 2848/206/444 2849/205/444
-f 2849/205/444 2850/204/444 2847/203/444
-f 2851/202/388 2852/199/388 2853/200/388
-f 2853/200/388 2854/201/388 2851/202/388
-f 2855/207/398 2856/209/398 2857/208/398
-f 2857/208/398 2858/207/398 2855/207/398
-f 2859/209/445 2860/211/445 2861/210/445
-f 2850/212/446 2849/214/446 2862/213/446
-f 2862/213/446 2863/196/446 2850/212/446
-f 2864/210/447 2865/211/447 2866/209/447
-f 2867/215/448 2866/209/448 2865/211/448
-f 2865/211/448 2868/216/448 2867/215/448
-f 2869/217/449 2842/196/450 2841/197/450
-f 2841/197/450 2870/218/449 2869/217/449
-f 2871/219/451 2847/203/451 2850/204/451
-f 2850/204/451 2872/220/451 2871/219/451
-f 2873/209/391 2855/207/391 2858/207/391
-f 2858/207/391 2874/208/391 2873/209/391
-f 2850/212/452 2863/196/452 2875/213/452
-f 2875/213/452 2872/214/452 2850/212/452
-f 2867/215/453 2868/216/453 2860/211/453
-f 2860/211/453 2859/209/453 2867/215/453
-f 2876/221/388 2840/221/388 2839/222/388
-f 2839/222/388 2862/222/388 2876/221/388
-f 2862/222/402 2839/222/402 2842/203/402
-f 2842/203/402 2863/203/402 2862/222/402
-f 2863/203/401 2842/203/401 2869/206/401
-f 2869/206/401 2875/206/401 2863/203/401
-f 2875/206/390 2869/206/390 2870/223/390
-f 2870/223/390 2877/223/390 2875/206/390
-f 2877/224/454 2870/224/454 2841/226/454
-f 2841/226/454 2878/225/454 2877/224/454
-f 2878/225/455 2841/226/455 2840/224/455
-f 2840/224/455 2876/224/455 2878/225/455
-f 2872/214/447 2875/213/447 2877/228/447
-f 2877/228/447 2879/227/447 2872/214/447
-f 2879/229/388 2880/221/388 2871/219/388
-f 2871/219/388 2872/220/388 2879/229/388
-f 2848/206/390 2881/223/390 2882/230/390
-f 2882/230/390 2849/205/390 2848/206/390
-f 2882/227/445 2876/228/445 2862/213/445
-f 2862/213/445 2849/214/445 2882/227/445
-f 2845/201/390 2883/202/390 2884/199/390
-f 2884/199/390 2846/200/390 2845/201/390
-f 2882/231/456 2861/233/456 2860/232/456
-f 2860/232/456 2876/224/456 2882/231/456
-f 2876/224/455 2860/232/455 2868/234/455
-f 2868/234/455 2878/225/455 2876/224/455
-f 2878/225/454 2868/234/454 2865/232/454
-f 2865/232/454 2877/224/454 2878/225/454
-f 2877/224/457 2865/232/457 2864/233/457
-f 2864/233/457 2879/231/457 2877/224/457
-f 2853/200/388 2885/199/388 2886/202/388
-f 2886/202/388 2854/201/388 2853/200/388
-f 2857/208/398 2866/236/398 2867/235/398
-f 2867/235/398 2858/207/398 2857/208/398
-f 2858/207/391 2867/235/391 2859/236/391
-f 2859/236/391 2874/208/391 2858/207/391
-f 2881/236/27 2843/238/27 2846/237/27
-f 2846/237/27 2882/231/27 2881/236/27
-f 2882/231/27 2846/237/27 2884/239/27
-f 2884/239/27 2861/233/27 2882/231/27
-f 2861/210/458 2884/241/458 2883/240/458
-f 2883/240/458 2859/209/458 2861/210/458
-f 2859/236/26 2883/238/26 2845/242/26
-f 2845/242/26 2874/208/26 2859/236/26
-f 2874/208/26 2845/242/26 2844/240/26
-f 2844/240/26 2873/209/26 2874/208/26
-f 2856/209/26 2851/240/26 2854/242/26
-f 2854/242/26 2857/208/26 2856/209/26
-f 2857/208/26 2854/242/26 2886/238/26
-f 2886/238/26 2866/236/26 2857/208/26
-f 2866/209/459 2886/240/459 2885/241/459
-f 2885/241/459 2864/210/459 2866/209/459
-f 2864/233/27 2885/239/27 2853/237/27
-f 2853/237/27 2879/231/27 2864/233/27
-f 2879/231/27 2853/237/27 2852/238/27
-f 2852/238/27 2880/236/27 2879/231/27
-f 2887/243/154 2888/246/154 2889/245/154
-f 2889/245/154 2890/244/154 2887/243/154
-f 2887/247/1 2891/250/1 2892/249/1
-f 2892/249/1 2888/248/1 2887/247/1
-f 2888/246/155 2892/252/155 2893/251/155
-f 2893/251/155 2889/245/155 2888/246/155
-f 2889/248/7 2893/249/7 2894/250/7
-f 2894/250/7 2890/247/7 2889/248/7
-f 2895/243/160 2896/246/160 2897/245/160
-f 2897/245/160 2898/244/160 2895/243/160
-f 2895/247/163 2899/250/163 2900/249/163
-f 2900/249/163 2896/248/163 2895/247/163
-f 2896/246/162 2900/252/162 2901/251/162
-f 2901/251/162 2897/245/162 2896/246/162
-f 2897/248/161 2901/249/161 2902/250/161
-f 2902/250/161 2898/247/161 2897/248/161
-f 2903/243/148 2904/246/148 2905/245/148
-f 2905/245/148 2906/244/148 2903/243/148
-f 2903/247/7 2907/250/7 2908/249/7
-f 2908/249/7 2904/248/7 2903/247/7
-f 2904/246/149 2908/252/149 2909/251/149
-f 2909/251/149 2905/245/149 2904/246/149
-f 2905/248/1 2909/249/1 2910/250/1
-f 2910/250/1 2906/247/1 2905/248/1
-f 2911/243/460 2912/246/460 2913/245/460
-f 2913/245/460 2914/244/460 2911/243/460
-f 2911/247/461 2915/250/461 2916/249/461
-f 2916/249/461 2912/248/461 2911/247/461
-f 2912/246/462 2916/252/462 2917/251/462
-f 2917/251/462 2913/245/462 2912/246/462
-f 2913/248/463 2917/249/463 2918/250/463
-f 2918/250/463 2914/247/463 2913/248/463
-f 2919/243/150 2920/246/150 2921/245/150
-f 2921/245/150 2922/244/150 2919/243/150
-f 2919/247/153 2923/250/153 2924/249/153
-f 2924/249/153 2920/248/153 2919/247/153
-f 2920/246/152 2924/252/152 2925/251/152
-f 2925/251/152 2921/245/152 2920/246/152
-f 2921/248/151 2925/249/151 2926/250/151
-f 2926/250/151 2922/247/151 2921/248/151
-f 2927/195/443 2928/198/443 2929/197/443
-f 2929/197/443 2930/196/443 2927/195/443
-f 2931/199/390 2932/202/390 2933/201/390
-f 2933/201/390 2934/200/390 2931/199/390
-f 2935/203/444 2936/206/444 2937/205/444
-f 2937/205/444 2938/204/444 2935/203/444
-f 2939/202/388 2940/199/388 2941/200/388
-f 2941/200/388 2942/201/388 2939/202/388
-f 2943/207/398 2944/209/398 2945/208/398
-f 2945/208/398 2946/207/398 2943/207/398
-f 2947/209/445 2948/211/445 2949/210/445
-f 2938/212/446 2937/214/446 2950/213/446
-f 2950/213/446 2951/196/446 2938/212/446
-f 2952/210/447 2953/211/447 2954/209/447
-f 2955/215/448 2954/209/448 2953/211/448
-f 2953/211/448 2956/216/448 2955/215/448
-f 2957/217/449 2930/196/450 2929/197/450
-f 2929/197/450 2958/218/449 2957/217/449
-f 2959/219/451 2935/203/451 2938/204/451
-f 2938/204/451 2960/220/451 2959/219/451
-f 2961/209/391 2943/207/391 2946/207/391
-f 2946/207/391 2962/208/391 2961/209/391
-f 2938/212/452 2951/196/452 2963/213/452
-f 2963/213/452 2960/214/452 2938/212/452
-f 2955/215/453 2956/216/453 2948/211/453
-f 2948/211/453 2947/209/453 2955/215/453
-f 2964/221/388 2928/221/388 2927/222/388
-f 2927/222/388 2950/222/388 2964/221/388
-f 2950/222/402 2927/222/402 2930/203/402
-f 2930/203/402 2951/203/402 2950/222/402
-f 2951/203/401 2930/203/401 2957/206/401
-f 2957/206/401 2963/206/401 2951/203/401
-f 2963/206/390 2957/206/390 2958/223/390
-f 2958/223/390 2965/223/390 2963/206/390
-f 2965/224/454 2958/224/454 2929/226/454
-f 2929/226/454 2966/225/454 2965/224/454
-f 2966/225/455 2929/226/455 2928/224/455
-f 2928/224/455 2964/224/455 2966/225/455
-f 2960/214/447 2963/213/447 2965/228/447
-f 2965/228/447 2967/227/447 2960/214/447
-f 2967/229/388 2968/221/388 2959/219/388
-f 2959/219/388 2960/220/388 2967/229/388
-f 2936/206/390 2969/223/390 2970/230/390
-f 2970/230/390 2937/205/390 2936/206/390
-f 2970/227/445 2964/228/445 2950/213/445
-f 2950/213/445 2937/214/445 2970/227/445
-f 2933/201/390 2971/202/390 2972/199/390
-f 2972/199/390 2934/200/390 2933/201/390
-f 2970/231/456 2949/233/456 2948/232/456
-f 2948/232/456 2964/224/456 2970/231/456
-f 2964/224/455 2948/232/455 2956/234/455
-f 2956/234/455 2966/225/455 2964/224/455
-f 2966/225/454 2956/234/454 2953/232/454
-f 2953/232/454 2965/224/454 2966/225/454
-f 2965/224/457 2953/232/457 2952/233/457
-f 2952/233/457 2967/231/457 2965/224/457
-f 2941/200/388 2973/199/388 2974/202/388
-f 2974/202/388 2942/201/388 2941/200/388
-f 2945/208/398 2954/236/398 2955/235/398
-f 2955/235/398 2946/207/398 2945/208/398
-f 2946/207/391 2955/235/391 2947/236/391
-f 2947/236/391 2962/208/391 2946/207/391
-f 2969/236/27 2931/238/27 2934/237/27
-f 2934/237/27 2970/231/27 2969/236/27
-f 2970/231/27 2934/237/27 2972/239/27
-f 2972/239/27 2949/233/27 2970/231/27
-f 2949/210/458 2972/241/458 2971/240/458
-f 2971/240/458 2947/209/458 2949/210/458
-f 2947/236/26 2971/238/26 2933/242/26
-f 2933/242/26 2962/208/26 2947/236/26
-f 2962/208/26 2933/242/26 2932/240/26
-f 2932/240/26 2961/209/26 2962/208/26
-f 2944/209/26 2939/240/26 2942/242/26
-f 2942/242/26 2945/208/26 2944/209/26
-f 2945/208/26 2942/242/26 2974/238/26
-f 2974/238/26 2954/236/26 2945/208/26
-f 2954/209/459 2974/240/459 2973/241/459
-f 2973/241/459 2952/210/459 2954/209/459
-f 2952/233/27 2973/239/27 2941/237/27
-f 2941/237/27 2967/231/27 2952/233/27
-f 2967/231/27 2941/237/27 2940/238/27
-f 2940/238/27 2968/236/27 2967/231/27
-f 2975/195/464 2976/198/464 2977/197/4
-f 2977/197/4 2978/196/4 2975/195/464
-f 2979/199/465 2980/202/465 2981/201/465
-f 2981/201/465 2982/200/465 2979/199/465
-f 2983/203/421 2984/206/421 2985/205/421
-f 2985/205/421 2986/204/421 2983/203/421
-f 2987/202/437 2988/199/437 2989/200/437
-f 2989/200/437 2990/201/437 2987/202/437
-f 2991/207/466 2992/209/466 2993/208/466
-f 2993/208/466 2994/207/466 2991/207/466
-f 2995/209/107 2996/211/107 2997/210/107
-f 2986/212/467 2985/214/467 2998/213/467
-f 2998/213/467 2999/196/467 2986/212/467
-f 3000/210/468 3001/211/468 3002/209/468
-f 3003/215/469 3002/209/469 3001/211/469
-f 3001/211/469 3004/216/469 3003/215/469
-f 3005/217/103 2978/196/103 2977/197/103
-f 2977/197/103 3006/218/103 3005/217/103
-f 3007/219/470 2983/203/414 2986/204/414
-f 2986/204/414 3008/220/414 3007/219/470
-f 3009/209/471 2991/207/471 2994/207/471
-f 2994/207/471 3010/208/471 3009/209/471
-f 2986/212/472 2999/196/472 3011/213/472
-f 3011/213/472 3008/214/472 2986/212/472
-f 3003/215/332 3004/216/332 2996/211/332
-f 2996/211/332 2995/209/332 3003/215/332
-f 3012/221/437 2976/221/437 2975/222/437
-f 2975/222/437 2998/222/437 3012/221/437
-f 2998/222/426 2975/222/426 2978/203/426
-f 2978/203/426 2999/203/426 2998/222/426
-f 2999/203/425 2978/203/425 3005/206/425
-f 3005/206/425 3011/206/425 2999/203/425
-f 3011/206/465 3005/206/465 3006/223/465
-f 3006/223/465 3013/223/465 3011/206/465
-f 3013/224/473 3006/224/473 2977/226/473
-f 2977/226/473 3014/225/473 3013/224/473
-f 3014/225/430 2977/226/430 2976/224/430
-f 2976/224/430 3012/224/430 3014/225/430
-f 3008/214/468 3011/213/468 3013/228/468
-f 3013/228/468 3015/227/468 3008/214/468
-f 3015/229/437 3016/221/437 3007/219/437
-f 3007/219/437 3008/220/437 3015/229/437
-f 2984/206/465 3017/223/465 3018/230/465
-f 3018/230/465 2985/205/465 2984/206/465
-f 3018/227/107 3012/228/107 2998/213/107
-f 2998/213/107 2985/214/107 3018/227/107
-f 2981/201/465 3019/202/465 3020/199/465
-f 3020/199/465 2982/200/465 2981/201/465
-f 3018/231/474 2997/233/474 2996/232/474
-f 2996/232/474 3012/224/474 3018/231/474
-f 3012/224/430 2996/232/430 3004/234/430
-f 3004/234/430 3014/225/430 3012/224/430
-f 3014/225/473 3004/234/473 3001/232/473
-f 3001/232/473 3013/224/473 3014/225/473
-f 3013/224/428 3001/232/428 3000/233/428
-f 3000/233/428 3015/231/428 3013/224/428
-f 2989/200/437 3021/199/437 3022/202/437
-f 3022/202/437 2990/201/437 2989/200/437
-f 2993/208/466 3002/236/466 3003/235/466
-f 3003/235/466 2994/207/466 2993/208/466
-f 2994/207/471 3003/235/471 2995/236/471
-f 2995/236/471 3010/208/471 2994/207/471
-f 3017/236/27 2979/238/27 2982/237/27
-f 2982/237/27 3018/231/27 3017/236/27
-f 3018/231/27 2982/237/27 3020/239/27
-f 3020/239/27 2997/233/27 3018/231/27
-f 2997/210/193 3020/241/193 3019/240/193
-f 3019/240/193 2995/209/193 2997/210/193
-f 2995/236/26 3019/238/26 2981/242/26
-f 2981/242/26 3010/208/26 2995/236/26
-f 3010/208/26 2981/242/26 2980/240/26
-f 2980/240/26 3009/209/26 3010/208/26
-f 2992/209/26 2987/240/26 2990/242/26
-f 2990/242/26 2993/208/26 2992/209/26
-f 2993/208/26 2990/242/26 3022/238/26
-f 3022/238/26 3002/236/26 2993/208/26
-f 3002/209/475 3022/240/475 3021/241/475
-f 3021/241/475 3000/210/475 3002/209/475
-f 3000/233/27 3021/239/27 2989/237/27
-f 2989/237/27 3015/231/27 3000/233/27
-f 3015/231/27 2989/237/27 2988/238/27
-f 2988/238/27 3016/236/27 3015/231/27
-f 3023/243/187 3024/246/187 3025/245/187
-f 3025/245/187 3026/244/187 3023/243/187
-f 3023/247/161 3027/250/161 3028/249/161
-f 3028/249/161 3024/248/161 3023/247/161
-f 3024/246/188 3028/252/189 3029/251/188
-f 3029/251/188 3025/245/188 3024/246/188
-f 3025/248/163 3029/249/163 3030/250/163
-f 3030/250/163 3026/247/163 3025/248/163
-f 3031/195/4 3032/198/4 3033/197/4
-f 3033/197/4 3034/196/4 3031/195/4
-f 3035/199/465 3036/202/465 3037/201/465
-f 3037/201/465 3038/200/465 3035/199/465
-f 3039/203/421 3040/206/421 3041/205/421
-f 3041/205/421 3042/204/421 3039/203/421
-f 3043/202/437 3044/199/437 3045/200/437
-f 3045/200/437 3046/201/437 3043/202/437
-f 3047/207/466 3048/209/466 3049/208/466
-f 3049/208/466 3050/207/466 3047/207/466
-f 3051/209/107 3052/211/107 3053/210/107
-f 3042/212/467 3041/214/467 3054/213/467
-f 3054/213/467 3055/196/467 3042/212/467
-f 3056/210/468 3057/211/468 3058/209/468
-f 3059/215/469 3058/209/469 3057/211/469
-f 3057/211/469 3060/216/469 3059/215/469
-f 3061/217/103 3034/196/103 3033/197/103
-f 3033/197/103 3062/218/103 3061/217/103
-f 3063/219/414 3039/203/414 3042/204/470
-f 3042/204/470 3064/220/414 3063/219/414
-f 3065/209/471 3047/207/471 3050/207/471
-f 3050/207/471 3066/208/471 3065/209/471
-f 3042/212/472 3055/196/472 3067/213/472
-f 3067/213/472 3064/214/472 3042/212/472
-f 3059/215/332 3060/216/332 3052/211/332
-f 3052/211/332 3051/209/332 3059/215/332
-f 3068/221/437 3032/221/437 3031/222/437
-f 3031/222/437 3054/222/437 3068/221/437
-f 3054/222/426 3031/222/426 3034/203/426
-f 3034/203/426 3055/203/426 3054/222/426
-f 3055/203/425 3034/203/425 3061/206/425
-f 3061/206/425 3067/206/425 3055/203/425
-f 3067/206/465 3061/206/465 3062/223/465
-f 3062/223/465 3069/223/465 3067/206/465
-f 3069/224/473 3062/224/473 3033/226/473
-f 3033/226/473 3070/225/473 3069/224/473
-f 3070/225/430 3033/226/430 3032/224/430
-f 3032/224/430 3068/224/430 3070/225/430
-f 3064/214/468 3067/213/468 3069/228/468
-f 3069/228/468 3071/227/468 3064/214/468
-f 3071/229/437 3072/221/437 3063/219/437
-f 3063/219/437 3064/220/437 3071/229/437
-f 3040/206/465 3073/223/465 3074/230/465
-f 3074/230/465 3041/205/465 3040/206/465
-f 3074/227/107 3068/228/107 3054/213/107
-f 3054/213/107 3041/214/107 3074/227/107
-f 3037/201/465 3075/202/465 3076/199/465
-f 3076/199/465 3038/200/465 3037/201/465
-f 3074/231/474 3053/233/474 3052/232/474
-f 3052/232/474 3068/224/474 3074/231/474
-f 3068/224/430 3052/232/430 3060/234/430
-f 3060/234/430 3070/225/430 3068/224/430
-f 3070/225/473 3060/234/473 3057/232/473
-f 3057/232/473 3069/224/473 3070/225/473
-f 3069/224/428 3057/232/428 3056/233/428
-f 3056/233/428 3071/231/428 3069/224/428
-f 3045/200/437 3077/199/437 3078/202/437
-f 3078/202/437 3046/201/437 3045/200/437
-f 3049/208/466 3058/236/466 3059/235/466
-f 3059/235/466 3050/207/466 3049/208/466
-f 3050/207/471 3059/235/471 3051/236/471
-f 3051/236/471 3066/208/471 3050/207/471
-f 3073/236/27 3035/238/27 3038/237/27
-f 3038/237/27 3074/231/27 3073/236/27
-f 3074/231/27 3038/237/27 3076/239/27
-f 3076/239/27 3053/233/27 3074/231/27
-f 3053/210/193 3076/241/193 3075/240/193
-f 3075/240/193 3051/209/193 3053/210/193
-f 3051/236/26 3075/238/26 3037/242/26
-f 3037/242/26 3066/208/26 3051/236/26
-f 3066/208/26 3037/242/26 3036/240/26
-f 3036/240/26 3065/209/26 3066/208/26
-f 3048/209/26 3043/240/26 3046/242/26
-f 3046/242/26 3049/208/26 3048/209/26
-f 3049/208/26 3046/242/26 3078/238/26
-f 3078/238/26 3058/236/26 3049/208/26
-f 3058/209/475 3078/240/475 3077/241/475
-f 3077/241/475 3056/210/475 3058/209/475
-f 3056/233/27 3077/239/27 3045/237/27
-f 3045/237/27 3071/231/27 3056/233/27
-f 3071/231/27 3045/237/27 3044/238/27
-f 3044/238/27 3072/236/27 3071/231/27
-f 3079/243/476 3080/246/476 3081/245/476
-f 3081/245/476 3082/244/476 3079/243/476
-f 3079/247/477 3083/250/477 3084/249/477
-f 3084/249/477 3080/248/477 3079/247/477
-f 3080/246/478 3084/252/478 3085/251/478
-f 3085/251/478 3081/245/478 3080/246/478
-f 3081/248/479 3085/249/479 3086/250/479
-f 3086/250/479 3082/247/479 3081/248/479
-f 3087/195/387 3088/198/387 3089/197/387
-f 3089/197/387 3090/196/387 3087/195/387
-f 3091/199/388 3092/202/388 3093/201/388
-f 3093/201/388 3094/200/388 3091/199/388
-f 3095/203/389 3096/206/389 3097/205/389
-f 3097/205/389 3098/204/389 3095/203/389
-f 3099/202/390 3100/199/390 3101/200/390
-f 3101/200/390 3102/201/390 3099/202/390
-f 3103/207/391 3104/209/391 3105/208/391
-f 3105/208/391 3106/207/391 3103/207/391
-f 3107/209/392 3108/211/392 3109/210/392
-f 3098/212/393 3097/214/393 3110/213/393
-f 3110/213/393 3111/196/393 3098/212/393
-f 3112/210/394 3113/211/394 3114/209/394
-f 3115/215/395 3114/209/395 3113/211/395
-f 3113/211/395 3116/216/395 3115/215/395
-f 3117/217/396 3090/196/396 3089/197/396
-f 3089/197/396 3118/218/396 3117/217/396
-f 3119/219/397 3095/203/397 3098/204/397
-f 3098/204/397 3120/220/397 3119/219/397
-f 3121/209/398 3103/207/398 3106/207/398
-f 3106/207/398 3122/208/398 3121/209/398
-f 3098/212/399 3111/196/399 3123/213/399
-f 3123/213/399 3120/214/399 3098/212/399
-f 3115/215/400 3116/216/400 3108/211/400
-f 3108/211/400 3107/209/400 3115/215/400
-f 3124/221/390 3088/221/390 3087/222/390
-f 3087/222/390 3110/222/390 3124/221/390
-f 3110/222/401 3087/222/401 3090/203/401
-f 3090/203/401 3111/203/401 3110/222/401
-f 3111/203/402 3090/203/402 3117/206/402
-f 3117/206/402 3123/206/402 3111/203/402
-f 3123/206/388 3117/206/388 3118/223/388
-f 3118/223/388 3125/223/388 3123/206/388
-f 3125/224/403 3118/224/403 3089/226/403
-f 3089/226/403 3126/225/403 3125/224/403
-f 3126/225/404 3089/226/404 3088/224/404
-f 3088/224/404 3124/224/404 3126/225/404
-f 3120/214/394 3123/213/394 3125/228/394
-f 3125/228/394 3127/227/394 3120/214/394
-f 3127/229/390 3128/221/390 3119/219/390
-f 3119/219/390 3120/220/390 3127/229/390
-f 3096/206/388 3129/223/388 3130/230/388
-f 3130/230/388 3097/205/388 3096/206/388
-f 3130/227/392 3124/228/392 3110/213/392
-f 3110/213/392 3097/214/392 3130/227/392
-f 3093/201/388 3131/202/388 3132/199/388
-f 3132/199/388 3094/200/388 3093/201/388
-f 3130/231/405 3109/233/405 3108/232/405
-f 3108/232/405 3124/224/405 3130/231/405
-f 3124/224/404 3108/232/404 3116/234/404
-f 3116/234/404 3126/225/404 3124/224/404
-f 3126/225/403 3116/234/403 3113/232/403
-f 3113/232/403 3125/224/403 3126/225/403
-f 3125/224/407 3113/232/407 3112/233/407
-f 3112/233/407 3127/231/407 3125/224/407
-f 3101/200/390 3133/199/390 3134/202/390
-f 3134/202/390 3102/201/390 3101/200/390
-f 3105/208/391 3114/236/391 3115/235/391
-f 3115/235/391 3106/207/391 3105/208/391
-f 3106/207/398 3115/235/398 3107/236/398
-f 3107/236/398 3122/208/398 3106/207/398
-f 3129/236/27 3091/238/27 3094/237/27
-f 3094/237/27 3130/231/27 3129/236/27
-f 3130/231/27 3094/237/27 3132/239/27
-f 3132/239/27 3109/233/27 3130/231/27
-f 3109/210/409 3132/241/409 3131/240/409
-f 3131/240/409 3107/209/409 3109/210/409
-f 3107/236/26 3131/238/26 3093/242/26
-f 3093/242/26 3122/208/26 3107/236/26
-f 3122/208/26 3093/242/26 3092/240/26
-f 3092/240/26 3121/209/26 3122/208/26
-f 3104/209/26 3099/240/26 3102/242/26
-f 3102/242/26 3105/208/26 3104/209/26
-f 3105/208/26 3102/242/26 3134/238/26
-f 3134/238/26 3114/236/26 3105/208/26
-f 3114/209/410 3134/240/410 3133/241/410
-f 3133/241/410 3112/210/410 3114/209/410
-f 3112/233/27 3133/239/27 3101/237/27
-f 3101/237/27 3127/231/27 3112/233/27
-f 3127/231/27 3101/237/27 3100/238/27
-f 3100/238/27 3128/236/27 3127/231/27
-f 3135/243/180 3136/246/180 3137/245/180
-f 3137/245/180 3138/244/180 3135/243/180
-f 3135/247/151 3139/250/151 3140/249/151
-f 3140/249/151 3136/248/151 3135/247/151
-f 3136/246/181 3140/252/181 3141/251/182
-f 3141/251/182 3137/245/181 3136/246/181
-f 3137/248/153 3141/249/153 3142/250/153
-f 3142/250/153 3138/247/153 3137/248/153
-f 3143/253/24 3144/256/24 3145/255/24
-f 3145/255/24 3146/254/24 3143/253/24
-f 3147/257/23 3148/258/23 3144/256/23
-f 3144/256/23 3143/253/23 3147/257/23
-f 3149/259/191 3150/260/22 3148/258/191
-f 3148/258/191 3147/257/191 3149/259/191
-f 3151/261/21 3152/264/21 3150/263/21
-f 3150/263/21 3149/262/21 3151/261/21
-f 3153/265/20 3154/266/20 3152/264/20
-f 3152/264/20 3151/261/20 3153/265/20
-f 3155/267/19 3156/268/19 3154/266/19
-f 3154/266/19 3153/265/19 3155/267/19
-f 3157/269/194 3158/270/194 3156/268/18
-f 3156/268/18 3155/267/18 3157/269/194
-f 3159/271/17 3160/272/17 3158/270/17
-f 3158/270/17 3157/269/17 3159/271/17
-f 3161/273/16 3162/274/16 3160/272/16
-f 3160/272/16 3159/271/16 3161/273/16
-f 3163/275/118 3164/276/118 3162/274/15
-f 3162/274/15 3161/273/118 3163/275/118
-f 3165/277/14 3166/278/14 3164/276/14
-f 3164/276/14 3163/275/14 3165/277/14
-f 3146/254/13 3145/255/13 3166/278/192
-f 3166/278/192 3165/277/192 3146/254/13
-f 3144/279/27 3167/282/27 3168/281/27
-f 3168/281/27 3145/280/27 3144/279/27
-f 3169/283/27 3170/284/27 3171/282/27
-f 3171/282/27 3172/279/27 3169/283/27
-f 3150/285/27 3173/285/27 3174/284/27
-f 3174/284/27 3148/283/27 3150/285/27
-f 3175/286/27 3176/287/27 3177/285/27
-f 3177/285/27 3178/285/27 3175/286/27
-f 3154/288/27 3179/289/27 3180/287/27
-f 3180/287/27 3152/286/27 3154/288/27
-f 3181/290/27 3182/291/27 3183/289/27
-f 3183/289/27 3184/288/27 3181/290/27
-f 3158/292/27 3185/293/27 3186/291/27
-f 3186/291/27 3156/290/27 3158/292/27
-f 3187/294/27 3188/295/27 3189/293/27
-f 3189/293/27 3190/292/27 3187/294/27
-f 3162/296/27 3191/297/27 3192/295/27
-f 3192/295/27 3160/294/27 3162/296/27
-f 3193/298/27 3194/299/27 3195/297/27
-f 3195/297/27 3196/296/27 3193/298/27
-f 3166/300/27 3197/300/27 3198/299/27
-f 3198/299/27 3164/298/27 3166/300/27
-f 3199/280/27 3200/281/27 3201/300/27
-f 3201/300/27 3202/300/27 3199/280/27
-f 3167/301/18 3203/304/18 3204/303/18
-f 3204/303/18 3168/302/18 3167/301/18
-f 3174/305/17 3205/306/17 3203/304/17
-f 3203/304/17 3167/301/17 3174/305/17
-f 3173/307/16 3206/308/16 3205/306/16
-f 3205/306/16 3174/305/16 3173/307/16
-f 3180/309/15 3207/310/15 3206/308/15
-f 3206/308/15 3173/307/15 3180/309/15
-f 3179/311/14 3208/312/14 3207/310/14
-f 3207/310/14 3180/309/14 3179/311/14
-f 3186/313/13 3209/314/13 3208/312/13
-f 3208/312/13 3179/311/13 3186/313/13
-f 3185/315/25 3210/316/25 3209/314/24
-f 3209/314/24 3186/313/24 3185/315/25
-f 3192/317/23 3211/318/23 3210/316/23
-f 3210/316/23 3185/315/23 3192/317/23
-f 3191/319/22 3212/320/22 3211/318/22
-f 3211/318/22 3192/317/22 3191/319/22
-f 3198/321/21 3213/324/21 3212/323/178
-f 3212/323/178 3191/322/21 3198/321/21
-f 3197/325/20 3214/326/20 3213/324/20
-f 3213/324/20 3198/321/20 3197/325/20
-f 3168/302/19 3204/303/19 3214/326/190
-f 3214/326/190 3197/325/190 3168/302/19
-f 3203/327/27 3215/329/27 3204/328/27
-f 3205/330/27 3215/329/27 3203/327/27
-f 3206/331/27 3215/329/27 3205/330/27
-f 3207/332/27 3215/329/27 3206/331/27
-f 3208/333/27 3215/329/27 3207/332/27
-f 3209/334/27 3215/329/27 3208/333/27
-f 3210/335/27 3215/329/27 3209/334/27
-f 3211/336/27 3215/329/27 3210/335/27
-f 3212/337/27 3215/329/27 3211/336/27
-f 3213/338/27 3215/329/27 3212/337/27
-f 3214/339/27 3215/329/27 3213/338/27
-f 3204/328/27 3215/329/27 3214/339/27
-f 3148/258/23 3169/341/23 3172/340/23
-f 3172/340/23 3144/256/23 3148/258/23
-f 3144/279/153 3172/279/153 3171/282/153
-f 3171/282/153 3167/282/153 3144/279/153
-f 3167/301/17 3171/343/17 3170/342/17
-f 3170/342/17 3174/305/17 3167/301/17
-f 3174/284/196 3170/284/196 3169/283/196
-f 3169/283/196 3148/283/196 3174/284/196
-f 3152/264/21 3175/345/21 3178/344/178
-f 3178/344/178 3150/263/21 3152/264/21
-f 3150/285/1 3178/285/1 3177/285/1
-f 3177/285/1 3173/285/1 3150/285/1
-f 3173/307/15 3177/347/15 3176/346/15
-f 3176/346/15 3180/309/15 3173/307/15
-f 3180/287/195 3176/287/195 3175/286/195
-f 3175/286/195 3152/286/195 3180/287/195
-f 3156/268/19 3181/349/19 3184/348/19
-f 3184/348/19 3154/266/19 3156/268/19
-f 3154/288/161 3184/288/161 3183/289/161
-f 3183/289/161 3179/289/161 3154/288/161
-f 3179/311/13 3183/351/13 3182/350/13
-f 3182/350/13 3186/313/13 3179/311/13
-f 3186/291/4 3182/291/4 3181/290/4
-f 3181/290/4 3156/290/4 3186/291/4
-f 3160/272/17 3187/353/17 3190/352/17
-f 3190/352/17 3158/270/17 3160/272/17
-f 3158/292/151 3190/292/151 3189/293/151
-f 3189/293/151 3185/293/151 3158/292/151
-f 3185/315/23 3189/355/23 3188/354/23
-f 3188/354/23 3192/317/23 3185/315/23
-f 3192/295/198 3188/295/198 3187/294/198
-f 3187/294/198 3160/294/198 3192/295/198
-f 3164/276/118 3193/357/15 3196/356/15
-f 3196/356/15 3162/274/15 3164/276/118
-f 3162/296/7 3196/296/7 3195/297/7
-f 3195/297/7 3191/297/7 3162/296/7
-f 3191/322/21 3195/359/21 3194/358/21
-f 3194/358/21 3198/321/21 3191/322/21
-f 3198/299/197 3194/299/197 3193/298/197
-f 3193/298/197 3164/298/197 3198/299/197
-f 3145/255/13 3199/361/13 3202/360/13
-f 3202/360/13 3166/278/192 3145/255/13
-f 3166/300/163 3202/300/163 3201/300/163
-f 3201/300/163 3197/300/163 3166/300/163
-f 3197/325/190 3201/363/190 3200/362/19
-f 3200/362/19 3168/302/19 3197/325/190
-f 3168/281/10 3200/281/10 3199/280/10
-f 3199/280/10 3145/280/10 3168/281/10
-f 3216/1/7 3217/2/8 3218/3/8
-f 3218/3/8 3219/4/7 3216/1/7
-f 3217/2/8 3220/5/9 3221/6/9
-f 3221/6/9 3218/3/8 3217/2/8
-f 3220/5/9 3222/7/10 3223/8/10
-f 3223/8/10 3221/6/9 3220/5/9
-f 3222/9/10 3224/10/11 3225/11/11
-f 3225/11/11 3223/12/10 3222/9/10
-f 3224/10/11 3226/13/12 3227/14/12
-f 3227/14/12 3225/11/11 3224/10/11
-f 3226/13/12 3228/15/1 3229/16/1
-f 3229/16/1 3227/14/12 3226/13/12
-f 3228/15/1 3230/17/2 3231/18/2
-f 3231/18/2 3229/16/1 3228/15/1
-f 3230/17/2 3232/19/3 3233/20/3
-f 3233/20/3 3231/18/2 3230/17/2
-f 3232/19/3 3234/21/4 3235/22/4
-f 3235/22/4 3233/20/3 3232/19/3
-f 3234/21/4 3236/23/5 3237/24/5
-f 3237/24/5 3235/22/4 3234/21/4
-f 3236/23/5 3238/25/6 3239/26/6
-f 3239/26/6 3237/24/5 3236/23/5
-f 3238/25/6 3216/1/7 3219/4/7
-f 3219/4/7 3239/26/6 3238/25/6
-f 3240/27/19 3241/28/19 3242/29/19
-f 3242/29/19 3243/30/19 3240/27/19
-f 3244/31/20 3240/27/20 3243/30/20
-f 3243/30/20 3245/32/20 3244/31/20
-f 3246/33/21 3244/31/21 3245/32/21
-f 3245/32/21 3247/34/21 3246/33/21
-f 3248/35/22 3246/36/22 3247/37/22
-f 3247/37/22 3249/38/22 3248/35/22
-f 3250/39/23 3248/35/23 3249/38/23
-f 3249/38/23 3251/40/23 3250/39/23
-f 3252/41/24 3250/39/24 3251/40/24
-f 3251/40/24 3253/42/24 3252/41/24
-f 3254/43/13 3252/41/13 3253/42/13
-f 3253/42/13 3255/44/13 3254/43/13
-f 3256/45/14 3254/43/14 3255/44/14
-f 3255/44/14 3257/46/14 3256/45/14
-f 3258/47/15 3256/45/15 3257/46/15
-f 3257/46/15 3259/48/15 3258/47/15
-f 3260/49/16 3258/47/16 3259/48/16
-f 3259/48/16 3261/50/16 3260/49/16
-f 3262/51/17 3260/49/17 3261/50/17
-f 3261/50/17 3263/52/17 3262/51/17
-f 3241/28/18 3262/51/194 3263/52/18
-f 3263/52/18 3242/29/18 3241/28/18
-f 3217/53/26 3216/54/26 3241/54/26
-f 3241/54/26 3240/53/26 3217/53/26
-f 3216/54/26 3238/55/26 3262/55/26
-f 3262/55/26 3241/54/26 3216/54/26
-f 3238/55/26 3236/56/26 3260/56/26
-f 3260/56/26 3262/55/26 3238/55/26
-f 3236/56/26 3234/57/26 3258/57/26
-f 3258/57/26 3260/56/26 3236/56/26
-f 3234/57/26 3232/58/26 3256/59/26
-f 3256/59/26 3258/57/26 3234/57/26
-f 3232/58/26 3230/60/26 3254/61/26
-f 3254/61/26 3256/59/26 3232/58/26
-f 3230/60/26 3228/62/26 3252/62/26
-f 3252/62/26 3254/61/26 3230/60/26
-f 3228/62/26 3226/63/26 3250/64/26
-f 3250/64/26 3252/62/26 3228/62/26
-f 3226/63/26 3224/65/26 3248/66/26
-f 3248/66/26 3250/64/26 3226/63/26
-f 3224/65/26 3222/67/26 3246/67/26
-f 3246/67/26 3248/66/26 3224/65/26
-f 3222/67/26 3220/68/26 3244/68/26
-f 3244/68/26 3246/67/26 3222/67/26
-f 3220/68/26 3217/53/26 3240/53/26
-f 3240/53/26 3244/68/26 3220/68/26
-f 3264/54/27 3265/53/27 3243/53/27
-f 3243/53/27 3242/54/27 3264/54/27
-f 3265/53/27 3266/68/27 3245/68/27
-f 3245/68/27 3243/53/27 3265/53/27
-f 3266/68/27 3267/67/27 3247/67/27
-f 3247/67/27 3245/68/27 3266/68/27
-f 3267/67/27 3268/65/27 3249/66/27
-f 3249/66/27 3247/67/27 3267/67/27
-f 3268/65/27 3269/63/27 3251/64/27
-f 3251/64/27 3249/66/27 3268/65/27
-f 3269/63/27 3270/62/27 3253/62/27
-f 3253/62/27 3251/64/27 3269/63/27
-f 3270/62/27 3271/60/27 3255/61/27
-f 3255/61/27 3253/62/27 3270/62/27
-f 3271/60/27 3272/58/27 3257/59/27
-f 3257/59/27 3255/61/27 3271/60/27
-f 3272/58/27 3273/57/27 3259/57/27
-f 3259/57/27 3257/59/27 3272/58/27
-f 3273/57/27 3274/56/27 3261/56/27
-f 3261/56/27 3259/57/27 3273/57/27
-f 3274/56/27 3275/55/27 3263/55/27
-f 3263/55/27 3261/56/27 3274/56/27
-f 3275/55/27 3264/54/27 3242/54/27
-f 3242/54/27 3263/55/27 3275/55/27
-f 3264/69/7 3276/70/7 3277/71/8
-f 3277/71/8 3265/72/8 3264/69/7
-f 3265/72/8 3277/71/8 3278/73/20
-f 3278/73/20 3266/74/20 3265/72/8
-f 3266/74/21 3278/73/21 3279/75/21
-f 3279/75/21 3267/76/21 3266/74/21
-f 3267/76/22 3279/75/22 3280/77/11
-f 3280/77/11 3268/78/11 3267/76/22
-f 3268/78/11 3280/77/11 3281/79/12
-f 3281/79/12 3269/80/12 3268/78/11
-f 3269/81/12 3281/82/12 3282/83/1
-f 3282/83/1 3270/84/1 3269/81/12
-f 3270/84/1 3282/83/1 3283/85/2
-f 3283/85/2 3271/86/2 3270/84/1
-f 3271/86/2 3283/85/2 3284/87/3
-f 3284/87/3 3272/88/3 3271/86/2
-f 3272/88/3 3284/87/3 3285/89/4
-f 3285/89/4 3273/90/4 3272/88/3
-f 3273/90/4 3285/89/4 3286/91/5
-f 3286/91/5 3274/92/5 3273/90/4
-f 3274/92/5 3286/91/5 3287/93/6
-f 3287/93/6 3275/94/6 3274/92/5
-f 3275/94/6 3287/93/6 3276/70/7
-f 3276/70/7 3264/69/7 3275/94/6
-f 3288/95/26 3289/96/26 3290/96/26
-f 3290/96/26 3291/95/26 3288/95/26
-f 3292/97/26 3288/95/26 3291/95/26
-f 3291/95/26 3293/97/26 3292/97/26
-f 3294/67/26 3292/97/26 3293/97/26
-f 3293/97/26 3295/98/26 3294/67/26
-f 3296/99/26 3294/67/26 3295/98/26
-f 3295/98/26 3297/99/26 3296/99/26
-f 3298/100/26 3296/99/26 3297/99/26
-f 3297/99/26 3299/100/26 3298/100/26
-f 3300/101/26 3298/100/26 3299/100/26
-f 3299/100/26 3301/101/26 3300/101/26
-f 3302/61/26 3300/101/26 3301/101/26
-f 3301/101/26 3303/61/26 3302/61/26
-f 3304/59/26 3302/61/26 3303/61/26
-f 3303/61/26 3305/102/26 3304/59/26
-f 3306/103/26 3304/59/26 3305/102/26
-f 3305/102/26 3307/103/26 3306/103/26
-f 3308/104/26 3306/103/26 3307/103/26
-f 3307/103/26 3309/105/26 3308/104/26
-f 3310/106/26 3308/104/26 3309/105/26
-f 3309/105/26 3311/106/26 3310/106/26
-f 3289/96/26 3310/106/26 3311/106/26
-f 3311/106/26 3290/96/26 3289/96/26
-f 3291/107/34 3290/108/34 3312/109/34
-f 3312/109/34 3313/110/34 3291/107/34
-f 3293/111/35 3291/107/35 3313/110/35
-f 3313/110/35 3314/112/35 3293/111/35
-f 3295/113/36 3293/111/36 3314/112/36
-f 3314/112/36 3315/114/36 3295/113/36
-f 3297/115/37 3295/113/37 3315/114/37
-f 3315/114/37 3316/116/37 3297/115/37
-f 3299/117/38 3297/115/38 3316/116/38
-f 3316/116/38 3317/118/38 3299/117/38
-f 3301/119/39 3299/117/39 3317/118/39
-f 3317/118/39 3318/120/39 3301/119/39
-f 3303/121/28 3301/119/28 3318/120/28
-f 3318/120/28 3319/122/28 3303/121/28
-f 3305/123/29 3303/121/29 3319/122/29
-f 3319/122/29 3320/124/29 3305/123/29
-f 3307/125/30 3305/123/30 3320/124/30
-f 3320/124/30 3321/126/30 3307/125/30
-f 3309/127/31 3307/128/31 3321/129/31
-f 3321/129/31 3322/130/31 3309/127/31
-f 3311/131/32 3309/127/32 3322/130/32
-f 3322/130/32 3323/132/32 3311/131/32
-f 3290/108/33 3311/131/33 3323/132/33
-f 3323/132/33 3312/109/33 3290/108/33
-f 3313/110/48 3312/109/48 3324/133/48
-f 3324/133/48 3325/134/48 3313/110/48
-f 3314/112/49 3313/110/49 3325/134/49
-f 3325/134/49 3326/135/49 3314/112/49
-f 3315/114/50 3314/112/50 3326/135/50
-f 3326/135/50 3327/136/50 3315/114/50
-f 3316/116/51 3315/114/51 3327/136/52
-f 3327/136/52 3328/137/51 3316/116/51
-f 3317/118/53 3316/116/53 3328/137/53
-f 3328/137/53 3329/138/53 3317/118/53
-f 3318/120/54 3317/118/54 3329/138/54
-f 3329/138/54 3330/139/54 3318/120/54
-f 3319/122/386 3318/120/40 3330/139/40
-f 3330/139/40 3331/140/40 3319/122/386
-f 3320/124/41 3319/122/41 3331/140/41
-f 3331/140/41 3332/141/41 3320/124/41
-f 3321/126/42 3320/124/42 3332/141/42
-f 3332/141/42 3333/142/43 3321/126/42
-f 3322/130/44 3321/129/44 3333/143/44
-f 3333/143/44 3334/144/44 3322/130/44
-f 3323/132/45 3322/130/45 3334/144/45
-f 3334/144/45 3335/145/45 3323/132/45
-f 3312/109/46 3323/132/385 3335/145/46
-f 3335/145/46 3324/133/46 3312/109/46
-f 3336/146/64 3337/147/64 3277/148/64
-f 3277/148/64 3276/149/64 3336/146/64
-f 3337/147/66 3338/150/66 3278/151/65
-f 3278/151/65 3277/148/65 3337/147/66
-f 3338/152/67 3339/153/67 3279/154/67
-f 3279/154/67 3278/155/67 3338/152/67
-f 3339/153/68 3340/142/68 3280/156/68
-f 3280/156/68 3279/154/68 3339/153/68
-f 3340/142/70 3341/157/70 3281/158/69
-f 3281/158/69 3280/156/69 3340/142/70
-f 3341/157/71 3342/159/71 3282/160/71
-f 3282/160/71 3281/158/71 3341/157/71
-f 3342/159/56 3343/161/56 3283/162/56
-f 3283/162/56 3282/160/56 3342/159/56
-f 3343/161/57 3344/163/57 3284/164/58
-f 3284/164/58 3283/162/58 3343/161/57
-f 3344/163/59 3345/165/59 3285/166/59
-f 3285/166/59 3284/164/59 3344/163/59
-f 3345/165/60 3346/167/60 3286/168/60
-f 3286/168/60 3285/166/60 3345/165/60
-f 3346/167/61 3347/169/61 3287/170/61
-f 3287/170/61 3286/168/62 3346/167/61
-f 3347/169/63 3336/146/63 3276/149/63
-f 3276/149/63 3287/170/63 3347/169/63
-f 3289/171/7 3288/172/8 3337/173/8
-f 3337/173/8 3336/174/7 3289/171/7
-f 3288/172/8 3292/175/9 3338/176/9
-f 3338/176/9 3337/173/8 3288/172/8
-f 3292/177/9 3294/178/10 3339/179/10
-f 3339/179/10 3338/180/9 3292/177/9
-f 3294/178/10 3296/86/11 3340/181/11
-f 3340/181/11 3339/179/10 3294/178/10
-f 3296/86/11 3298/182/12 3341/183/12
-f 3341/183/12 3340/181/11 3296/86/11
-f 3298/182/12 3300/184/1 3342/185/1
-f 3342/185/1 3341/183/12 3298/182/12
-f 3300/184/1 3302/186/2 3343/187/2
-f 3343/187/2 3342/185/1 3300/184/1
-f 3302/186/2 3304/188/3 3344/189/3
-f 3344/189/3 3343/187/2 3302/186/2
-f 3304/188/3 3306/190/4 3345/191/4
-f 3345/191/4 3344/189/3 3304/188/3
-f 3306/190/4 3308/76/5 3346/192/5
-f 3346/192/5 3345/191/4 3306/190/4
-f 3308/76/5 3310/193/6 3347/194/6
-f 3347/194/6 3346/192/5 3308/76/5
-f 3310/193/6 3289/171/7 3336/174/7
-f 3336/174/7 3347/194/6 3310/193/6
-f 3348/195/131 3349/196/131 3350/197/131
-f 3350/197/131 3351/198/131 3348/195/131
-f 3352/199/75 3353/200/75 3354/201/75
-f 3354/201/75 3355/202/75 3352/199/75
-f 3356/203/132 3357/204/132 3358/205/132
-f 3358/205/132 3359/206/132 3356/203/132
-f 3360/202/73 3361/201/73 3362/200/73
-f 3362/200/73 3363/199/73 3360/202/73
-f 3364/207/83 3365/207/83 3366/208/83
-f 3366/208/83 3367/209/83 3364/207/83
-f 3368/209/133 3369/210/133 3370/211/133
-f 3357/212/134 3371/196/134 3372/213/134
-f 3372/213/134 3358/214/134 3357/212/134
-f 3373/210/135 3374/209/135 3375/211/135
-f 3376/215/136 3377/216/136 3375/211/136
-f 3375/211/136 3374/209/136 3376/215/136
-f 3378/217/137 3379/218/137 3350/197/137
-f 3350/197/137 3349/196/137 3378/217/137
-f 3380/219/139 3381/220/139 3357/204/139
-f 3357/204/139 3356/203/139 3380/219/139
-f 3382/209/76 3383/208/76 3365/207/76
-f 3365/207/76 3364/207/76 3382/209/76
-f 3357/212/140 3381/214/140 3384/213/140
-f 3384/213/140 3371/196/140 3357/212/140
-f 3376/215/141 3368/209/141 3370/211/141
-f 3370/211/141 3377/216/141 3376/215/141
-f 3385/221/73 3372/222/73 3348/222/73
-f 3348/222/73 3351/221/73 3385/221/73
-f 3372/222/87 3371/203/87 3349/203/87
-f 3349/203/87 3348/222/87 3372/222/87
-f 3371/203/86 3384/206/86 3378/206/86
-f 3378/206/86 3349/203/86 3371/203/86
-f 3384/206/75 3386/223/75 3379/223/75
-f 3379/223/75 3378/206/75 3384/206/75
-f 3386/224/142 3387/225/142 3350/226/142
-f 3350/226/142 3379/224/142 3386/224/142
-f 3387/225/143 3385/224/143 3351/224/143
-f 3351/224/143 3350/226/143 3387/225/143
-f 3381/214/135 3388/227/135 3386/228/135
-f 3386/228/135 3384/213/135 3381/214/135
-f 3388/229/73 3381/220/73 3380/219/73
-f 3380/219/73 3389/221/73 3388/229/73
-f 3359/206/75 3358/205/75 3390/230/75
-f 3390/230/75 3391/223/75 3359/206/75
-f 3390/227/133 3358/214/133 3372/213/133
-f 3372/213/133 3385/228/133 3390/227/133
-f 3354/201/75 3353/200/75 3392/199/75
-f 3392/199/75 3393/202/75 3354/201/75
-f 3390/231/144 3385/224/144 3370/232/144
-f 3370/232/144 3369/233/144 3390/231/144
-f 3385/224/143 3387/225/143 3377/234/143
-f 3377/234/143 3370/232/143 3385/224/143
-f 3387/225/142 3386/224/142 3375/232/142
-f 3375/232/142 3377/234/142 3387/225/142
-f 3386/224/145 3388/231/145 3373/233/145
-f 3373/233/145 3375/232/145 3386/224/145
-f 3362/200/73 3361/201/73 3394/202/73
-f 3394/202/73 3395/199/73 3362/200/73
-f 3366/208/83 3365/207/83 3376/235/83
-f 3376/235/83 3374/236/83 3366/208/83
-f 3365/207/76 3383/208/76 3368/236/76
-f 3368/236/76 3376/235/76 3365/207/76
-f 3391/236/27 3390/231/27 3353/237/27
-f 3353/237/27 3352/238/27 3391/236/27
-f 3390/231/27 3369/233/27 3392/239/27
-f 3392/239/27 3353/237/27 3390/231/27
-f 3369/210/480 3368/209/480 3393/240/480
-f 3393/240/480 3392/241/480 3369/210/480
-f 3368/236/26 3383/208/26 3354/242/26
-f 3354/242/26 3393/238/26 3368/236/26
-f 3383/208/26 3382/209/26 3355/240/26
-f 3355/240/26 3354/242/26 3383/208/26
-f 3367/209/26 3366/208/26 3361/242/26
-f 3361/242/26 3360/240/26 3367/209/26
-f 3366/208/26 3374/236/26 3394/238/26
-f 3394/238/26 3361/242/26 3366/208/26
-f 3374/209/147 3373/210/147 3395/241/147
-f 3395/241/147 3394/240/147 3374/209/147
-f 3373/233/27 3388/231/27 3362/237/27
-f 3362/237/27 3395/239/27 3373/233/27
-f 3388/231/27 3389/236/27 3363/238/27
-f 3363/238/27 3362/237/27 3388/231/27
-f 3396/195/10 3397/196/10 3398/197/10
-f 3398/197/10 3399/198/10 3396/195/10
-f 3400/199/101 3401/200/100 3402/201/100
-f 3402/201/100 3403/202/101 3400/199/101
-f 3404/203/108 3405/204/108 3406/205/108
-f 3406/205/108 3407/206/108 3404/203/108
-f 3408/202/98 3409/201/97 3410/200/97
-f 3410/200/97 3411/199/98 3408/202/98
-f 3412/207/166 3413/207/166 3414/208/166
-f 3414/208/166 3415/209/166 3412/207/166
-f 3416/209/167 3417/210/167 3418/211/167
-f 3405/212/168 3419/196/168 3420/213/168
-f 3420/213/168 3406/214/168 3405/212/168
-f 3421/210/169 3422/209/169 3423/211/169
-f 3424/215/170 3425/216/170 3423/211/170
-f 3423/211/170 3422/209/170 3424/215/170
-f 3426/217/171 3427/218/171 3398/197/171
-f 3398/197/171 3397/196/171 3426/217/171
-f 3428/219/99 3429/220/99 3405/204/99
-f 3405/204/99 3404/203/99 3428/219/99
-f 3430/209/173 3431/208/173 3413/207/173
-f 3413/207/173 3412/207/173 3430/209/173
-f 3405/212/174 3429/214/174 3432/213/174
-f 3432/213/174 3419/196/174 3405/212/174
-f 3424/215/175 3416/209/175 3418/211/175
-f 3418/211/175 3425/216/175 3424/215/175
-f 3433/221/98 3420/222/98 3396/222/97
-f 3396/222/97 3399/221/97 3433/221/98
-f 3420/222/113 3419/203/113 3397/203/113
-f 3397/203/113 3396/222/113 3420/222/113
-f 3419/203/112 3432/206/112 3426/206/112
-f 3426/206/112 3397/203/112 3419/203/112
-f 3432/206/100 3434/223/100 3427/223/100
-f 3427/223/100 3426/206/100 3432/206/100
-f 3434/224/176 3435/225/176 3398/226/176
-f 3398/226/176 3427/224/176 3434/224/176
-f 3435/225/117 3433/224/117 3399/224/117
-f 3399/224/117 3398/226/117 3435/225/117
-f 3429/214/169 3436/227/169 3434/228/169
-f 3434/228/169 3432/213/169 3429/214/169
-f 3436/229/98 3429/220/98 3428/219/98
-f 3428/219/98 3437/221/98 3436/229/98
-f 3407/206/100 3406/205/100 3438/230/100
-f 3438/230/100 3439/223/100 3407/206/100
-f 3438/227/167 3406/214/167 3420/213/167
-f 3420/213/167 3433/228/167 3438/227/167
-f 3402/201/100 3401/200/100 3440/199/101
-f 3440/199/101 3441/202/101 3402/201/100
-f 3438/231/481 3433/224/481 3418/232/481
-f 3418/232/481 3417/233/481 3438/231/481
-f 3433/224/117 3435/225/117 3425/234/117
-f 3425/234/117 3418/232/117 3433/224/117
-f 3435/225/176 3434/224/176 3423/232/176
-f 3423/232/176 3425/234/176 3435/225/176
-f 3434/224/115 3436/231/115 3421/233/115
-f 3421/233/115 3423/232/115 3434/224/115
-f 3410/200/97 3409/201/97 3442/202/98
-f 3442/202/98 3443/199/98 3410/200/97
-f 3414/208/166 3413/207/166 3424/235/166
-f 3424/235/166 3422/236/166 3414/208/166
-f 3413/207/173 3431/208/173 3416/236/173
-f 3416/236/173 3424/235/173 3413/207/173
-f 3439/236/27 3438/231/27 3401/237/27
-f 3401/237/27 3400/238/27 3439/236/27
-f 3438/231/27 3417/233/27 3440/239/27
-f 3440/239/27 3401/237/27 3438/231/27
-f 3417/210/178 3416/209/178 3441/240/178
-f 3441/240/178 3440/241/178 3417/210/178
-f 3416/236/26 3431/208/26 3402/242/26
-f 3402/242/26 3441/238/26 3416/236/26
-f 3431/208/26 3430/209/26 3403/240/26
-f 3403/240/26 3402/242/26 3431/208/26
-f 3415/209/26 3414/208/26 3409/242/26
-f 3409/242/26 3408/240/26 3415/209/26
-f 3414/208/26 3422/236/26 3442/238/26
-f 3442/238/26 3409/242/26 3414/208/26
-f 3422/209/179 3421/210/179 3443/241/179
-f 3443/241/179 3442/240/179 3422/209/179
-f 3421/233/27 3436/231/27 3410/237/27
-f 3410/237/27 3443/239/27 3421/233/27
-f 3436/231/27 3437/236/27 3411/238/27
-f 3411/238/27 3410/237/27 3436/231/27
-f 3444/243/183 3445/244/183 3446/245/183
-f 3446/245/183 3447/246/183 3444/243/183
-f 3444/247/184 3447/248/184 3448/249/184
-f 3448/249/184 3449/250/184 3444/247/184
-f 3447/246/185 3446/245/185 3450/251/185
-f 3450/251/185 3448/252/185 3447/246/185
-f 3446/248/186 3445/247/186 3451/250/186
-f 3451/250/186 3450/249/186 3446/248/186
-f 3452/195/164 3453/196/164 3454/197/164
-f 3454/197/164 3455/198/164 3452/195/164
-f 3456/199/101 3457/200/100 3458/201/100
-f 3458/201/100 3459/202/101 3456/199/101
-f 3460/203/108 3461/204/108 3462/205/108
-f 3462/205/108 3463/206/108 3460/203/108
-f 3464/202/98 3465/201/97 3466/200/97
-f 3466/200/97 3467/199/98 3464/202/98
-f 3468/207/166 3469/207/166 3470/208/166
-f 3470/208/166 3471/209/166 3468/207/166
-f 3472/209/167 3473/210/167 3474/211/167
-f 3461/212/168 3475/196/168 3476/213/168
-f 3476/213/168 3462/214/168 3461/212/168
-f 3477/210/169 3478/209/169 3479/211/169
-f 3480/215/170 3481/216/170 3479/211/170
-f 3479/211/170 3478/209/170 3480/215/170
-f 3482/217/171 3483/218/171 3454/197/171
-f 3454/197/171 3453/196/171 3482/217/171
-f 3484/219/172 3485/220/172 3461/204/99
-f 3461/204/99 3460/203/99 3484/219/172
-f 3486/209/173 3487/208/173 3469/207/173
-f 3469/207/173 3468/207/173 3486/209/173
-f 3461/212/174 3485/214/174 3488/213/174
-f 3488/213/174 3475/196/174 3461/212/174
-f 3480/215/175 3472/209/175 3474/211/175
-f 3474/211/175 3481/216/175 3480/215/175
-f 3489/221/98 3476/222/98 3452/222/98
-f 3452/222/98 3455/221/98 3489/221/98
-f 3476/222/113 3475/203/113 3453/203/113
-f 3453/203/113 3452/222/113 3476/222/113
-f 3475/203/112 3488/206/112 3482/206/112
-f 3482/206/112 3453/203/112 3475/203/112
-f 3488/206/100 3490/223/100 3483/223/100
-f 3483/223/100 3482/206/100 3488/206/100
-f 3490/224/176 3491/225/176 3454/226/176
-f 3454/226/176 3483/224/176 3490/224/176
-f 3491/225/117 3489/224/117 3455/224/117
-f 3455/224/117 3454/226/117 3491/225/117
-f 3485/214/169 3492/227/169 3490/228/169
-f 3490/228/169 3488/213/169 3485/214/169
-f 3492/229/125 3485/220/125 3484/219/97
-f 3484/219/97 3493/221/97 3492/229/125
-f 3463/206/100 3462/205/101 3494/230/101
-f 3494/230/101 3495/223/100 3463/206/100
-f 3494/227/167 3462/214/167 3476/213/167
-f 3476/213/167 3489/228/167 3494/227/167
-f 3458/201/100 3457/200/100 3496/199/101
-f 3496/199/101 3497/202/101 3458/201/100
-f 3494/231/481 3489/224/481 3474/232/481
-f 3474/232/481 3473/233/481 3494/231/481
-f 3489/224/117 3491/225/117 3481/234/117
-f 3481/234/117 3474/232/117 3489/224/117
-f 3491/225/176 3490/224/176 3479/232/176
-f 3479/232/176 3481/234/176 3491/225/176
-f 3490/224/115 3492/231/115 3477/233/115
-f 3477/233/115 3479/232/115 3490/224/115
-f 3466/200/97 3465/201/97 3498/202/98
-f 3498/202/98 3499/199/98 3466/200/97
-f 3470/208/166 3469/207/166 3480/235/166
-f 3480/235/166 3478/236/166 3470/208/166
-f 3469/207/173 3487/208/173 3472/236/173
-f 3472/236/173 3480/235/173 3469/207/173
-f 3495/236/27 3494/231/27 3457/237/27
-f 3457/237/27 3456/238/27 3495/236/27
-f 3494/231/27 3473/233/27 3496/239/27
-f 3496/239/27 3457/237/27 3494/231/27
-f 3473/210/178 3472/209/178 3497/240/178
-f 3497/240/178 3496/241/178 3473/210/178
-f 3472/236/26 3487/208/26 3458/242/26
-f 3458/242/26 3497/238/26 3472/236/26
-f 3487/208/26 3486/209/26 3459/240/26
-f 3459/240/26 3458/242/26 3487/208/26
-f 3471/209/26 3470/208/26 3465/242/26
-f 3465/242/26 3464/240/26 3471/209/26
-f 3470/208/26 3478/236/26 3498/238/26
-f 3498/238/26 3465/242/26 3470/208/26
-f 3478/209/179 3477/210/179 3499/241/179
-f 3499/241/179 3498/240/179 3478/209/179
-f 3477/233/27 3492/231/27 3466/237/27
-f 3466/237/27 3499/239/27 3477/233/27
-f 3492/231/27 3493/236/27 3467/238/27
-f 3467/238/27 3466/237/27 3492/231/27
-f 3500/243/156 3501/244/156 3502/245/156
-f 3502/245/156 3503/246/156 3500/243/156
-f 3500/247/157 3503/248/157 3504/249/157
-f 3504/249/157 3505/250/157 3500/247/157
-f 3503/246/158 3502/245/158 3506/251/158
-f 3506/251/158 3504/252/158 3503/246/158
-f 3502/248/159 3501/247/159 3507/250/159
-f 3507/250/159 3506/249/159 3502/248/159
-f 3508/195/72 3509/196/72 3510/197/72
-f 3510/197/72 3511/198/72 3508/195/72
-f 3512/199/73 3513/200/73 3514/201/73
-f 3514/201/73 3515/202/73 3512/199/73
-f 3516/203/74 3517/204/74 3518/205/74
-f 3518/205/74 3519/206/74 3516/203/74
-f 3520/202/75 3521/201/75 3522/200/75
-f 3522/200/75 3523/199/75 3520/202/75
-f 3524/207/76 3525/207/76 3526/208/76
-f 3526/208/76 3527/209/76 3524/207/76
-f 3528/209/77 3529/210/77 3530/211/77
-f 3517/212/78 3531/196/78 3532/213/78
-f 3532/213/78 3518/214/78 3517/212/78
-f 3533/210/79 3534/209/79 3535/211/79
-f 3536/215/80 3537/216/80 3535/211/80
-f 3535/211/80 3534/209/80 3536/215/80
-f 3538/217/81 3539/218/81 3510/197/482
-f 3510/197/482 3509/196/482 3538/217/81
-f 3540/219/82 3541/220/82 3517/204/82
-f 3517/204/82 3516/203/82 3540/219/82
-f 3542/209/83 3543/208/83 3525/207/83
-f 3525/207/83 3524/207/83 3542/209/83
-f 3517/212/84 3541/214/84 3544/213/84
-f 3544/213/84 3531/196/84 3517/212/84
-f 3536/215/85 3528/209/85 3530/211/85
-f 3530/211/85 3537/216/85 3536/215/85
-f 3545/221/75 3532/222/75 3508/222/75
-f 3508/222/75 3511/221/75 3545/221/75
-f 3532/222/86 3531/203/86 3509/203/86
-f 3509/203/86 3508/222/86 3532/222/86
-f 3531/203/87 3544/206/87 3538/206/87
-f 3538/206/87 3509/203/87 3531/203/87
-f 3544/206/73 3546/223/73 3539/223/73
-f 3539/223/73 3538/206/73 3544/206/73
-f 3546/224/88 3547/225/88 3510/226/88
-f 3510/226/88 3539/224/88 3546/224/88
-f 3547/225/89 3545/224/89 3511/224/89
-f 3511/224/89 3510/226/89 3547/225/89
-f 3541/214/79 3548/227/79 3546/228/79
-f 3546/228/79 3544/213/79 3541/214/79
-f 3548/229/75 3541/220/75 3540/219/75
-f 3540/219/75 3549/221/75 3548/229/75
-f 3519/206/73 3518/205/73 3550/230/73
-f 3550/230/73 3551/223/73 3519/206/73
-f 3550/227/77 3518/214/77 3532/213/77
-f 3532/213/77 3545/228/77 3550/227/77
-f 3514/201/73 3513/200/73 3552/199/73
-f 3552/199/73 3553/202/73 3514/201/73
-f 3550/231/90 3545/224/90 3530/232/90
-f 3530/232/90 3529/233/90 3550/231/90
-f 3545/224/89 3547/225/89 3537/234/89
-f 3537/234/89 3530/232/89 3545/224/89
-f 3547/225/88 3546/224/88 3535/232/88
-f 3535/232/88 3537/234/88 3547/225/88
-f 3546/224/92 3548/231/92 3533/233/92
-f 3533/233/92 3535/232/92 3546/224/92
-f 3522/200/75 3521/201/75 3554/202/75
-f 3554/202/75 3555/199/75 3522/200/75
-f 3526/208/76 3525/207/76 3536/235/76
-f 3536/235/76 3534/236/76 3526/208/76
-f 3525/207/83 3543/208/83 3528/236/83
-f 3528/236/83 3536/235/83 3525/207/83
-f 3551/236/27 3550/231/27 3513/237/27
-f 3513/237/27 3512/238/27 3551/236/27
-f 3550/231/27 3529/233/27 3552/239/27
-f 3552/239/27 3513/237/27 3550/231/27
-f 3529/210/94 3528/209/94 3553/240/94
-f 3553/240/94 3552/241/94 3529/210/94
-f 3528/236/26 3543/208/26 3514/242/26
-f 3514/242/26 3553/238/26 3528/236/26
-f 3543/208/26 3542/209/26 3515/240/26
-f 3515/240/26 3514/242/26 3543/208/26
-f 3527/209/26 3526/208/26 3521/242/26
-f 3521/242/26 3520/240/26 3527/209/26
-f 3526/208/26 3534/236/26 3554/238/26
-f 3554/238/26 3521/242/26 3526/208/26
-f 3534/209/95 3533/210/95 3555/241/95
-f 3555/241/95 3554/240/95 3534/209/95
-f 3533/233/27 3548/231/27 3522/237/27
-f 3522/237/27 3555/239/27 3533/233/27
-f 3548/231/27 3549/236/27 3523/238/27
-f 3523/238/27 3522/237/27 3548/231/27
-f 3556/243/154 3557/244/154 3558/245/154
-f 3558/245/154 3559/246/154 3556/243/154
-f 3556/247/7 3559/248/7 3560/249/7
-f 3560/249/7 3561/250/7 3556/247/7
-f 3559/246/155 3558/245/155 3562/251/155
-f 3562/251/155 3560/252/155 3559/246/155
-f 3558/248/1 3557/247/1 3563/250/1
-f 3563/250/1 3562/249/1 3558/248/1
-f 3564/243/180 3565/244/180 3566/245/180
-f 3566/245/180 3567/246/180 3564/243/180
-f 3564/247/153 3567/248/153 3568/249/153
-f 3568/249/153 3569/250/153 3564/247/153
-f 3567/246/181 3566/245/181 3570/251/181
-f 3570/251/181 3568/252/181 3567/246/181
-f 3566/248/151 3565/247/151 3571/250/151
-f 3571/250/151 3570/249/151 3566/248/151
-f 3572/243/148 3573/244/148 3574/245/148
-f 3574/245/148 3575/246/148 3572/243/148
-f 3572/247/1 3575/248/1 3576/249/1
-f 3576/249/1 3577/250/1 3572/247/1
-f 3575/246/149 3574/245/149 3578/251/149
-f 3578/251/149 3576/252/149 3575/246/149
-f 3574/248/7 3573/247/7 3579/250/7
-f 3579/250/7 3578/249/7 3574/248/7
-f 3580/243/127 3581/244/127 3582/245/127
-f 3582/245/127 3583/246/127 3580/243/127
-f 3580/247/128 3583/248/128 3584/249/128
-f 3584/249/128 3585/250/128 3580/247/128
-f 3583/246/129 3582/245/129 3586/251/129
-f 3586/251/129 3584/252/129 3583/246/129
-f 3582/248/130 3581/247/130 3587/250/130
-f 3587/250/130 3586/249/130 3582/248/130
-f 3588/243/187 3589/244/187 3590/245/187
-f 3590/245/187 3591/246/187 3588/243/187
-f 3588/247/163 3591/248/163 3592/249/163
-f 3592/249/163 3593/250/163 3588/247/163
-f 3591/246/188 3590/245/188 3594/251/188
-f 3594/251/188 3592/252/188 3591/246/188
-f 3590/248/161 3589/247/161 3595/250/161
-f 3595/250/161 3594/249/161 3590/248/161
-f 3596/195/72 3597/196/72 3598/197/72
-f 3598/197/72 3599/198/72 3596/195/72
-f 3600/199/73 3601/200/73 3602/201/73
-f 3602/201/73 3603/202/73 3600/199/73
-f 3604/203/74 3605/204/74 3606/205/74
-f 3606/205/74 3607/206/74 3604/203/74
-f 3608/202/75 3609/201/75 3610/200/75
-f 3610/200/75 3611/199/75 3608/202/75
-f 3612/207/76 3613/207/76 3614/208/76
-f 3614/208/76 3615/209/76 3612/207/76
-f 3616/209/77 3617/210/77 3618/211/77
-f 3605/212/78 3619/196/78 3620/213/78
-f 3620/213/78 3606/214/78 3605/212/78
-f 3621/210/79 3622/209/79 3623/211/79
-f 3624/215/80 3625/216/80 3623/211/80
-f 3623/211/80 3622/209/80 3624/215/80
-f 3626/217/81 3627/218/81 3598/197/482
-f 3598/197/482 3597/196/482 3626/217/81
-f 3628/219/82 3629/220/82 3605/204/82
-f 3605/204/82 3604/203/82 3628/219/82
-f 3630/209/83 3631/208/83 3613/207/83
-f 3613/207/83 3612/207/83 3630/209/83
-f 3605/212/84 3629/214/84 3632/213/84
-f 3632/213/84 3619/196/84 3605/212/84
-f 3624/215/85 3616/209/85 3618/211/85
-f 3618/211/85 3625/216/85 3624/215/85
-f 3633/221/75 3620/222/75 3596/222/75
-f 3596/222/75 3599/221/75 3633/221/75
-f 3620/222/86 3619/203/86 3597/203/86
-f 3597/203/86 3596/222/86 3620/222/86
-f 3619/203/87 3632/206/87 3626/206/87
-f 3626/206/87 3597/203/87 3619/203/87
-f 3632/206/73 3634/223/73 3627/223/73
-f 3627/223/73 3626/206/73 3632/206/73
-f 3634/224/88 3635/225/88 3598/226/88
-f 3598/226/88 3627/224/88 3634/224/88
-f 3635/225/89 3633/224/89 3599/224/89
-f 3599/224/89 3598/226/89 3635/225/89
-f 3629/214/79 3636/227/79 3634/228/79
-f 3634/228/79 3632/213/79 3629/214/79
-f 3636/229/75 3629/220/75 3628/219/75
-f 3628/219/75 3637/221/75 3636/229/75
-f 3607/206/73 3606/205/73 3638/230/73
-f 3638/230/73 3639/223/73 3607/206/73
-f 3638/227/77 3606/214/77 3620/213/77
-f 3620/213/77 3633/228/77 3638/227/77
-f 3602/201/73 3601/200/73 3640/199/73
-f 3640/199/73 3641/202/73 3602/201/73
-f 3638/231/90 3633/224/90 3618/232/90
-f 3618/232/90 3617/233/90 3638/231/90
-f 3633/224/89 3635/225/89 3625/234/89
-f 3625/234/89 3618/232/89 3633/224/89
-f 3635/225/88 3634/224/88 3623/232/88
-f 3623/232/88 3625/234/88 3635/225/88
-f 3634/224/92 3636/231/92 3621/233/92
-f 3621/233/92 3623/232/92 3634/224/92
-f 3610/200/75 3609/201/75 3642/202/75
-f 3642/202/75 3643/199/75 3610/200/75
-f 3614/208/76 3613/207/76 3624/235/76
-f 3624/235/76 3622/236/76 3614/208/76
-f 3613/207/83 3631/208/83 3616/236/83
-f 3616/236/83 3624/235/83 3613/207/83
-f 3639/236/27 3638/231/27 3601/237/27
-f 3601/237/27 3600/238/27 3639/236/27
-f 3638/231/27 3617/233/27 3640/239/27
-f 3640/239/27 3601/237/27 3638/231/27
-f 3617/210/94 3616/209/94 3641/240/94
-f 3641/240/94 3640/241/94 3617/210/94
-f 3616/236/26 3631/208/26 3602/242/26
-f 3602/242/26 3641/238/26 3616/236/26
-f 3631/208/26 3630/209/26 3603/240/26
-f 3603/240/26 3602/242/26 3631/208/26
-f 3615/209/26 3614/208/26 3609/242/26
-f 3609/242/26 3608/240/26 3615/209/26
-f 3614/208/26 3622/236/26 3642/238/26
-f 3642/238/26 3609/242/26 3614/208/26
-f 3622/209/95 3621/210/95 3643/241/95
-f 3643/241/95 3642/240/95 3622/209/95
-f 3621/233/27 3636/231/27 3610/237/27
-f 3610/237/27 3643/239/27 3621/233/27
-f 3636/231/27 3637/236/27 3611/238/27
-f 3611/238/27 3610/237/27 3636/231/27
-f 3644/195/124 3645/196/96 3646/197/96
-f 3646/197/96 3647/198/124 3644/195/124
-f 3648/199/125 3649/200/125 3650/201/125
-f 3650/201/125 3651/202/125 3648/199/125
-f 3652/203/99 3653/204/99 3654/205/99
-f 3654/205/99 3655/206/99 3652/203/99
-f 3656/202/165 3657/201/165 3658/200/165
-f 3658/200/165 3659/199/165 3656/202/165
-f 3660/207/102 3661/207/102 3662/208/102
-f 3662/208/102 3663/209/102 3660/207/102
-f 3664/209/103 3665/210/103 3666/211/103
-f 3653/212/104 3667/196/104 3668/213/104
-f 3668/213/104 3654/214/104 3653/212/104
-f 3669/210/105 3670/209/105 3671/211/105
-f 3672/215/106 3673/216/106 3671/211/106
-f 3671/211/106 3670/209/106 3672/215/106
-f 3674/217/107 3675/218/107 3646/197/107
-f 3646/197/107 3645/196/107 3674/217/107
-f 3676/219/126 3677/220/108 3653/204/108
-f 3653/204/108 3652/203/108 3676/219/126
-f 3678/209/109 3679/208/109 3661/207/109
-f 3661/207/109 3660/207/109 3678/209/109
-f 3653/212/110 3677/214/110 3680/213/110
-f 3680/213/110 3667/196/110 3653/212/110
-f 3672/215/111 3664/209/111 3666/211/111
-f 3666/211/111 3673/216/111 3672/215/111
-f 3681/221/165 3668/222/165 3644/222/165
-f 3644/222/165 3647/221/165 3681/221/165
-f 3668/222/112 3667/203/112 3645/203/112
-f 3645/203/112 3644/222/112 3668/222/112
-f 3667/203/113 3680/206/113 3674/206/113
-f 3674/206/113 3645/203/113 3667/203/113
-f 3680/206/125 3682/223/125 3675/223/125
-f 3675/223/125 3674/206/125 3680/206/125
-f 3682/224/114 3683/225/114 3646/226/114
-f 3646/226/114 3675/224/114 3682/224/114
-f 3683/225/115 3681/224/115 3647/224/115
-f 3647/224/115 3646/226/115 3683/225/115
-f 3677/214/105 3684/227/105 3682/228/105
-f 3682/228/105 3680/213/105 3677/214/105
-f 3684/229/165 3677/220/165 3676/219/165
-f 3676/219/165 3685/221/165 3684/229/165
-f 3655/206/125 3654/205/125 3686/230/125
-f 3686/230/125 3687/223/125 3655/206/125
-f 3686/227/103 3654/214/103 3668/213/103
-f 3668/213/103 3681/228/103 3686/227/103
-f 3650/201/125 3649/200/125 3688/199/125
-f 3688/199/125 3689/202/125 3650/201/125
-f 3686/231/483 3681/224/483 3666/232/483
-f 3666/232/483 3665/233/483 3686/231/483
-f 3681/224/115 3683/225/115 3673/234/115
-f 3673/234/115 3666/232/115 3681/224/115
-f 3683/225/114 3682/224/114 3671/232/114
-f 3671/232/114 3673/234/114 3683/225/114
-f 3682/224/117 3684/231/117 3669/233/117
-f 3669/233/117 3671/232/117 3682/224/117
-f 3658/200/165 3657/201/165 3690/202/165
-f 3690/202/165 3691/199/165 3658/200/165
-f 3662/208/102 3661/207/102 3672/235/102
-f 3672/235/102 3670/236/102 3662/208/102
-f 3661/207/109 3679/208/109 3664/236/109
-f 3664/236/109 3672/235/109 3661/207/109
-f 3687/236/27 3686/231/27 3649/237/27
-f 3649/237/27 3648/238/27 3687/236/27
-f 3686/231/27 3665/233/27 3688/239/27
-f 3688/239/27 3649/237/27 3686/231/27
-f 3665/210/118 3664/209/118 3689/240/118
-f 3689/240/118 3688/241/118 3665/210/118
-f 3664/236/26 3679/208/26 3650/242/26
-f 3650/242/26 3689/238/26 3664/236/26
-f 3679/208/26 3678/209/26 3651/240/26
-f 3651/240/26 3650/242/26 3679/208/26
-f 3663/209/26 3662/208/26 3657/242/26
-f 3657/242/26 3656/240/26 3663/209/26
-f 3662/208/26 3670/236/26 3690/238/26
-f 3690/238/26 3657/242/26 3662/208/26
-f 3670/209/119 3669/210/119 3691/241/119
-f 3691/241/119 3690/240/119 3670/209/119
-f 3669/233/27 3684/231/27 3658/237/27
-f 3658/237/27 3691/239/27 3669/233/27
-f 3684/231/27 3685/236/27 3659/238/27
-f 3659/238/27 3658/237/27 3684/231/27
-f 3692/243/150 3693/244/150 3694/245/150
-f 3694/245/150 3695/246/150 3692/243/150
-f 3692/247/151 3695/248/151 3696/249/151
-f 3696/249/151 3697/250/151 3692/247/151
-f 3695/246/152 3694/245/152 3698/251/152
-f 3698/251/152 3696/252/152 3695/246/152
-f 3694/248/153 3693/247/153 3699/250/153
-f 3699/250/153 3698/249/153 3694/248/153
-f 3700/195/96 3701/196/124 3702/197/124
-f 3702/197/124 3703/198/96 3700/195/96
-f 3704/199/125 3705/200/125 3706/201/125
-f 3706/201/125 3707/202/125 3704/199/125
-f 3708/203/99 3709/204/99 3710/205/99
-f 3710/205/99 3711/206/99 3708/203/99
-f 3712/202/165 3713/201/165 3714/200/165
-f 3714/200/165 3715/199/165 3712/202/165
-f 3716/207/102 3717/207/102 3718/208/102
-f 3718/208/102 3719/209/102 3716/207/102
-f 3720/209/103 3721/210/103 3722/211/103
-f 3709/212/104 3723/196/104 3724/213/104
-f 3724/213/104 3710/214/104 3709/212/104
-f 3725/210/105 3726/209/105 3727/211/105
-f 3728/215/106 3729/216/106 3727/211/106
-f 3727/211/106 3726/209/106 3728/215/106
-f 3730/217/107 3731/218/107 3702/197/107
-f 3702/197/107 3701/196/107 3730/217/107
-f 3732/219/108 3733/220/108 3709/204/126
-f 3709/204/126 3708/203/108 3732/219/108
-f 3734/209/109 3735/208/109 3717/207/109
-f 3717/207/109 3716/207/109 3734/209/109
-f 3709/212/110 3733/214/110 3736/213/110
-f 3736/213/110 3723/196/110 3709/212/110
-f 3728/215/111 3720/209/111 3722/211/111
-f 3722/211/111 3729/216/111 3728/215/111
-f 3737/221/165 3724/222/165 3700/222/165
-f 3700/222/165 3703/221/165 3737/221/165
-f 3724/222/112 3723/203/112 3701/203/112
-f 3701/203/112 3700/222/112 3724/222/112
-f 3723/203/113 3736/206/113 3730/206/113
-f 3730/206/113 3701/203/113 3723/203/113
-f 3736/206/125 3738/223/125 3731/223/125
-f 3731/223/125 3730/206/125 3736/206/125
-f 3738/224/114 3739/225/114 3702/226/114
-f 3702/226/114 3731/224/114 3738/224/114
-f 3739/225/115 3737/224/115 3703/224/115
-f 3703/224/115 3702/226/115 3739/225/115
-f 3733/214/105 3740/227/105 3738/228/105
-f 3738/228/105 3736/213/105 3733/214/105
-f 3740/229/165 3733/220/165 3732/219/165
-f 3732/219/165 3741/221/165 3740/229/165
-f 3711/206/125 3710/205/125 3742/230/125
-f 3742/230/125 3743/223/125 3711/206/125
-f 3742/227/103 3710/214/103 3724/213/103
-f 3724/213/103 3737/228/103 3742/227/103
-f 3706/201/125 3705/200/125 3744/199/125
-f 3744/199/125 3745/202/125 3706/201/125
-f 3742/231/483 3737/224/483 3722/232/483
-f 3722/232/483 3721/233/483 3742/231/483
-f 3737/224/115 3739/225/115 3729/234/115
-f 3729/234/115 3722/232/115 3737/224/115
-f 3739/225/114 3738/224/114 3727/232/114
-f 3727/232/114 3729/234/114 3739/225/114
-f 3738/224/117 3740/231/117 3725/233/117
-f 3725/233/117 3727/232/117 3738/224/117
-f 3714/200/165 3713/201/165 3746/202/165
-f 3746/202/165 3747/199/165 3714/200/165
-f 3718/208/102 3717/207/102 3728/235/102
-f 3728/235/102 3726/236/102 3718/208/102
-f 3717/207/109 3735/208/109 3720/236/109
-f 3720/236/109 3728/235/109 3717/207/109
-f 3743/236/27 3742/231/27 3705/237/27
-f 3705/237/27 3704/238/27 3743/236/27
-f 3742/231/27 3721/233/27 3744/239/27
-f 3744/239/27 3705/237/27 3742/231/27
-f 3721/210/118 3720/209/118 3745/240/118
-f 3745/240/118 3744/241/118 3721/210/118
-f 3720/236/26 3735/208/26 3706/242/26
-f 3706/242/26 3745/238/26 3720/236/26
-f 3735/208/26 3734/209/26 3707/240/26
-f 3707/240/26 3706/242/26 3735/208/26
-f 3719/209/26 3718/208/26 3713/242/26
-f 3713/242/26 3712/240/26 3719/209/26
-f 3718/208/26 3726/236/26 3746/238/26
-f 3746/238/26 3713/242/26 3718/208/26
-f 3726/209/119 3725/210/119 3747/241/119
-f 3747/241/119 3746/240/119 3726/209/119
-f 3725/233/27 3740/231/27 3714/237/27
-f 3714/237/27 3747/239/27 3725/233/27
-f 3740/231/27 3741/236/27 3715/238/27
-f 3715/238/27 3714/237/27 3740/231/27
-f 3748/243/120 3749/244/120 3750/245/120
-f 3750/245/120 3751/246/120 3748/243/120
-f 3748/247/121 3751/248/121 3752/249/121
-f 3752/249/121 3753/250/121 3748/247/121
-f 3751/246/122 3750/245/122 3754/251/122
-f 3754/251/122 3752/252/122 3751/246/122
-f 3750/248/123 3749/247/123 3755/250/123
-f 3755/250/123 3754/249/123 3750/248/123
-f 3756/195/131 3757/196/131 3758/197/131
-f 3758/197/131 3759/198/131 3756/195/131
-f 3760/199/75 3761/200/75 3762/201/75
-f 3762/201/75 3763/202/75 3760/199/75
-f 3764/203/132 3765/204/132 3766/205/132
-f 3766/205/132 3767/206/132 3764/203/132
-f 3768/202/73 3769/201/73 3770/200/73
-f 3770/200/73 3771/199/73 3768/202/73
-f 3772/207/83 3773/207/83 3774/208/83
-f 3774/208/83 3775/209/83 3772/207/83
-f 3776/209/133 3777/210/133 3778/211/133
-f 3765/212/134 3779/196/134 3780/213/134
-f 3780/213/134 3766/214/134 3765/212/134
-f 3781/210/135 3782/209/135 3783/211/135
-f 3784/215/136 3785/216/136 3783/211/136
-f 3783/211/136 3782/209/136 3784/215/136
-f 3786/217/137 3787/218/137 3758/197/137
-f 3758/197/137 3757/196/137 3786/217/137
-f 3788/219/139 3789/220/139 3765/204/139
-f 3765/204/139 3764/203/139 3788/219/139
-f 3790/209/76 3791/208/76 3773/207/76
-f 3773/207/76 3772/207/76 3790/209/76
-f 3765/212/140 3789/214/140 3792/213/140
-f 3792/213/140 3779/196/140 3765/212/140
-f 3784/215/141 3776/209/141 3778/211/141
-f 3778/211/141 3785/216/141 3784/215/141
-f 3793/221/73 3780/222/73 3756/222/73
-f 3756/222/73 3759/221/73 3793/221/73
-f 3780/222/87 3779/203/87 3757/203/87
-f 3757/203/87 3756/222/87 3780/222/87
-f 3779/203/86 3792/206/86 3786/206/86
-f 3786/206/86 3757/203/86 3779/203/86
-f 3792/206/75 3794/223/75 3787/223/75
-f 3787/223/75 3786/206/75 3792/206/75
-f 3794/224/142 3795/225/142 3758/226/142
-f 3758/226/142 3787/224/142 3794/224/142
-f 3795/225/143 3793/224/143 3759/224/143
-f 3759/224/143 3758/226/143 3795/225/143
-f 3789/214/135 3796/227/135 3794/228/135
-f 3794/228/135 3792/213/135 3789/214/135
-f 3796/229/73 3789/220/73 3788/219/73
-f 3788/219/73 3797/221/73 3796/229/73
-f 3767/206/75 3766/205/75 3798/230/75
-f 3798/230/75 3799/223/75 3767/206/75
-f 3798/227/133 3766/214/133 3780/213/133
-f 3780/213/133 3793/228/133 3798/227/133
-f 3762/201/75 3761/200/75 3800/199/75
-f 3800/199/75 3801/202/75 3762/201/75
-f 3798/231/144 3793/224/144 3778/232/144
-f 3778/232/144 3777/233/144 3798/231/144
-f 3793/224/143 3795/225/143 3785/234/143
-f 3785/234/143 3778/232/143 3793/224/143
-f 3795/225/142 3794/224/142 3783/232/142
-f 3783/232/142 3785/234/142 3795/225/142
-f 3794/224/145 3796/231/145 3781/233/145
-f 3781/233/145 3783/232/145 3794/224/145
-f 3770/200/73 3769/201/73 3802/202/73
-f 3802/202/73 3803/199/73 3770/200/73
-f 3774/208/83 3773/207/83 3784/235/83
-f 3784/235/83 3782/236/83 3774/208/83
-f 3773/207/76 3791/208/76 3776/236/76
-f 3776/236/76 3784/235/76 3773/207/76
-f 3799/236/27 3798/231/27 3761/237/27
-f 3761/237/27 3760/238/27 3799/236/27
-f 3798/231/27 3777/233/27 3800/239/27
-f 3800/239/27 3761/237/27 3798/231/27
-f 3777/210/480 3776/209/480 3801/240/480
-f 3801/240/480 3800/241/480 3777/210/480
-f 3776/236/26 3791/208/26 3762/242/26
-f 3762/242/26 3801/238/26 3776/236/26
-f 3791/208/26 3790/209/26 3763/240/26
-f 3763/240/26 3762/242/26 3791/208/26
-f 3775/209/26 3774/208/26 3769/242/26
-f 3769/242/26 3768/240/26 3775/209/26
-f 3774/208/26 3782/236/26 3802/238/26
-f 3802/238/26 3769/242/26 3774/208/26
-f 3782/209/147 3781/210/147 3803/241/147
-f 3803/241/147 3802/240/147 3782/209/147
-f 3781/233/27 3796/231/27 3770/237/27
-f 3770/237/27 3803/239/27 3781/233/27
-f 3796/231/27 3797/236/27 3771/238/27
-f 3771/238/27 3770/237/27 3796/231/27
-f 3804/243/160 3805/244/160 3806/245/160
-f 3806/245/160 3807/246/160 3804/243/160
-f 3804/247/161 3807/248/161 3808/249/161
-f 3808/249/161 3809/250/161 3804/247/161
-f 3807/246/162 3806/245/162 3810/251/162
-f 3810/251/162 3808/252/162 3807/246/162
-f 3806/248/163 3805/247/163 3811/250/163
-f 3811/250/163 3810/249/163 3806/248/163
-f 3812/253/19 3813/254/19 3814/255/19
-f 3814/255/19 3815/256/19 3812/253/19
-f 3816/257/20 3812/253/20 3815/256/20
-f 3815/256/20 3817/258/20 3816/257/20
-f 3818/259/21 3816/257/21 3817/258/21
-f 3817/258/21 3819/260/21 3818/259/21
-f 3820/261/22 3818/262/191 3819/263/22
-f 3819/263/22 3821/264/22 3820/261/22
-f 3822/265/23 3820/261/23 3821/264/23
-f 3821/264/23 3823/266/23 3822/265/23
-f 3824/267/24 3822/265/24 3823/266/24
-f 3823/266/24 3825/268/24 3824/267/24
-f 3826/269/192 3824/267/13 3825/268/13
-f 3825/268/13 3827/270/192 3826/269/192
-f 3828/271/14 3826/269/14 3827/270/14
-f 3827/270/14 3829/272/14 3828/271/14
-f 3830/273/118 3828/271/15 3829/272/15
-f 3829/272/15 3831/274/15 3830/273/118
-f 3832/275/16 3830/273/16 3831/274/16
-f 3831/274/16 3833/276/16 3832/275/16
-f 3834/277/17 3832/275/17 3833/276/17
-f 3833/276/17 3835/278/17 3834/277/17
-f 3813/254/18 3834/277/194 3835/278/194
-f 3835/278/194 3814/255/18 3813/254/18
-f 3815/279/27 3814/280/27 3836/281/27
-f 3836/281/27 3837/282/27 3815/279/27
-f 3838/283/27 3839/279/27 3840/282/27
-f 3840/282/27 3841/284/27 3838/283/27
-f 3819/285/27 3817/283/27 3842/284/27
-f 3842/284/27 3843/285/27 3819/285/27
-f 3844/286/27 3845/285/27 3846/285/27
-f 3846/285/27 3847/287/27 3844/286/27
-f 3823/288/27 3821/286/27 3848/287/27
-f 3848/287/27 3849/289/27 3823/288/27
-f 3850/290/27 3851/288/27 3852/289/27
-f 3852/289/27 3853/291/27 3850/290/27
-f 3827/292/27 3825/290/27 3854/291/27
-f 3854/291/27 3855/293/27 3827/292/27
-f 3856/294/27 3857/292/27 3858/293/27
-f 3858/293/27 3859/295/27 3856/294/27
-f 3831/296/27 3829/294/27 3860/295/27
-f 3860/295/27 3861/297/27 3831/296/27
-f 3862/298/27 3863/296/27 3864/297/27
-f 3864/297/27 3865/299/27 3862/298/27
-f 3835/300/27 3833/298/27 3866/299/27
-f 3866/299/27 3867/300/27 3835/300/27
-f 3868/280/27 3869/300/27 3870/300/27
-f 3870/300/27 3871/281/27 3868/280/27
-f 3837/301/13 3836/302/13 3872/303/13
-f 3872/303/13 3873/304/13 3837/301/13
-f 3842/305/14 3837/301/14 3873/304/14
-f 3873/304/14 3874/306/14 3842/305/14
-f 3843/307/15 3842/305/118 3874/306/15
-f 3874/306/15 3875/308/15 3843/307/15
-f 3848/309/16 3843/307/16 3875/308/16
-f 3875/308/16 3876/310/16 3848/309/16
-f 3849/311/17 3848/309/17 3876/310/17
-f 3876/310/17 3877/312/17 3849/311/17
-f 3854/313/18 3849/311/18 3877/312/18
-f 3877/312/18 3878/314/18 3854/313/18
-f 3855/315/190 3854/313/19 3878/314/19
-f 3878/314/19 3879/316/190 3855/315/190
-f 3860/317/20 3855/315/20 3879/316/20
-f 3879/316/20 3880/318/20 3860/317/20
-f 3861/319/21 3860/317/21 3880/318/21
-f 3880/318/21 3881/320/21 3861/319/21
-f 3866/321/191 3861/322/22 3881/323/22
-f 3881/323/22 3882/324/22 3866/321/191
-f 3867/325/23 3866/321/23 3882/324/23
-f 3882/324/23 3883/326/23 3867/325/23
-f 3836/302/24 3867/325/25 3883/326/25
-f 3883/326/25 3872/303/24 3836/302/24
-f 3873/327/27 3872/328/27 3884/329/27
-f 3874/330/27 3873/327/27 3884/329/27
-f 3875/331/27 3874/330/27 3884/329/27
-f 3876/332/27 3875/331/27 3884/329/27
-f 3877/333/27 3876/332/27 3884/329/27
-f 3878/334/27 3877/333/27 3884/329/27
-f 3879/335/27 3878/334/27 3884/329/27
-f 3880/336/27 3879/335/27 3884/329/27
-f 3881/337/27 3880/336/27 3884/329/27
-f 3882/338/27 3881/337/27 3884/329/27
-f 3883/339/27 3882/338/27 3884/329/27
-f 3872/328/27 3883/339/27 3884/329/27
-f 3817/258/20 3815/256/20 3839/340/20
-f 3839/340/20 3838/341/20 3817/258/20
-f 3815/279/163 3837/282/163 3840/282/163
-f 3840/282/163 3839/279/163 3815/279/163
-f 3837/301/14 3842/305/14 3841/342/14
-f 3841/342/14 3840/343/14 3837/301/14
-f 3842/284/197 3817/283/197 3838/283/197
-f 3838/283/197 3841/284/197 3842/284/197
-f 3821/264/22 3819/263/22 3845/344/22
-f 3845/344/22 3844/345/22 3821/264/22
-f 3819/285/7 3843/285/7 3846/285/7
-f 3846/285/7 3845/285/7 3819/285/7
-f 3843/307/16 3848/309/16 3847/346/16
-f 3847/346/16 3846/347/16 3843/307/16
-f 3848/287/198 3821/286/198 3844/286/198
-f 3844/286/198 3847/287/198 3848/287/198
-f 3825/268/24 3823/266/24 3851/348/24
-f 3851/348/24 3850/349/24 3825/268/24
-f 3823/288/151 3849/289/151 3852/289/151
-f 3852/289/151 3851/288/151 3823/288/151
-f 3849/311/18 3854/313/18 3853/350/18
-f 3853/350/18 3852/351/18 3849/311/18
-f 3854/291/4 3825/290/4 3850/290/4
-f 3850/290/4 3853/291/4 3854/291/4
-f 3829/272/14 3827/270/14 3857/352/14
-f 3857/352/14 3856/353/14 3829/272/14
-f 3827/292/161 3855/293/161 3858/293/161
-f 3858/293/161 3857/292/161 3827/292/161
-f 3855/315/20 3860/317/20 3859/354/20
-f 3859/354/20 3858/355/20 3855/315/20
-f 3860/295/195 3829/294/195 3856/294/195
-f 3856/294/195 3859/295/195 3860/295/195
-f 3833/276/16 3831/274/16 3863/356/193
-f 3863/356/193 3862/357/16 3833/276/16
-f 3831/296/1 3861/297/1 3864/297/1
-f 3864/297/1 3863/296/1 3831/296/1
-f 3861/322/22 3866/321/191 3865/358/22
-f 3865/358/22 3864/359/22 3861/322/22
-f 3866/299/196 3833/298/196 3862/298/196
-f 3862/298/196 3865/299/196 3866/299/196
-f 3814/255/18 3835/278/194 3869/360/18
-f 3869/360/18 3868/361/18 3814/255/18
-f 3835/300/153 3867/300/153 3870/300/153
-f 3870/300/153 3869/300/153 3835/300/153
-f 3867/325/25 3836/302/24 3871/362/24
-f 3871/362/24 3870/363/25 3867/325/25
-f 3836/281/10 3814/280/10 3868/280/10
-f 3868/280/10 3871/281/10 3836/281/10
-f 3885/3/6 3886/2/6 3887/1/7
-f 3887/1/7 3888/4/7 3885/3/6
-f 3889/6/5 3890/5/5 3886/2/6
-f 3886/2/6 3885/3/6 3889/6/5
-f 3891/8/4 3892/7/4 3890/5/5
-f 3890/5/5 3889/6/5 3891/8/4
-f 3893/11/3 3894/10/3 3892/9/4
-f 3892/9/4 3891/12/4 3893/11/3
-f 3895/14/2 3896/13/2 3894/10/3
-f 3894/10/3 3893/11/3 3895/14/2
-f 3897/16/1 3898/15/1 3896/13/2
-f 3896/13/2 3895/14/2 3897/16/1
-f 3899/18/12 3900/17/12 3898/15/1
-f 3898/15/1 3897/16/1 3899/18/12
-f 3901/20/11 3902/19/11 3900/17/12
-f 3900/17/12 3899/18/12 3901/20/11
-f 3903/22/10 3904/21/10 3902/19/11
-f 3902/19/11 3901/20/11 3903/22/10
-f 3905/24/9 3906/23/9 3904/21/10
-f 3904/21/10 3903/22/10 3905/24/9
-f 3907/26/8 3908/25/8 3906/23/9
-f 3906/23/9 3905/24/9 3907/26/8
-f 3888/4/7 3887/1/7 3908/25/8
-f 3908/25/8 3907/26/8 3888/4/7
-f 3909/27/18 3910/30/18 3911/29/18
-f 3911/29/18 3912/28/18 3909/27/18
-f 3913/31/17 3914/32/17 3910/30/17
-f 3910/30/17 3909/27/17 3913/31/17
-f 3915/33/16 3916/34/16 3914/32/16
-f 3914/32/16 3913/31/16 3915/33/16
-f 3917/35/15 3918/38/15 3916/37/15
-f 3916/37/15 3915/36/15 3917/35/15
-f 3919/39/14 3920/40/14 3918/38/14
-f 3918/38/14 3917/35/14 3919/39/14
-f 3921/41/13 3922/42/13 3920/40/13
-f 3920/40/13 3919/39/13 3921/41/13
-f 3923/43/24 3924/44/24 3922/42/24
-f 3922/42/24 3921/41/24 3923/43/24
-f 3925/45/23 3926/46/23 3924/44/23
-f 3924/44/23 3923/43/23 3925/45/23
-f 3927/47/22 3928/48/22 3926/46/22
-f 3926/46/22 3925/45/22 3927/47/22
-f 3929/49/21 3930/50/21 3928/48/21
-f 3928/48/21 3927/47/21 3929/49/21
-f 3931/51/20 3932/52/20 3930/50/20
-f 3930/50/20 3929/49/20 3931/51/20
-f 3912/28/19 3911/29/19 3932/52/19
-f 3932/52/19 3931/51/190 3912/28/19
-f 3886/53/26 3909/53/26 3912/54/26
-f 3912/54/26 3887/54/26 3886/53/26
-f 3887/54/26 3912/54/26 3931/55/26
-f 3931/55/26 3908/55/26 3887/54/26
-f 3908/55/26 3931/55/26 3929/56/26
-f 3929/56/26 3906/56/26 3908/55/26
-f 3906/56/26 3929/56/26 3927/57/26
-f 3927/57/26 3904/57/26 3906/56/26
-f 3904/57/26 3927/57/26 3925/59/26
-f 3925/59/26 3902/58/26 3904/57/26
-f 3902/58/26 3925/59/26 3923/61/26
-f 3923/61/26 3900/60/26 3902/58/26
-f 3900/60/26 3923/61/26 3921/62/26
-f 3921/62/26 3898/62/26 3900/60/26
-f 3898/62/26 3921/62/26 3919/64/26
-f 3919/64/26 3896/63/26 3898/62/26
-f 3896/63/26 3919/64/26 3917/66/26
-f 3917/66/26 3894/65/26 3896/63/26
-f 3894/65/26 3917/66/26 3915/67/26
-f 3915/67/26 3892/67/26 3894/65/26
-f 3892/67/26 3915/67/26 3913/68/26
-f 3913/68/26 3890/68/26 3892/67/26
-f 3890/68/26 3913/68/26 3909/53/26
-f 3909/53/26 3886/53/26 3890/68/26
-f 3933/54/27 3911/54/27 3910/53/27
-f 3910/53/27 3934/53/27 3933/54/27
-f 3934/53/27 3910/53/27 3914/68/27
-f 3914/68/27 3935/68/27 3934/53/27
-f 3935/68/27 3914/68/27 3916/67/27
-f 3916/67/27 3936/67/27 3935/68/27
-f 3936/67/27 3916/67/27 3918/66/27
-f 3918/66/27 3937/65/27 3936/67/27
-f 3937/65/27 3918/66/27 3920/64/27
-f 3920/64/27 3938/63/27 3937/65/27
-f 3938/63/27 3920/64/27 3922/62/27
-f 3922/62/27 3939/62/27 3938/63/27
-f 3939/62/27 3922/62/27 3924/61/27
-f 3924/61/27 3940/60/27 3939/62/27
-f 3940/60/27 3924/61/27 3926/59/27
-f 3926/59/27 3941/58/27 3940/60/27
-f 3941/58/27 3926/59/27 3928/57/27
-f 3928/57/27 3942/57/27 3941/58/27
-f 3942/57/27 3928/57/27 3930/56/27
-f 3930/56/27 3943/56/27 3942/57/27
-f 3943/56/27 3930/56/27 3932/55/27
-f 3932/55/27 3944/55/27 3943/56/27
-f 3944/55/27 3932/55/27 3911/54/27
-f 3911/54/27 3933/54/27 3944/55/27
-f 3945/71/6 3946/70/7 3933/69/7
-f 3933/69/7 3934/72/6 3945/71/6
-f 3947/73/17 3945/71/6 3934/72/6
-f 3934/72/6 3935/74/17 3947/73/17
-f 3948/75/16 3947/73/16 3935/74/16
-f 3935/74/16 3936/76/16 3948/75/16
-f 3949/77/3 3948/75/15 3936/76/15
-f 3936/76/15 3937/78/3 3949/77/3
-f 3950/79/2 3949/77/3 3937/78/3
-f 3937/78/3 3938/80/2 3950/79/2
-f 3951/83/1 3950/82/2 3938/81/2
-f 3938/81/2 3939/84/1 3951/83/1
-f 3952/85/12 3951/83/1 3939/84/1
-f 3939/84/1 3940/86/12 3952/85/12
-f 3953/87/11 3952/85/12 3940/86/12
-f 3940/86/12 3941/88/11 3953/87/11
-f 3954/89/10 3953/87/11 3941/88/11
-f 3941/88/11 3942/90/10 3954/89/10
-f 3955/91/9 3954/89/10 3942/90/10
-f 3942/90/10 3943/92/9 3955/91/9
-f 3956/93/8 3955/91/9 3943/92/9
-f 3943/92/9 3944/94/8 3956/93/8
-f 3946/70/7 3956/93/8 3944/94/8
-f 3944/94/8 3933/69/7 3946/70/7
-f 3957/95/26 3958/95/26 3959/96/26
-f 3959/96/26 3960/96/26 3957/95/26
-f 3961/97/26 3962/97/26 3958/95/26
-f 3958/95/26 3957/95/26 3961/97/26
-f 3963/67/26 3964/98/26 3962/97/26
-f 3962/97/26 3961/97/26 3963/67/26
-f 3965/99/26 3966/99/26 3964/98/26
-f 3964/98/26 3963/67/26 3965/99/26
-f 3967/100/26 3968/100/26 3966/99/26
-f 3966/99/26 3965/99/26 3967/100/26
-f 3969/101/26 3970/101/26 3968/100/26
-f 3968/100/26 3967/100/26 3969/101/26
-f 3971/61/26 3972/61/26 3970/101/26
-f 3970/101/26 3969/101/26 3971/61/26
-f 3973/59/26 3974/102/26 3972/61/26
-f 3972/61/26 3971/61/26 3973/59/26
-f 3975/103/26 3976/103/26 3974/102/26
-f 3974/102/26 3973/59/26 3975/103/26
-f 3977/104/26 3978/105/26 3976/103/26
-f 3976/103/26 3975/103/26 3977/104/26
-f 3979/106/26 3980/106/26 3978/105/26
-f 3978/105/26 3977/104/26 3979/106/26
-f 3960/96/26 3959/96/26 3980/106/26
-f 3980/106/26 3979/106/26 3960/96/26
-f 3958/107/33 3981/110/33 3982/109/33
-f 3982/109/33 3959/108/33 3958/107/33
-f 3962/111/32 3983/112/32 3981/110/32
-f 3981/110/32 3958/107/32 3962/111/32
-f 3964/113/31 3984/114/31 3983/112/31
-f 3983/112/31 3962/111/31 3964/113/31
-f 3966/115/30 3985/116/30 3984/114/30
-f 3984/114/30 3964/113/30 3966/115/30
-f 3968/117/29 3986/118/29 3985/116/29
-f 3985/116/29 3966/115/29 3968/117/29
-f 3970/119/28 3987/120/28 3986/118/28
-f 3986/118/28 3968/117/28 3970/119/28
-f 3972/121/39 3988/122/39 3987/120/39
-f 3987/120/39 3970/119/39 3972/121/39
-f 3974/123/38 3989/124/38 3988/122/38
-f 3988/122/38 3972/121/38 3974/123/38
-f 3976/125/37 3990/126/37 3989/124/37
-f 3989/124/37 3974/123/37 3976/125/37
-f 3978/127/36 3991/130/36 3990/129/36
-f 3990/129/36 3976/128/36 3978/127/36
-f 3980/131/35 3992/132/35 3991/130/35
-f 3991/130/35 3978/127/35 3980/131/35
-f 3959/108/34 3982/109/34 3992/132/34
-f 3992/132/34 3980/131/34 3959/108/34
-f 3981/110/46 3993/134/46 3994/133/46
-f 3994/133/46 3982/109/46 3981/110/46
-f 3983/112/45 3995/135/45 3993/134/45
-f 3993/134/45 3981/110/45 3983/112/45
-f 3984/114/44 3996/136/44 3995/135/44
-f 3995/135/44 3983/112/44 3984/114/44
-f 3985/116/42 3997/137/42 3996/136/43
-f 3996/136/43 3984/114/42 3985/116/42
-f 3986/118/41 3998/138/41 3997/137/41
-f 3997/137/41 3985/116/41 3986/118/41
-f 3987/120/40 3999/139/40 3998/138/40
-f 3998/138/40 3986/118/40 3987/120/40
-f 3988/122/55 4000/140/54 3999/139/54
-f 3999/139/54 3987/120/54 3988/122/55
-f 3989/124/53 4001/141/53 4000/140/53
-f 4000/140/53 3988/122/53 3989/124/53
-f 3990/126/51 4002/142/52 4001/141/51
-f 4001/141/51 3989/124/51 3990/126/51
-f 3991/130/50 4003/144/50 4002/143/50
-f 4002/143/50 3990/129/50 3991/130/50
-f 3992/132/49 4004/145/49 4003/144/49
-f 4003/144/49 3991/130/49 3992/132/49
-f 3982/109/48 3994/133/48 4004/145/48
-f 4004/145/48 3992/132/47 3982/109/48
-f 3945/148/63 4005/147/63 4006/146/63
-f 4006/146/63 3946/149/63 3945/148/63
-f 3947/151/62 4007/150/61 4005/147/61
-f 4005/147/61 3945/148/62 3947/151/62
-f 3948/154/60 4008/153/60 4007/152/60
-f 4007/152/60 3947/155/60 3948/154/60
-f 3949/156/59 4009/142/59 4008/153/59
-f 4008/153/59 3948/154/59 3949/156/59
-f 3950/158/58 4010/157/57 4009/142/57
-f 4009/142/57 3949/156/58 3950/158/58
-f 3951/160/56 4011/159/56 4010/157/56
-f 4010/157/56 3950/158/56 3951/160/56
-f 3952/162/71 4012/161/71 4011/159/71
-f 4011/159/71 3951/160/71 3952/162/71
-f 3953/164/69 4013/163/70 4012/161/70
-f 4012/161/70 3952/162/69 3953/164/69
-f 3954/166/68 4014/165/68 4013/163/68
-f 4013/163/68 3953/164/68 3954/166/68
-f 3955/168/67 4015/167/67 4014/165/67
-f 4014/165/67 3954/166/67 3955/168/67
-f 3956/170/66 4016/169/66 4015/167/66
-f 4015/167/66 3955/168/65 3956/170/66
-f 3946/149/64 4006/146/64 4016/169/64
-f 4016/169/64 3956/170/64 3946/149/64
-f 4005/173/6 3957/172/6 3960/171/7
-f 3960/171/7 4006/174/7 4005/173/6
-f 4007/176/5 3961/175/5 3957/172/6
-f 3957/172/6 4005/173/6 4007/176/5
-f 4008/179/4 3963/178/4 3961/177/5
-f 3961/177/5 4007/180/5 4008/179/4
-f 4009/181/3 3965/86/3 3963/178/4
-f 3963/178/4 4008/179/4 4009/181/3
-f 4010/183/2 3967/182/2 3965/86/3
-f 3965/86/3 4009/181/3 4010/183/2
-f 4011/185/1 3969/184/1 3967/182/2
-f 3967/182/2 4010/183/2 4011/185/1
-f 4012/187/12 3971/186/12 3969/184/1
-f 3969/184/1 4011/185/1 4012/187/12
-f 4013/189/11 3973/188/11 3971/186/12
-f 3971/186/12 4012/187/12 4013/189/11
-f 4014/191/10 3975/190/10 3973/188/11
-f 3973/188/11 4013/189/11 4014/191/10
-f 4015/192/9 3977/76/9 3975/190/10
-f 3975/190/10 4014/191/10 4015/192/9
-f 4016/194/8 3979/193/8 3977/76/9
-f 3977/76/9 4015/192/9 4016/194/8
-f 4006/174/7 3960/171/7 3979/193/8
-f 3979/193/8 4016/194/8 4006/174/7
-f 4017/195/443 4018/198/443 4019/197/443
-f 4019/197/443 4020/196/443 4017/195/443
-f 4021/199/390 4022/202/390 4023/201/390
-f 4023/201/390 4024/200/390 4021/199/390
-f 4025/203/444 4026/206/444 4027/205/444
-f 4027/205/444 4028/204/444 4025/203/444
-f 4029/202/388 4030/199/388 4031/200/388
-f 4031/200/388 4032/201/388 4029/202/388
-f 4033/207/398 4034/209/398 4035/208/398
-f 4035/208/398 4036/207/398 4033/207/398
-f 4037/209/445 4038/211/445 4039/210/445
-f 4028/212/446 4027/214/446 4040/213/446
-f 4040/213/446 4041/196/446 4028/212/446
-f 4042/210/447 4043/211/447 4044/209/447
-f 4045/215/448 4044/209/448 4043/211/448
-f 4043/211/448 4046/216/448 4045/215/448
-f 4047/217/449 4020/196/449 4019/197/449
-f 4019/197/449 4048/218/449 4047/217/449
-f 4049/219/451 4025/203/451 4028/204/451
-f 4028/204/451 4050/220/451 4049/219/451
-f 4051/209/391 4033/207/391 4036/207/391
-f 4036/207/391 4052/208/391 4051/209/391
-f 4028/212/452 4041/196/452 4053/213/452
-f 4053/213/452 4050/214/452 4028/212/452
-f 4045/215/453 4046/216/453 4038/211/453
-f 4038/211/453 4037/209/453 4045/215/453
-f 4054/221/388 4018/221/388 4017/222/388
-f 4017/222/388 4040/222/388 4054/221/388
-f 4040/222/402 4017/222/402 4020/203/402
-f 4020/203/402 4041/203/402 4040/222/402
-f 4041/203/401 4020/203/401 4047/206/401
-f 4047/206/401 4053/206/401 4041/203/401
-f 4053/206/390 4047/206/390 4048/223/390
-f 4048/223/390 4055/223/390 4053/206/390
-f 4055/224/454 4048/224/454 4019/226/454
-f 4019/226/454 4056/225/454 4055/224/454
-f 4056/225/455 4019/226/455 4018/224/455
-f 4018/224/455 4054/224/455 4056/225/455
-f 4050/214/447 4053/213/447 4055/228/447
-f 4055/228/447 4057/227/447 4050/214/447
-f 4057/229/388 4058/221/388 4049/219/388
-f 4049/219/388 4050/220/388 4057/229/388
-f 4026/206/390 4059/223/390 4060/230/390
-f 4060/230/390 4027/205/390 4026/206/390
-f 4060/227/445 4054/228/445 4040/213/445
-f 4040/213/445 4027/214/445 4060/227/445
-f 4023/201/390 4061/202/390 4062/199/390
-f 4062/199/390 4024/200/390 4023/201/390
-f 4060/231/456 4039/233/456 4038/232/456
-f 4038/232/456 4054/224/456 4060/231/456
-f 4054/224/455 4038/232/455 4046/234/455
-f 4046/234/455 4056/225/455 4054/224/455
-f 4056/225/454 4046/234/454 4043/232/454
-f 4043/232/454 4055/224/454 4056/225/454
-f 4055/224/457 4043/232/457 4042/233/457
-f 4042/233/457 4057/231/457 4055/224/457
-f 4031/200/388 4063/199/388 4064/202/388
-f 4064/202/388 4032/201/388 4031/200/388
-f 4035/208/398 4044/236/398 4045/235/398
-f 4045/235/398 4036/207/398 4035/208/398
-f 4036/207/391 4045/235/391 4037/236/391
-f 4037/236/391 4052/208/391 4036/207/391
-f 4059/236/27 4021/238/27 4024/237/27
-f 4024/237/27 4060/231/27 4059/236/27
-f 4060/231/27 4024/237/27 4062/239/27
-f 4062/239/27 4039/233/27 4060/231/27
-f 4039/210/484 4062/241/484 4061/240/484
-f 4061/240/484 4037/209/484 4039/210/484
-f 4037/236/26 4061/238/26 4023/242/26
-f 4023/242/26 4052/208/26 4037/236/26
-f 4052/208/26 4023/242/26 4022/240/26
-f 4022/240/26 4051/209/26 4052/208/26
-f 4034/209/26 4029/240/26 4032/242/26
-f 4032/242/26 4035/208/26 4034/209/26
-f 4035/208/26 4032/242/26 4064/238/26
-f 4064/238/26 4044/236/26 4035/208/26
-f 4044/209/459 4064/240/459 4063/241/459
-f 4063/241/459 4042/210/459 4044/209/459
-f 4042/233/27 4063/239/27 4031/237/27
-f 4031/237/27 4057/231/27 4042/233/27
-f 4057/231/27 4031/237/27 4030/238/27
-f 4030/238/27 4058/236/27 4057/231/27
-f 4065/195/4 4066/198/4 4067/197/4
-f 4067/197/4 4068/196/4 4065/195/4
-f 4069/199/416 4070/202/416 4071/201/415
-f 4071/201/415 4072/200/415 4069/199/416
-f 4073/203/421 4074/206/421 4075/205/421
-f 4075/205/421 4076/204/421 4073/203/421
-f 4077/202/413 4078/199/413 4079/200/412
-f 4079/200/412 4080/201/412 4077/202/413
-f 4081/207/466 4082/209/466 4083/208/466
-f 4083/208/466 4084/207/466 4081/207/466
-f 4085/209/107 4086/211/107 4087/210/107
-f 4076/212/467 4075/214/467 4088/213/467
-f 4088/213/467 4089/196/467 4076/212/467
-f 4090/210/468 4091/211/468 4092/209/468
-f 4093/215/469 4092/209/469 4091/211/469
-f 4091/211/469 4094/216/469 4093/215/469
-f 4095/217/103 4068/196/103 4067/197/103
-f 4067/197/103 4096/218/103 4095/217/103
-f 4097/219/414 4073/203/414 4076/204/414
-f 4076/204/414 4098/220/414 4097/219/414
-f 4099/209/471 4081/207/471 4084/207/471
-f 4084/207/471 4100/208/471 4099/209/471
-f 4076/212/472 4089/196/472 4101/213/472
-f 4101/213/472 4098/214/472 4076/212/472
-f 4093/215/332 4094/216/332 4086/211/332
-f 4086/211/332 4085/209/332 4093/215/332
-f 4102/221/413 4066/221/412 4065/222/412
-f 4065/222/412 4088/222/413 4102/221/413
-f 4088/222/426 4065/222/426 4068/203/426
-f 4068/203/426 4089/203/426 4088/222/426
-f 4089/203/425 4068/203/425 4095/206/425
-f 4095/206/425 4101/206/425 4089/203/425
-f 4101/206/415 4095/206/415 4096/223/415
-f 4096/223/415 4103/223/415 4101/206/415
-f 4103/224/473 4096/224/473 4067/226/473
-f 4067/226/473 4104/225/473 4103/224/473
-f 4104/225/430 4067/226/430 4066/224/430
-f 4066/224/430 4102/224/430 4104/225/430
-f 4098/214/468 4101/213/468 4103/228/468
-f 4103/228/468 4105/227/468 4098/214/468
-f 4105/229/413 4106/221/413 4097/219/413
-f 4097/219/413 4098/220/413 4105/229/413
-f 4074/206/415 4107/223/415 4108/230/415
-f 4108/230/415 4075/205/415 4074/206/415
-f 4108/227/107 4102/228/107 4088/213/107
-f 4088/213/107 4075/214/107 4108/227/107
-f 4071/201/415 4109/202/416 4110/199/416
-f 4110/199/416 4072/200/415 4071/201/415
-f 4108/231/485 4087/233/485 4086/232/485
-f 4086/232/485 4102/224/485 4108/231/485
-f 4102/224/430 4086/232/430 4094/234/430
-f 4094/234/430 4104/225/430 4102/224/430
-f 4104/225/473 4094/234/473 4091/232/473
-f 4091/232/473 4103/224/473 4104/225/473
-f 4103/224/428 4091/232/428 4090/233/428
-f 4090/233/428 4105/231/428 4103/224/428
-f 4079/200/412 4111/199/413 4112/202/413
-f 4112/202/413 4080/201/412 4079/200/412
-f 4083/208/466 4092/236/466 4093/235/466
-f 4093/235/466 4084/207/466 4083/208/466
-f 4084/207/471 4093/235/471 4085/236/471
-f 4085/236/471 4100/208/471 4084/207/471
-f 4107/236/27 4069/238/27 4072/237/27
-f 4072/237/27 4108/231/27 4107/236/27
-f 4108/231/27 4072/237/27 4110/239/27
-f 4110/239/27 4087/233/27 4108/231/27
-f 4087/210/193 4110/241/193 4109/240/193
-f 4109/240/193 4085/209/193 4087/210/193
-f 4085/236/26 4109/238/26 4071/242/26
-f 4071/242/26 4100/208/26 4085/236/26
-f 4100/208/26 4071/242/26 4070/240/26
-f 4070/240/26 4099/209/26 4100/208/26
-f 4082/209/26 4077/240/26 4080/242/26
-f 4080/242/26 4083/208/26 4082/209/26
-f 4083/208/26 4080/242/26 4112/238/26
-f 4112/238/26 4092/236/26 4083/208/26
-f 4092/209/475 4112/240/475 4111/241/475
-f 4111/241/475 4090/210/475 4092/209/475
-f 4090/233/27 4111/239/27 4079/237/27
-f 4079/237/27 4105/231/27 4090/233/27
-f 4105/231/27 4079/237/27 4078/238/27
-f 4078/238/27 4106/236/27 4105/231/27
-f 4113/243/476 4114/246/476 4115/245/476
-f 4115/245/476 4116/244/476 4113/243/476
-f 4113/247/477 4117/250/477 4118/249/477
-f 4118/249/477 4114/248/477 4113/247/477
-f 4114/246/478 4118/252/478 4119/251/478
-f 4119/251/478 4115/245/478 4114/246/478
-f 4115/248/479 4119/249/479 4120/250/479
-f 4120/250/479 4116/247/479 4115/248/479
-f 4121/195/464 4122/198/464 4123/197/464
-f 4123/197/464 4124/196/464 4121/195/464
-f 4125/199/416 4126/202/416 4127/201/415
-f 4127/201/415 4128/200/415 4125/199/416
-f 4129/203/421 4130/206/421 4131/205/421
-f 4131/205/421 4132/204/421 4129/203/421
-f 4133/202/413 4134/199/413 4135/200/412
-f 4135/200/412 4136/201/412 4133/202/413
-f 4137/207/466 4138/209/466 4139/208/466
-f 4139/208/466 4140/207/466 4137/207/466
-f 4141/209/107 4142/211/107 4143/210/107
-f 4132/212/467 4131/214/467 4144/213/467
-f 4144/213/467 4145/196/467 4132/212/467
-f 4146/210/468 4147/211/468 4148/209/468
-f 4149/215/469 4148/209/469 4147/211/469
-f 4147/211/469 4150/216/469 4149/215/469
-f 4151/217/103 4124/196/103 4123/197/103
-f 4123/197/103 4152/218/103 4151/217/103
-f 4153/219/470 4129/203/414 4132/204/414
-f 4132/204/414 4154/220/470 4153/219/470
-f 4155/209/471 4137/207/471 4140/207/471
-f 4140/207/471 4156/208/471 4155/209/471
-f 4132/212/472 4145/196/472 4157/213/472
-f 4157/213/472 4154/214/472 4132/212/472
-f 4149/215/332 4150/216/332 4142/211/332
-f 4142/211/332 4141/209/332 4149/215/332
-f 4158/221/413 4122/221/413 4121/222/413
-f 4121/222/413 4144/222/413 4158/221/413
-f 4144/222/426 4121/222/426 4124/203/426
-f 4124/203/426 4145/203/426 4144/222/426
-f 4145/203/425 4124/203/425 4151/206/425
-f 4151/206/425 4157/206/425 4145/203/425
-f 4157/206/415 4151/206/415 4152/223/415
-f 4152/223/415 4159/223/415 4157/206/415
-f 4159/224/473 4152/224/473 4123/226/473
-f 4123/226/473 4160/225/473 4159/224/473
-f 4160/225/430 4123/226/430 4122/224/430
-f 4122/224/430 4158/224/430 4160/225/430
-f 4154/214/468 4157/213/468 4159/228/468
-f 4159/228/468 4161/227/468 4154/214/468
-f 4161/229/437 4162/221/412 4153/219/412
-f 4153/219/412 4154/220/437 4161/229/437
-f 4130/206/415 4163/223/415 4164/230/416
-f 4164/230/416 4131/205/416 4130/206/415
-f 4164/227/107 4158/228/107 4144/213/107
-f 4144/213/107 4131/214/107 4164/227/107
-f 4127/201/415 4165/202/416 4166/199/416
-f 4166/199/416 4128/200/415 4127/201/415
-f 4164/231/485 4143/233/485 4142/232/485
-f 4142/232/485 4158/224/485 4164/231/485
-f 4158/224/430 4142/232/430 4150/234/430
-f 4150/234/430 4160/225/430 4158/224/430
-f 4160/225/473 4150/234/473 4147/232/473
-f 4147/232/473 4159/224/473 4160/225/473
-f 4159/224/428 4147/232/428 4146/233/428
-f 4146/233/428 4161/231/428 4159/224/428
-f 4135/200/412 4167/199/413 4168/202/413
-f 4168/202/413 4136/201/412 4135/200/412
-f 4139/208/466 4148/236/466 4149/235/466
-f 4149/235/466 4140/207/466 4139/208/466
-f 4140/207/471 4149/235/471 4141/236/471
-f 4141/236/471 4156/208/471 4140/207/471
-f 4163/236/27 4125/238/27 4128/237/27
-f 4128/237/27 4164/231/27 4163/236/27
-f 4164/231/27 4128/237/27 4166/239/27
-f 4166/239/27 4143/233/27 4164/231/27
-f 4143/210/193 4166/241/193 4165/240/193
-f 4165/240/193 4141/209/193 4143/210/193
-f 4141/236/26 4165/238/26 4127/242/26
-f 4127/242/26 4156/208/26 4141/236/26
-f 4156/208/26 4127/242/26 4126/240/26
-f 4126/240/26 4155/209/26 4156/208/26
-f 4138/209/26 4133/240/26 4136/242/26
-f 4136/242/26 4139/208/26 4138/209/26
-f 4139/208/26 4136/242/26 4168/238/26
-f 4168/238/26 4148/236/26 4139/208/26
-f 4148/209/475 4168/240/475 4167/241/475
-f 4167/241/475 4146/210/475 4148/209/475
-f 4146/233/27 4167/239/27 4135/237/27
-f 4135/237/27 4161/231/27 4146/233/27
-f 4161/231/27 4135/237/27 4134/238/27
-f 4134/238/27 4162/236/27 4161/231/27
-f 4169/243/460 4170/246/460 4171/245/460
-f 4171/245/460 4172/244/460 4169/243/460
-f 4169/247/461 4173/250/461 4174/249/461
-f 4174/249/461 4170/248/461 4169/247/461
-f 4170/246/462 4174/252/462 4175/251/462
-f 4175/251/462 4171/245/462 4170/246/462
-f 4171/248/463 4175/249/463 4176/250/463
-f 4176/250/463 4172/247/463 4171/248/463
-f 4177/195/387 4178/198/387 4179/197/387
-f 4179/197/387 4180/196/387 4177/195/387
-f 4181/199/388 4182/202/388 4183/201/388
-f 4183/201/388 4184/200/388 4181/199/388
-f 4185/203/389 4186/206/389 4187/205/389
-f 4187/205/389 4188/204/389 4185/203/389
-f 4189/202/390 4190/199/390 4191/200/390
-f 4191/200/390 4192/201/390 4189/202/390
-f 4193/207/391 4194/209/391 4195/208/391
-f 4195/208/391 4196/207/391 4193/207/391
-f 4197/209/392 4198/211/392 4199/210/392
-f 4188/212/393 4187/214/393 4200/213/393
-f 4200/213/393 4201/196/393 4188/212/393
-f 4202/210/394 4203/211/394 4204/209/394
-f 4205/215/395 4204/209/395 4203/211/395
-f 4203/211/395 4206/216/395 4205/215/395
-f 4207/217/396 4180/196/486 4179/197/486
-f 4179/197/486 4208/218/396 4207/217/396
-f 4209/219/397 4185/203/397 4188/204/397
-f 4188/204/397 4210/220/397 4209/219/397
-f 4211/209/398 4193/207/398 4196/207/398
-f 4196/207/398 4212/208/398 4211/209/398
-f 4188/212/399 4201/196/399 4213/213/399
-f 4213/213/399 4210/214/399 4188/212/399
-f 4205/215/400 4206/216/400 4198/211/400
-f 4198/211/400 4197/209/400 4205/215/400
-f 4214/221/390 4178/221/390 4177/222/390
-f 4177/222/390 4200/222/390 4214/221/390
-f 4200/222/401 4177/222/401 4180/203/401
-f 4180/203/401 4201/203/401 4200/222/401
-f 4201/203/402 4180/203/402 4207/206/402
-f 4207/206/402 4213/206/402 4201/203/402
-f 4213/206/388 4207/206/388 4208/223/388
-f 4208/223/388 4215/223/388 4213/206/388
-f 4215/224/403 4208/224/403 4179/226/403
-f 4179/226/403 4216/225/403 4215/224/403
-f 4216/225/404 4179/226/404 4178/224/404
-f 4178/224/404 4214/224/404 4216/225/404
-f 4210/214/394 4213/213/394 4215/228/394
-f 4215/228/394 4217/227/394 4210/214/394
-f 4217/229/390 4218/221/390 4209/219/390
-f 4209/219/390 4210/220/390 4217/229/390
-f 4186/206/388 4219/223/388 4220/230/388
-f 4220/230/388 4187/205/388 4186/206/388
-f 4220/227/392 4214/228/392 4200/213/392
-f 4200/213/392 4187/214/392 4220/227/392
-f 4183/201/388 4221/202/388 4222/199/388
-f 4222/199/388 4184/200/388 4183/201/388
-f 4220/231/405 4199/233/405 4198/232/405
-f 4198/232/405 4214/224/405 4220/231/405
-f 4214/224/404 4198/232/404 4206/234/404
-f 4206/234/404 4216/225/404 4214/224/404
-f 4216/225/403 4206/234/403 4203/232/403
-f 4203/232/403 4215/224/403 4216/225/403
-f 4215/224/407 4203/232/407 4202/233/407
-f 4202/233/407 4217/231/407 4215/224/407
-f 4191/200/390 4223/199/390 4224/202/390
-f 4224/202/390 4192/201/390 4191/200/390
-f 4195/208/391 4204/236/391 4205/235/391
-f 4205/235/391 4196/207/391 4195/208/391
-f 4196/207/398 4205/235/398 4197/236/398
-f 4197/236/398 4212/208/398 4196/207/398
-f 4219/236/27 4181/238/27 4184/237/27
-f 4184/237/27 4220/231/27 4219/236/27
-f 4220/231/27 4184/237/27 4222/239/27
-f 4222/239/27 4199/233/27 4220/231/27
-f 4199/210/409 4222/241/409 4221/240/409
-f 4221/240/409 4197/209/409 4199/210/409
-f 4197/236/26 4221/238/26 4183/242/26
-f 4183/242/26 4212/208/26 4197/236/26
-f 4212/208/26 4183/242/26 4182/240/26
-f 4182/240/26 4211/209/26 4212/208/26
-f 4194/209/26 4189/240/26 4192/242/26
-f 4192/242/26 4195/208/26 4194/209/26
-f 4195/208/26 4192/242/26 4224/238/26
-f 4224/238/26 4204/236/26 4195/208/26
-f 4204/209/410 4224/240/410 4223/241/410
-f 4223/241/410 4202/210/410 4204/209/410
-f 4202/233/27 4223/239/27 4191/237/27
-f 4191/237/27 4217/231/27 4202/233/27
-f 4217/231/27 4191/237/27 4190/238/27
-f 4190/238/27 4218/236/27 4217/231/27
-f 4225/243/148 4226/246/148 4227/245/148
-f 4227/245/148 4228/244/148 4225/243/148
-f 4225/247/7 4229/250/7 4230/249/7
-f 4230/249/7 4226/248/7 4225/247/7
-f 4226/246/149 4230/252/149 4231/251/149
-f 4231/251/149 4227/245/149 4226/246/149
-f 4227/248/1 4231/249/1 4232/250/1
-f 4232/250/1 4228/247/1 4227/248/1
-f 4233/243/187 4234/246/187 4235/245/187
-f 4235/245/187 4236/244/187 4233/243/187
-f 4233/247/161 4237/250/161 4238/249/161
-f 4238/249/161 4234/248/161 4233/247/161
-f 4234/246/188 4238/252/188 4239/251/188
-f 4239/251/188 4235/245/188 4234/246/188
-f 4235/248/163 4239/249/163 4240/250/163
-f 4240/250/163 4236/247/163 4235/248/163
-f 4241/243/154 4242/246/154 4243/245/154
-f 4243/245/154 4244/244/154 4241/243/154
-f 4241/247/1 4245/250/1 4246/249/1
-f 4246/249/1 4242/248/1 4241/247/1
-f 4242/246/155 4246/252/155 4247/251/155
-f 4247/251/155 4243/245/155 4242/246/155
-f 4243/248/7 4247/249/7 4248/250/7
-f 4248/250/7 4244/247/7 4243/248/7
-f 4249/243/439 4250/246/439 4251/245/439
-f 4251/245/439 4252/244/439 4249/243/439
-f 4249/247/440 4253/250/440 4254/249/440
-f 4254/249/440 4250/248/440 4249/247/440
-f 4250/246/441 4254/252/441 4255/251/441
-f 4255/251/441 4251/245/441 4250/246/441
-f 4251/248/442 4255/249/442 4256/250/442
-f 4256/250/442 4252/247/442 4251/248/442
-f 4257/243/180 4258/246/180 4259/245/180
-f 4259/245/180 4260/244/180 4257/243/180
-f 4257/247/151 4261/250/151 4262/249/151
-f 4262/249/151 4258/248/151 4257/247/151
-f 4258/246/181 4262/252/181 4263/251/181
-f 4263/251/181 4259/245/181 4258/246/181
-f 4259/248/153 4263/249/153 4264/250/153
-f 4264/250/153 4260/247/153 4259/248/153
-f 4265/195/387 4266/198/387 4267/197/387
-f 4267/197/387 4268/196/387 4265/195/387
-f 4269/199/388 4270/202/388 4271/201/388
-f 4271/201/388 4272/200/388 4269/199/388
-f 4273/203/389 4274/206/389 4275/205/389
-f 4275/205/389 4276/204/389 4273/203/389
-f 4277/202/390 4278/199/390 4279/200/390
-f 4279/200/390 4280/201/390 4277/202/390
-f 4281/207/391 4282/209/391 4283/208/391
-f 4283/208/391 4284/207/391 4281/207/391
-f 4285/209/392 4286/211/392 4287/210/392
-f 4276/212/393 4275/214/393 4288/213/393
-f 4288/213/393 4289/196/393 4276/212/393
-f 4290/210/394 4291/211/394 4292/209/394
-f 4293/215/395 4292/209/395 4291/211/395
-f 4291/211/395 4294/216/395 4293/215/395
-f 4295/217/396 4268/196/486 4267/197/486
-f 4267/197/486 4296/218/396 4295/217/396
-f 4297/219/397 4273/203/397 4276/204/397
-f 4276/204/397 4298/220/397 4297/219/397
-f 4299/209/398 4281/207/398 4284/207/398
-f 4284/207/398 4300/208/398 4299/209/398
-f 4276/212/399 4289/196/399 4301/213/399
-f 4301/213/399 4298/214/399 4276/212/399
-f 4293/215/400 4294/216/400 4286/211/400
-f 4286/211/400 4285/209/400 4293/215/400
-f 4302/221/390 4266/221/390 4265/222/390
-f 4265/222/390 4288/222/390 4302/221/390
-f 4288/222/401 4265/222/401 4268/203/401
-f 4268/203/401 4289/203/401 4288/222/401
-f 4289/203/402 4268/203/402 4295/206/402
-f 4295/206/402 4301/206/402 4289/203/402
-f 4301/206/388 4295/206/388 4296/223/388
-f 4296/223/388 4303/223/388 4301/206/388
-f 4303/224/403 4296/224/403 4267/226/403
-f 4267/226/403 4304/225/403 4303/224/403
-f 4304/225/404 4267/226/404 4266/224/404
-f 4266/224/404 4302/224/404 4304/225/404
-f 4298/214/394 4301/213/394 4303/228/394
-f 4303/228/394 4305/227/394 4298/214/394
-f 4305/229/390 4306/221/390 4297/219/390
-f 4297/219/390 4298/220/390 4305/229/390
-f 4274/206/388 4307/223/388 4308/230/388
-f 4308/230/388 4275/205/388 4274/206/388
-f 4308/227/392 4302/228/392 4288/213/392
-f 4288/213/392 4275/214/392 4308/227/392
-f 4271/201/388 4309/202/388 4310/199/388
-f 4310/199/388 4272/200/388 4271/201/388
-f 4308/231/405 4287/233/405 4286/232/405
-f 4286/232/405 4302/224/405 4308/231/405
-f 4302/224/404 4286/232/404 4294/234/404
-f 4294/234/404 4304/225/404 4302/224/404
-f 4304/225/403 4294/234/403 4291/232/403
-f 4291/232/403 4303/224/403 4304/225/403
-f 4303/224/407 4291/232/407 4290/233/407
-f 4290/233/407 4305/231/407 4303/224/407
-f 4279/200/390 4311/199/390 4312/202/390
-f 4312/202/390 4280/201/390 4279/200/390
-f 4283/208/391 4292/236/391 4293/235/391
-f 4293/235/391 4284/207/391 4283/208/391
-f 4284/207/398 4293/235/398 4285/236/398
-f 4285/236/398 4300/208/398 4284/207/398
-f 4307/236/27 4269/238/27 4272/237/27
-f 4272/237/27 4308/231/27 4307/236/27
-f 4308/231/27 4272/237/27 4310/239/27
-f 4310/239/27 4287/233/27 4308/231/27
-f 4287/210/409 4310/241/409 4309/240/409
-f 4309/240/409 4285/209/409 4287/210/409
-f 4285/236/26 4309/238/26 4271/242/26
-f 4271/242/26 4300/208/26 4285/236/26
-f 4300/208/26 4271/242/26 4270/240/26
-f 4270/240/26 4299/209/26 4300/208/26
-f 4282/209/26 4277/240/26 4280/242/26
-f 4280/242/26 4283/208/26 4282/209/26
-f 4283/208/26 4280/242/26 4312/238/26
-f 4312/238/26 4292/236/26 4283/208/26
-f 4292/209/410 4312/240/410 4311/241/410
-f 4311/241/410 4290/210/410 4292/209/410
-f 4290/233/27 4311/239/27 4279/237/27
-f 4279/237/27 4305/231/27 4290/233/27
-f 4305/231/27 4279/237/27 4278/238/27
-f 4278/238/27 4306/236/27 4305/231/27
-f 4313/195/436 4314/198/436 4315/197/411
-f 4315/197/411 4316/196/411 4313/195/436
-f 4317/199/437 4318/202/437 4319/201/437
-f 4319/201/437 4320/200/437 4317/199/437
-f 4321/203/414 4322/206/414 4323/205/414
-f 4323/205/414 4324/204/414 4321/203/414
-f 4325/202/465 4326/199/465 4327/200/465
-f 4327/200/465 4328/201/465 4325/202/465
-f 4329/207/417 4330/209/417 4331/208/417
-f 4331/208/417 4332/207/417 4329/207/417
-f 4333/209/171 4334/211/171 4335/210/171
-f 4324/212/418 4323/214/418 4336/213/418
-f 4336/213/418 4337/196/418 4324/212/418
-f 4338/210/419 4339/211/419 4340/209/419
-f 4341/215/420 4340/209/420 4339/211/420
-f 4339/211/420 4342/216/420 4341/215/420
-f 4343/217/167 4316/196/167 4315/197/167
-f 4315/197/167 4344/218/167 4343/217/167
-f 4345/219/438 4321/203/421 4324/204/421
-f 4324/204/421 4346/220/421 4345/219/438
-f 4347/209/422 4329/207/422 4332/207/422
-f 4332/207/422 4348/208/422 4347/209/422
-f 4324/212/423 4337/196/423 4349/213/423
-f 4349/213/423 4346/214/423 4324/212/423
-f 4341/215/424 4342/216/424 4334/211/424
-f 4334/211/424 4333/209/424 4341/215/424
-f 4350/221/465 4314/221/465 4313/222/465
-f 4313/222/465 4336/222/465 4350/221/465
-f 4336/222/425 4313/222/425 4316/203/425
-f 4316/203/425 4337/203/425 4336/222/425
-f 4337/203/426 4316/203/426 4343/206/426
-f 4343/206/426 4349/206/426 4337/203/426
-f 4349/206/437 4343/206/437 4344/223/437
-f 4344/223/437 4351/223/437 4349/206/437
-f 4351/224/427 4344/224/427 4315/226/427
-f 4315/226/427 4352/225/427 4351/224/427
-f 4352/225/428 4315/226/428 4314/224/428
-f 4314/224/428 4350/224/428 4352/225/428
-f 4346/214/419 4349/213/419 4351/228/419
-f 4351/228/419 4353/227/419 4346/214/419
-f 4353/229/465 4354/221/465 4345/219/465
-f 4345/219/465 4346/220/465 4353/229/465
-f 4322/206/437 4355/223/437 4356/230/437
-f 4356/230/437 4323/205/437 4322/206/437
-f 4356/227/171 4350/228/171 4336/213/171
-f 4336/213/171 4323/214/171 4356/227/171
-f 4319/201/437 4357/202/437 4358/199/437
-f 4358/199/437 4320/200/437 4319/201/437
-f 4356/231/487 4335/233/487 4334/232/487
-f 4334/232/487 4350/224/487 4356/231/487
-f 4350/224/428 4334/232/428 4342/234/428
-f 4342/234/428 4352/225/428 4350/224/428
-f 4352/225/427 4342/234/427 4339/232/427
-f 4339/232/427 4351/224/427 4352/225/427
-f 4351/224/430 4339/232/430 4338/233/430
-f 4338/233/430 4353/231/430 4351/224/430
-f 4327/200/465 4359/199/465 4360/202/465
-f 4360/202/465 4328/201/465 4327/200/465
-f 4331/208/417 4340/236/417 4341/235/417
-f 4341/235/417 4332/207/417 4331/208/417
-f 4332/207/422 4341/235/422 4333/236/422
-f 4333/236/422 4348/208/422 4332/207/422
-f 4355/236/27 4317/238/27 4320/237/27
-f 4320/237/27 4356/231/27 4355/236/27
-f 4356/231/27 4320/237/27 4358/239/27
-f 4358/239/27 4335/233/27 4356/231/27
-f 4335/210/191 4358/241/191 4357/240/191
-f 4357/240/191 4333/209/191 4335/210/191
-f 4333/236/26 4357/238/26 4319/242/26
-f 4319/242/26 4348/208/26 4333/236/26
-f 4348/208/26 4319/242/26 4318/240/26
-f 4318/240/26 4347/209/26 4348/208/26
-f 4330/209/26 4325/240/26 4328/242/26
-f 4328/242/26 4331/208/26 4330/209/26
-f 4331/208/26 4328/242/26 4360/238/26
-f 4360/238/26 4340/236/26 4331/208/26
-f 4340/209/431 4360/240/431 4359/241/431
-f 4359/241/431 4338/210/431 4340/209/431
-f 4338/233/27 4359/239/27 4327/237/27
-f 4327/237/27 4353/231/27 4338/233/27
-f 4353/231/27 4327/237/27 4326/238/27
-f 4326/238/27 4354/236/27 4353/231/27
-f 4361/243/160 4362/246/160 4363/245/160
-f 4363/245/160 4364/244/160 4361/243/160
-f 4361/247/163 4365/250/163 4366/249/163
-f 4366/249/163 4362/248/163 4361/247/163
-f 4362/246/162 4366/252/162 4367/251/162
-f 4367/251/162 4363/245/162 4362/246/162
-f 4363/248/161 4367/249/161 4368/250/161
-f 4368/250/161 4364/247/161 4363/248/161
-f 4369/195/411 4370/198/411 4371/197/436
-f 4371/197/436 4372/196/436 4369/195/411
-f 4373/199/437 4374/202/437 4375/201/437
-f 4375/201/437 4376/200/437 4373/199/437
-f 4377/203/414 4378/206/414 4379/205/414
-f 4379/205/414 4380/204/414 4377/203/414
-f 4381/202/465 4382/199/465 4383/200/465
-f 4383/200/465 4384/201/465 4381/202/465
-f 4385/207/417 4386/209/417 4387/208/417
-f 4387/208/417 4388/207/417 4385/207/417
-f 4389/209/171 4390/211/171 4391/210/171
-f 4380/212/418 4379/214/418 4392/213/418
-f 4392/213/418 4393/196/418 4380/212/418
-f 4394/210/419 4395/211/419 4396/209/419
-f 4397/215/420 4396/209/420 4395/211/420
-f 4395/211/420 4398/216/420 4397/215/420
-f 4399/217/167 4372/196/167 4371/197/167
-f 4371/197/167 4400/218/167 4399/217/167
-f 4401/219/421 4377/203/421 4380/204/438
-f 4380/204/438 4402/220/421 4401/219/421
-f 4403/209/422 4385/207/422 4388/207/422
-f 4388/207/422 4404/208/422 4403/209/422
-f 4380/212/423 4393/196/423 4405/213/423
-f 4405/213/423 4402/214/423 4380/212/423
-f 4397/215/424 4398/216/424 4390/211/424
-f 4390/211/424 4389/209/424 4397/215/424
-f 4406/221/465 4370/221/465 4369/222/465
-f 4369/222/465 4392/222/465 4406/221/465
-f 4392/222/425 4369/222/425 4372/203/425
-f 4372/203/425 4393/203/425 4392/222/425
-f 4393/203/426 4372/203/426 4399/206/426
-f 4399/206/426 4405/206/426 4393/203/426
-f 4405/206/437 4399/206/437 4400/223/437
-f 4400/223/437 4407/223/437 4405/206/437
-f 4407/224/427 4400/224/427 4371/226/427
-f 4371/226/427 4408/225/427 4407/224/427
-f 4408/225/428 4371/226/428 4370/224/428
-f 4370/224/428 4406/224/428 4408/225/428
-f 4402/214/419 4405/213/419 4407/228/419
-f 4407/228/419 4409/227/419 4402/214/419
-f 4409/229/465 4410/221/465 4401/219/465
-f 4401/219/465 4402/220/465 4409/229/465
-f 4378/206/437 4411/223/437 4412/230/437
-f 4412/230/437 4379/205/437 4378/206/437
-f 4412/227/171 4406/228/171 4392/213/171
-f 4392/213/171 4379/214/171 4412/227/171
-f 4375/201/437 4413/202/437 4414/199/437
-f 4414/199/437 4376/200/437 4375/201/437
-f 4412/231/487 4391/233/487 4390/232/487
-f 4390/232/487 4406/224/487 4412/231/487
-f 4406/224/428 4390/232/428 4398/234/428
-f 4398/234/428 4408/225/428 4406/224/428
-f 4408/225/427 4398/234/427 4395/232/427
-f 4395/232/427 4407/224/427 4408/225/427
-f 4407/224/430 4395/232/430 4394/233/430
-f 4394/233/430 4409/231/430 4407/224/430
-f 4383/200/465 4415/199/465 4416/202/465
-f 4416/202/465 4384/201/465 4383/200/465
-f 4387/208/417 4396/236/417 4397/235/417
-f 4397/235/417 4388/207/417 4387/208/417
-f 4388/207/422 4397/235/422 4389/236/422
-f 4389/236/422 4404/208/422 4388/207/422
-f 4411/236/27 4373/238/27 4376/237/27
-f 4376/237/27 4412/231/27 4411/236/27
-f 4412/231/27 4376/237/27 4414/239/27
-f 4414/239/27 4391/233/27 4412/231/27
-f 4391/210/191 4414/241/191 4413/240/191
-f 4413/240/191 4389/209/191 4391/210/191
-f 4389/236/26 4413/238/26 4375/242/26
-f 4375/242/26 4404/208/26 4389/236/26
-f 4404/208/26 4375/242/26 4374/240/26
-f 4374/240/26 4403/209/26 4404/208/26
-f 4386/209/26 4381/240/26 4384/242/26
-f 4384/242/26 4387/208/26 4386/209/26
-f 4387/208/26 4384/242/26 4416/238/26
-f 4416/238/26 4396/236/26 4387/208/26
-f 4396/209/431 4416/240/431 4415/241/431
-f 4415/241/431 4394/210/431 4396/209/431
-f 4394/233/27 4415/239/27 4383/237/27
-f 4383/237/27 4409/231/27 4394/233/27
-f 4409/231/27 4383/237/27 4382/238/27
-f 4382/238/27 4410/236/27 4409/231/27
-f 4417/243/432 4418/246/432 4419/245/432
-f 4419/245/432 4420/244/432 4417/243/432
-f 4417/247/433 4421/250/433 4422/249/433
-f 4422/249/433 4418/248/433 4417/247/433
-f 4418/246/434 4422/252/434 4423/251/434
-f 4423/251/434 4419/245/434 4418/246/434
-f 4419/248/435 4423/249/435 4424/250/435
-f 4424/250/435 4420/247/435 4419/248/435
-f 4425/195/443 4426/198/443 4427/197/443
-f 4427/197/443 4428/196/443 4425/195/443
-f 4429/199/390 4430/202/390 4431/201/390
-f 4431/201/390 4432/200/390 4429/199/390
-f 4433/203/444 4434/206/444 4435/205/444
-f 4435/205/444 4436/204/444 4433/203/444
-f 4437/202/388 4438/199/388 4439/200/388
-f 4439/200/388 4440/201/388 4437/202/388
-f 4441/207/398 4442/209/398 4443/208/398
-f 4443/208/398 4444/207/398 4441/207/398
-f 4445/209/445 4446/211/445 4447/210/445
-f 4436/212/446 4435/214/446 4448/213/446
-f 4448/213/446 4449/196/446 4436/212/446
-f 4450/210/447 4451/211/447 4452/209/447
-f 4453/215/448 4452/209/448 4451/211/448
-f 4451/211/448 4454/216/448 4453/215/448
-f 4455/217/449 4428/196/449 4427/197/449
-f 4427/197/449 4456/218/449 4455/217/449
-f 4457/219/451 4433/203/451 4436/204/451
-f 4436/204/451 4458/220/451 4457/219/451
-f 4459/209/391 4441/207/391 4444/207/391
-f 4444/207/391 4460/208/391 4459/209/391
-f 4436/212/452 4449/196/452 4461/213/452
-f 4461/213/452 4458/214/452 4436/212/452
-f 4453/215/453 4454/216/453 4446/211/453
-f 4446/211/453 4445/209/453 4453/215/453
-f 4462/221/388 4426/221/388 4425/222/388
-f 4425/222/388 4448/222/388 4462/221/388
-f 4448/222/402 4425/222/402 4428/203/402
-f 4428/203/402 4449/203/402 4448/222/402
-f 4449/203/401 4428/203/401 4455/206/401
-f 4455/206/401 4461/206/401 4449/203/401
-f 4461/206/390 4455/206/390 4456/223/390
-f 4456/223/390 4463/223/390 4461/206/390
-f 4463/224/454 4456/224/454 4427/226/454
-f 4427/226/454 4464/225/454 4463/224/454
-f 4464/225/455 4427/226/455 4426/224/455
-f 4426/224/455 4462/224/455 4464/225/455
-f 4458/214/447 4461/213/447 4463/228/447
-f 4463/228/447 4465/227/447 4458/214/447
-f 4465/229/388 4466/221/388 4457/219/388
-f 4457/219/388 4458/220/388 4465/229/388
-f 4434/206/390 4467/223/390 4468/230/390
-f 4468/230/390 4435/205/390 4434/206/390
-f 4468/227/445 4462/228/445 4448/213/445
-f 4448/213/445 4435/214/445 4468/227/445
-f 4431/201/390 4469/202/390 4470/199/390
-f 4470/199/390 4432/200/390 4431/201/390
-f 4468/231/456 4447/233/456 4446/232/456
-f 4446/232/456 4462/224/456 4468/231/456
-f 4462/224/455 4446/232/455 4454/234/455
-f 4454/234/455 4464/225/455 4462/224/455
-f 4464/225/454 4454/234/454 4451/232/454
-f 4451/232/454 4463/224/454 4464/225/454
-f 4463/224/457 4451/232/457 4450/233/457
-f 4450/233/457 4465/231/457 4463/224/457
-f 4439/200/388 4471/199/388 4472/202/388
-f 4472/202/388 4440/201/388 4439/200/388
-f 4443/208/398 4452/236/398 4453/235/398
-f 4453/235/398 4444/207/398 4443/208/398
-f 4444/207/391 4453/235/391 4445/236/391
-f 4445/236/391 4460/208/391 4444/207/391
-f 4467/236/27 4429/238/27 4432/237/27
-f 4432/237/27 4468/231/27 4467/236/27
-f 4468/231/27 4432/237/27 4470/239/27
-f 4470/239/27 4447/233/27 4468/231/27
-f 4447/210/484 4470/241/484 4469/240/484
-f 4469/240/484 4445/209/484 4447/210/484
-f 4445/236/26 4469/238/26 4431/242/26
-f 4431/242/26 4460/208/26 4445/236/26
-f 4460/208/26 4431/242/26 4430/240/26
-f 4430/240/26 4459/209/26 4460/208/26
-f 4442/209/26 4437/240/26 4440/242/26
-f 4440/242/26 4443/208/26 4442/209/26
-f 4443/208/26 4440/242/26 4472/238/26
-f 4472/238/26 4452/236/26 4443/208/26
-f 4452/209/459 4472/240/459 4471/241/459
-f 4471/241/459 4450/210/459 4452/209/459
-f 4450/233/27 4471/239/27 4439/237/27
-f 4439/237/27 4465/231/27 4450/233/27
-f 4465/231/27 4439/237/27 4438/238/27
-f 4438/238/27 4466/236/27 4465/231/27
-f 4473/243/150 4474/246/150 4475/245/150
-f 4475/245/150 4476/244/150 4473/243/150
-f 4473/247/153 4477/250/153 4478/249/153
-f 4478/249/153 4474/248/153 4473/247/153
-f 4474/246/152 4478/252/152 4479/251/152
-f 4479/251/152 4475/245/152 4474/246/152
-f 4475/248/151 4479/249/151 4480/250/151
-f 4480/250/151 4476/247/151 4475/248/151
-f 4481/253/18 4482/256/18 4483/255/18
-f 4483/255/18 4484/254/18 4481/253/18
-f 4485/257/17 4486/258/17 4482/256/17
-f 4482/256/17 4481/253/17 4485/257/17
-f 4487/259/16 4488/260/16 4486/258/16
-f 4486/258/16 4485/257/16 4487/259/16
-f 4489/261/15 4490/264/15 4488/263/15
-f 4488/263/15 4487/262/118 4489/261/15
-f 4491/265/14 4492/266/14 4490/264/14
-f 4490/264/14 4489/261/14 4491/265/14
-f 4493/267/13 4494/268/13 4492/266/13
-f 4492/266/13 4491/265/13 4493/267/13
-f 4495/269/25 4496/270/25 4494/268/24
-f 4494/268/24 4493/267/24 4495/269/25
-f 4497/271/23 4498/272/23 4496/270/23
-f 4496/270/23 4495/269/23 4497/271/23
-f 4499/273/191 4500/274/22 4498/272/22
-f 4498/272/22 4497/271/22 4499/273/191
-f 4501/275/21 4502/276/21 4500/274/21
-f 4500/274/21 4499/273/21 4501/275/21
-f 4503/277/20 4504/278/20 4502/276/20
-f 4502/276/20 4501/275/20 4503/277/20
-f 4484/254/19 4483/255/19 4504/278/190
-f 4504/278/190 4503/277/190 4484/254/19
-f 4482/279/27 4505/282/27 4506/281/27
-f 4506/281/27 4483/280/27 4482/279/27
-f 4507/283/27 4508/284/27 4509/282/27
-f 4509/282/27 4510/279/27 4507/283/27
-f 4488/285/27 4511/285/27 4512/284/27
-f 4512/284/27 4486/283/27 4488/285/27
-f 4513/286/27 4514/287/27 4515/285/27
-f 4515/285/27 4516/285/27 4513/286/27
-f 4492/288/27 4517/289/27 4518/287/27
-f 4518/287/27 4490/286/27 4492/288/27
-f 4519/290/27 4520/291/27 4521/289/27
-f 4521/289/27 4522/288/27 4519/290/27
-f 4496/292/27 4523/293/27 4524/291/27
-f 4524/291/27 4494/290/27 4496/292/27
-f 4525/294/27 4526/295/27 4527/293/27
-f 4527/293/27 4528/292/27 4525/294/27
-f 4500/296/27 4529/297/27 4530/295/27
-f 4530/295/27 4498/294/27 4500/296/27
-f 4531/298/27 4532/299/27 4533/297/27
-f 4533/297/27 4534/296/27 4531/298/27
-f 4504/300/27 4535/300/27 4536/299/27
-f 4536/299/27 4502/298/27 4504/300/27
-f 4537/280/27 4538/281/27 4539/300/27
-f 4539/300/27 4540/300/27 4537/280/27
-f 4505/301/24 4541/304/24 4542/303/24
-f 4542/303/24 4506/302/24 4505/301/24
-f 4512/305/23 4543/306/23 4541/304/23
-f 4541/304/23 4505/301/23 4512/305/23
-f 4511/307/22 4544/308/22 4543/306/22
-f 4543/306/22 4512/305/191 4511/307/22
-f 4518/309/21 4545/310/21 4544/308/21
-f 4544/308/21 4511/307/21 4518/309/21
-f 4517/311/20 4546/312/20 4545/310/20
-f 4545/310/20 4518/309/20 4517/311/20
-f 4524/313/19 4547/314/19 4546/312/19
-f 4546/312/19 4517/311/19 4524/313/19
-f 4523/315/194 4548/316/194 4547/314/18
-f 4547/314/18 4524/313/18 4523/315/194
-f 4530/317/17 4549/318/17 4548/316/17
-f 4548/316/17 4523/315/17 4530/317/17
-f 4529/319/16 4550/320/16 4549/318/16
-f 4549/318/16 4530/317/16 4529/319/16
-f 4536/321/118 4551/324/15 4550/323/15
-f 4550/323/15 4529/322/15 4536/321/118
-f 4535/325/14 4552/326/14 4551/324/14
-f 4551/324/14 4536/321/14 4535/325/14
-f 4506/302/13 4542/303/13 4552/326/192
-f 4552/326/192 4535/325/192 4506/302/13
-f 4541/327/27 4553/329/27 4542/328/27
-f 4543/330/27 4553/329/27 4541/327/27
-f 4544/331/27 4553/329/27 4543/330/27
-f 4545/332/27 4553/329/27 4544/331/27
-f 4546/333/27 4553/329/27 4545/332/27
-f 4547/334/27 4553/329/27 4546/333/27
-f 4548/335/27 4553/329/27 4547/334/27
-f 4549/336/27 4553/329/27 4548/335/27
-f 4550/337/27 4553/329/27 4549/336/27
-f 4551/338/27 4553/329/27 4550/337/27
-f 4552/339/27 4553/329/27 4551/338/27
-f 4542/328/27 4553/329/27 4552/339/27
-f 4486/258/17 4507/341/17 4510/340/17
-f 4510/340/17 4482/256/17 4486/258/17
-f 4482/279/151 4510/279/151 4509/282/151
-f 4509/282/151 4505/282/151 4482/279/151
-f 4505/301/23 4509/343/23 4508/342/23
-f 4508/342/23 4512/305/23 4505/301/23
-f 4512/284/198 4508/284/198 4507/283/198
-f 4507/283/198 4486/283/198 4512/284/198
-f 4490/264/15 4513/345/15 4516/344/15
-f 4516/344/15 4488/263/15 4490/264/15
-f 4488/285/7 4516/285/7 4515/285/7
-f 4515/285/7 4511/285/7 4488/285/7
-f 4511/307/21 4515/347/21 4514/346/21
-f 4514/346/21 4518/309/21 4511/307/21
-f 4518/287/197 4514/287/197 4513/286/197
-f 4513/286/197 4490/286/197 4518/287/197
-f 4494/268/13 4519/349/13 4522/348/13
-f 4522/348/13 4492/266/13 4494/268/13
-f 4492/288/163 4522/288/163 4521/289/163
-f 4521/289/163 4517/289/163 4492/288/163
-f 4517/311/19 4521/351/19 4520/350/19
-f 4520/350/19 4524/313/19 4517/311/19
-f 4524/291/10 4520/291/10 4519/290/10
-f 4519/290/10 4494/290/10 4524/291/10
-f 4498/272/23 4525/353/23 4528/352/23
-f 4528/352/23 4496/270/23 4498/272/23
-f 4496/292/153 4528/292/153 4527/293/153
-f 4527/293/153 4523/293/153 4496/292/153
-f 4523/315/17 4527/355/17 4526/354/17
-f 4526/354/17 4530/317/17 4523/315/17
-f 4530/295/196 4526/295/196 4525/294/196
-f 4525/294/196 4498/294/196 4530/295/196
-f 4502/276/21 4531/357/21 4534/356/178
-f 4534/356/178 4500/274/21 4502/276/21
-f 4500/296/1 4534/296/1 4533/297/1
-f 4533/297/1 4529/297/1 4500/296/1
-f 4529/322/15 4533/359/15 4532/358/15
-f 4532/358/15 4536/321/118 4529/322/15
-f 4536/299/195 4532/299/195 4531/298/195
-f 4531/298/195 4502/298/195 4536/299/195
-f 4483/255/19 4537/361/19 4540/360/19
-f 4540/360/19 4504/278/190 4483/255/19
-f 4504/300/161 4540/300/161 4539/300/161
-f 4539/300/161 4535/300/161 4504/300/161
-f 4535/325/192 4539/363/192 4538/362/13
-f 4538/362/13 4506/302/13 4535/325/192
-f 4506/281/4 4538/281/4 4537/280/4
-f 4537/280/4 4483/280/4 4506/281/4
-# 7168 faces
-
-�PNG
- - - # -+#"&#*, ##((0843;: ("
# -&)!.(;"2+;3$#"%&(&(%&((*%#(&(+(&,++-/0.0..010�)&1-,8/-0/020.83.98/333568685689854868<95:;;7?@<>@?@<=AB?GH?HHADEHKLQRXXC$B&E(D)H&N I)L,F0
M1D9V T P,P. [ Z" -_(S3V8X6
Y8Q6U9X6\;I? A>;c&k+`>s,
r-y0x1@?@I@]@LB DA=UJ%]Q(aAdEeHhEhFjHjKpNpPdX,k]0wV n`2wi6~p;BCCCFHEIJIEBHGHMIEJKKFNPLNPFPPMQQNWXNXXQMIPNQVQMRSSTVXUXYZUQXWZ]YTZ[\\^`V``]`aa]X`_dfb\xlD}pFtPbccdfhfhikfahgknicjkkmopnpqrlgxrl}wq�7�o;�s=�zC�|S�~C�|v��L��V��H��W��]��b��{��d��p��i��t��L��T��N��W��g��u��h��m��x��l��y������������������������������������������·�ż���������������� -*�����xS,a����j��0\____߈W�a�ѳZ�V�պt�ҫ���j��Z�{^�t=�#
�y]�u]�TI�KӴ���q�X]]]]�4M�r�\N��(o�a�r9E1�Wj߅1��j? -c�`=��K�K���^}5�|>/M��뺎����zI7tC7�Gs9m||�0�k -� -�� -��U -��`��<o��߇�� -!�� -`�OH - -`�� -`�ޮ�1 -����t�P.���LY���ty�0===].O'���=��|�\.�L -���t�<���{������{tֱ_ -`�P��ʸ�(ʸ�( -@�&Y����z�J �= -�snn=BP���2 !`C
�=� -��EU- - -G��lvrd�7�*�EBȾ -�<�pD&!�2I`����̂i���R��R��^�{o -�B�P(��©S�� ���g�ȑ#�Lߓ|]���q�H�{ -��{0a�����ܦR) -Ӆ©SeS~�\��8r���x�Haz��{ -G��ygj�0=]�.�� -�6��":}�C�H�,< -ж)�l �J�R�Bj -� -!�T �BNB���^B -*"�8w0�1�1fx�#�1�s�qQU�㊢�r5�a�1^r0�E�����n�ߑ�a�$ p������P����j�`cccch�7'�9������|^��1���4]�u�iy9\H���z^�] -�[e��C��P���o��Emw1t�@ � -m�H
H�Ԁ�*!P��?�� - -��&s=�ĄT��9R��
@�7ʋ -B�3&�%���F�a$�%CG�R�|k+�����j���F�q~�Ւ������ֳ����Y���$�
]Ɍg2��J����L&�躖���Ưi����N�o�`� 8��@+ - >ӫP%�B*`�@ -�$X*!T*5�.m<�.�Y_o�Οo2=�jI�o��m={��9��\&��d�+b��d2�\2O<��kz���.��c -�-��:�0�*�J�̚�T -�1.v� -�%u - ��� !�f����I8 -�XĂyb���� ����Q -4��S��z}Ѷ�QZ�iD -@� -���U)W*��G -�ʕJٚ.�ߙr�2���9U.�*�O�%�/V��J�\�T*�J9"\(L�˧�33������=��w��TʕʩSf�R�|e�R�~�|�T�P8U.����ry�P�) -�S�r�<w�2])�˕r�\.T~�\(�e9d��G&&�LML���*�S�S��: -�3��� -_m������_� -V�F��,�z�d'��:i_���~k��v-�������� PrR�;v��v�� -�?�|����7��gX�4�ȥ.��Ǎ>ETD����T��$ф�E���K�9K^r�GNi�q�����p!�0� -���~K�? -�̑9�P� ��� -����eԧ -����$;E:E�s��� -!ڶ�� -@ -5Z~4A�4�9r�ҭ2�����0 -H -̗��Ý@� -�� -!@�v&�b�9Ӭ -���t7����6�( -`���Qj��GMR�V��P ��7(]�Sy)���Ťn�,<O) -@� -U - 7vH0 - -���| -��G�� -���v��n����?��̨��v�J�RE���k��]�ƍo,��v{'�4��}�E;����7�6��m=oU�_��w�Q��^��e�FL�*��Q��,}��i�z�*/PE�?�㈶�/.P�7�h�w��"���v��suGnN���(�*����n;�v��, 0�L -V;��v{/ -����u����ݯ -�r�K�B�03-�R�,�s�\���r�03===]���������_�.���'RwNOw6�����)�g -�ryfFn>]���������S�Ba�P�����RafF�� -�>=}�ȑ#w�&�_*��� -����8�~�%=��؞��b��债�#�yG�bG�o�Z�ϟ?>>�5-���kk�g��R�@ -������hw7����vtm�]�f-�v��}X�FԾ]��<��ﶭ��w�(�ަ`�F��3] @- -ڻQ-�5)%4E�~�(m�Y�ޠ;���N�~
v��# -<�z�,D�����*���0\�|��7o�����������W.�r9��sO��ӷ�-�>k00� -���X -K���� ,b�G� �y���4 ���`��;�{w�F��?��W��E���@�7��u��ŋa2����%���}V�_�1�KC4 -R��l�~�&<�1�e�/q�
ڿ��Q��|���7�z���/����/_ym-|:���a�ҝ��Xzl�� ����"� -�/�X�� -�"�#`�99`�i���Rm�����& -d�yފ��'V�`�q�o��S ��˗�o��˷ߗ - -B�;�&\���!�+<� �yB ΅�� - -[��_y��͛o����������ۿ}����W.�ܔ -`�a�q�8� -@@W� -d�,��q��m��ߴ�#��@H��ǣ�l -_�Ў
?�X� -%���
0O��3;I -���0措��0s6�. -W!\�z�����(�x�.�k�7�z�������������o�ܾ�o^^� -3�8w��;s�`�U� �1CHF9S�/J�P<5s9?� -�{�`���f���a'p�*E���y�\O�B��+�'<�y�`����[�Q��w~��1������ʅ���gb ����ޣ�ӝh��c���q� =6&�dž� R�T��[J" ��a����K#�K\� _�O�����*r��oİ�@� -�0V��Q -��NO*���91����-O�?���t������u �">/0�a�c��t'����9��{N�0Op�s_x�����v�����*.��,Ox�+B�B��s��:���;b���%M+��������o�����������o�u��f-|�O�����=��u��?��d:T�8��{�(��X,"#Ĥ3�8c�K#�T�1�c�"\Jf�� -}� !����0�E! G�q�� -��N� -�uJ��oG5��oD+�܂�t7�G�Q���ۆȲ�^m�Ϙt�{�;�h�4��Rģ�s�e�a��V*���! - -G����@�@`̐��E%�9����Ȱp��H��`X`��w��_^B0�9CE��*.�"R��(E -��? - -�1�����<�y����ݼUP�Jak��_lo�|�����?���?����}���+��T -@`΄'���>���/���¹ -$��h� -@mZ���"��s`W�"����m��e�)� -�x�(� -�R�y�����qM���b�^����s -����~��>���O~��ǟ|�������+� -.sD���3Op&��{�qTW��s̘��~W��(��ϗ=�X5 -� -�R�T*>��PU���E�L� -o��`���ʊ��}<BxX0![-���q�<�pUlr�9����o"GW�/q� -�ن�Jzc� -W0�u���r!�+��†��{�p��3���M��p.� -�0�O��an�*�� -�]��e��F -���@� -�o��;��u���_}��V 1�2�fۋ�W�8Yy-��Y�V��A -U �f� -6۶5���7�XíKC��!�h -!�� ƹ�-cK#\��C�e�u=O���x�8#�T �s!����治,ܢ:� �9��$�q�V�_{嵷>��G���g���O>��G�}�/��5��Z? -�3�a*��N�$�(0O���_�����jC��YW7�ă>� ���˲�`ʑm��ͧ)]0���߫G��:Z -�J���r��6@-n-���"�lj�j@�E��n�Ѻm�Ur:{�Ij�K�+���� -@�e�fn��:�[ -��ٯ<���`�q��EH���-c-�%̋��\����,��S>�M��|��0VU
q���"`+�O�� � ��y� �O.��.U�4Mմ�O%�7�՛ۯ��ֻ?�觟|��O�ӏ?�Q�I - - ��Mľ��\W��ѯ��@"N�NH4�u=�a�4�0N�O꺑?h�r�\f"��?g&d -@��z��wb -,Ƙ!,� ���@�� -����q���g�k*B��p�x�u�e) -`<�_@�(��^����1b˗ -�D>��i�a����% -������Ȇ� ��s�s�� -�=�C�U����f�A �\�u{�+ - �������ͷ��࣏>����ޏ�杛ۗ|p�k����O�՝��ۭ��g*5:���h�ݧb�q����Q)F��z -�5 �&wpk!�� -�c���jw�a����y -c@xA� �9��u�SB�s10z@�|�k�Xp�%�/�l���C�b ]��^��Zh� -���|�Ȃ�TJZ��8�:��9��L$��2�L��A�Lf,�?�ym��<t"�?NHS�w~ַ&&���Q -�Ӆ�3�©��t�P. -�r�\( -�/��|��pff�\�)�f��j�ʩ�twS��L�P(��Ӆ�i�w�����dj�p�\. -���O<������ -��l��eƸ+/��ͮ�Ϲ,�C���'�^7أ -���?���\^��{�ð�� -�er�6�)�SJ�W��i����l��nͦ���\��]ߵ��5J-g�z�6������<_���Y��>� -`�@`?0> ->;�*�B��;��#JkԦ�թ-'�%sD�]^����u���v��y`�m�,��u������3g`��P�3ѩ���M -���9 -`YP�歹9�w1E��k��٩�����c�s����F��F�� -P2O���3˻Nm�fGVD;���e��e�Ⱥ_J�b-�t:�T��2�G��X�ƨ -!� 8���9�bǿ��c -; -�d�! -uZ���� - ����S - �0��� -�W._�p��ɓ'�dj��<�N���^6Fk=�g$����}����L]�y�b��l>�D��h4V�'�h4]���{EQ�=.�sC]�� -��=�@c��O�6K��Q�����2�Ɠ�:K -�IFě�hT��-��T2!��M�)BL3k���?���τ�=�z.�{.�{��p�u�o�{@��ߒ -�|�ȑ -�h�Ek�4� -� - -�G��Fa���Ԕi�S�<c���2%�i./�����ᓓp��E(1�`B�)p�)��@�pK%��8��3w|/ -@�/��׀ -V�P8�;wn�p.�����
u�{��J&��7sb?�0?۞߫ -9�l�73!C8RS1 -�ܹB�\n�P�Y�::z{�������z�B��˲�lY�%��Ds֜%/zK�Ğ� -[M���I -#�py��O!� BPc�P*�7 -�� -�q��3��Pǹ�8Nn?�o�Ei��h����Ys�|���������� Bn&�077g�������_Z�t����|��/�Ƕ�%��DΚ_��g�,g_p�N�Z�Q�N ���) -ү�{~3�'��U�j�� -�\����K�e -�\"��,�ٟ�����C����ӟtr������$����LD���ގ��UL
&r{��,.��Q~�8�o - -�MQ�����[�����g���X1��� -�\2����
�(!�T�T7C��X�qC����a�\ -��9{������k� $�����_=��:w)��&�t���1=F�"�������kgŒ������KU�V@�H -�m����h-�/������LJ�� -@f7 -�����s�Ν;w.�L���T���s�؛>@2���t�/��n��f�9N�ϛO�RS�`ߛ��D,Z�e��m۾x��y[NN%�I��Ǽsyq��8N��x�� - -�X,��?!��5 - -��
���x�E����D��m[� -V1y�[b�rG�������������^�W�X,.\��CO>�t)ʁ�P��l�9~����ǧ�(=��*��T��0�(���c -@�9��c�0�a�2��Y����ٯT -�Uf�.~�t��@�R -�o8�ZPZ���Ο�U -`��� -@=�dP�u��@Ow� -���PQ�S�2i -�Q.�y� -��4_rl{���(���|�� -`�`� -�B ��x���Q���3F���}� -��5���Ҽm_�
�(���@��rJ#UO������@ -�m[��m;�p�YtQ� �������������s�],ZV�|1ןh��$s3� -����MC��M���H�U�0� ������ǟ�Şh&��� -���fff��|>�f>�f�Q -@��ŻuJck -`/ -�zzzz��Jg����ե���ҩƺD4O�����R�T5�-$���&��)1UQ�D���G�OV��ή���׆�Z� -�J -�� -��|:a�V!�L��ffff�əh��p���#���x`l�g,��w�~w�wS)���[UU���[UUUM���nkk�����V{����5<�u���ݓJ�R��&>V�Ļh��w�T�[���9,������r ;���C���jw��J��R��h|q\A����1U��6�ю�,<]v���b���L&�)�t��'s�x����G����'�h��q�� xa������w�|��������kW���������̟�?g۶��� - �,�� - -�=??�)�J�D�`ۖ5��ˎ���_�ti? ן���U�M� -9����OX -@� -L�:H�PC:� -�4U�-EQ5�(Z*���D -@��@ �4������ �nUQu���!����> -�Q�/-��9g<���� k|Ŝ�Q����?��3�_ R�s�m�' Q�u�����˗�:���34444tD� -�z��j�����`�!@�� - -�y�i�D��:�z -� @؟@XĤ_N��K���88���>�F��Y#���* -�9�(����/O�l���s�\a�03� -�9�(2��B�)�xo������x�7 - -��7?������:��˦������֦�V|�O~������?�zM��������>�����o����������~&K�����]�+ -� -�^�@�h)cL��<�K��1F ��y��H��F]RPg�P9t|��8�s�F����+���<�������p��eǹ� -�L�r� -�V✄��_���,{~ޱ�Ή�͎�\v�Q -�D�mq� !�R�3�P��c
�JNɶ����( -`ffƲ�«�i�� -O��&!� -Ә~#��Z�*�Bh�DS&v]� -�_����T�ɦ9��/�:��t�M��ףl^8�#�� ����Y�Ŕ/)�e�T���������z���j�����R�p���@��À��.uN����q�(�I�e�p��'�T*���G?�٩Na(7�����" \� -F9��:�����b���5�rF �2.���R�T6*����9[l쒃����P�^�K�y�q._�S� -G� La�@�S��}5 -10��I� -C�C�9��8�2 �h��m�$���d"� -�}D�u~#��B`�����a�p,�D�ed�A�s��i@ -"�p�)����#�p�'�*�(��Ö&�)#�@������%�b��.���� -@ -��zE0�� -�P -�j?(\����� -hb�v8գ*m�ZJ:!�]lLJ�ƺd�(��&��W^}�4��vE3o�����q�C�u���Wѫ� ��W��W��o߾�������|���_���_��ო������ -����zh�H� -�/���B�M�\6Msyyy���˻� -�7��5��[3���\>�KE -~El�i��B -8�Ldeu��f���b9��VY�$a��9B �k5J�&�^�K�Wn���|_L8�4�;a�pN�$|A�R��$�1F�_Y[YYY��_.Ag��& -�|��}B��rN�O��ڍ�*!~�JX#�:m�"9�^��]<a�/(cu&��������>"���z],$�By�z>%���M��5B�F� ��'����lr8���uN)����U�Z��L�:� *`\�J���ǂF�0#�QJ8��ƕ�^������ 7��ϝ�����c;��Pc)�P�*� - -�`Y�s�����r�|3 -A��i��#!61��SA -��P -���=烬�]�e�qc����*�����٥���)1��M9��)��� -e0�e��LFB�U����y��5�s�� �C�!�O�ζ�<:�: -/��V#J���Ee���D����yca������#�y� -�:2222r"� `I��[�P��3��g���T(��Lں}��h����y���_>��/��ٹ����'��,����]�p��N����\ -bX.)c -G��0 -�e2�Ne:��d@c -d -�FhP[XX�� aTd�ʞ���z��
A�����P�/�\��[���* ���W8Vbhp�q�^^\t�� - -�"��U(�}�sJiX�#"��P��s�9g��۬�����e���7n�Uj�_չ�S&��̈Qq�sF9���@)a���P�Ym�c��@�ꊶ�HF��)c�[pW7Ū#���P���� -{C���+ - -B��xyy�t�bh@ �B -���g�c�9>�1F(!ԯU6W6h8��� -�~�L8Jpr -��Z��ܻrcë*2 -��1�{DSr��}eb�Q J���PJ(���RY}y��طȱ�Cs���/;� - -���u�0� �@�0�� -����1���_�n�,��P��E��� -B�PB����
J���q��ഽ�9�����#��(� -`f��H4 -�6)�Ǽp? -��� -',,�aa��n fa�P�M���>���H�u@11�t� - ��O̾u5"�������?����~|7���,�#ε�?>����3��Gz�����D�a{,�S����U��ʍ���W��<�V�6�66�
�R�6��ռ���U��|߯�|�V��Z��}��{�*�kU߫�|�����:9�mc�R� -������jeuu��ռZկy��W���j�'�_���W��Z�Z�z~��{^��ze��U���U��nּZ���Z��mnl���X��*�,��_䯬Vk5�%Hµ�"���rGX��?��b��2ʨO���
"}
`%�r��f`Ƕ���� -��g�c������X�o -��818sy��(ٶ}A` :� -c�qfC(��S#� FSxjjjj -�00r�?/���01(�|�:���_����p�ύ[Y�(H�"m�!kJWpD��R�me� �U��t![l"K��b���n��_)�%q��̴���~�N���7�DTG���NU����0�;����n���m��O��_1�/)ӮYg'Sʤ$*U���o}k�o}�gJ -��/���������������_���������_��������ۿ������J�Z�V*�J�Q¹Ml�V�V���7�� n�Б5���0 -�0����긎�:�)k���a�I%(��8N"���a���N�(��4�(�WnmH~EI�DIFa�{Q`�A�A�a�~G)+�'I��qGq��(��( ���=��<�t\S6}?�$��0�� tL�s��@�y�R�8^%���Ū�kB��5��`F(3dm�ۄf�c��8�M�s�� -p6���� -�{ - -�u�#�l�B]Wă��$)����+ -�<A��_X�*���p��X�p�(�'�!Tz����O�, -�0��(��(��؏� ��8�� ����E�kBDZL��'��9��AG~�gZ���~��:B)��(A�iF(f��4w��E�/�f^fפ��I�3���ix0`>�� - -� �(�� -� �����0���wU��s]?��0 -� ��
� -�( -�8"�Ea�qƁFaEq�Q:�0�(�C��<�s/����w-ͺ��P�%%S�%�%�`�6�2�_���?4�����ق��H�g3o LQ��1G�oQxj��f -�# -Զ)I�$���,� >�- -�?�94U -�� -0�?=��3
�����x�/n]d -��0PC��Z��>���?��#�}���B����?��?�裏>����ŷR)WʥRy -"� �p�D����Z���x4?�����+F -�(6�#� -5N8��q<�a�� �]�P<��~����������������w�*�������{��r�>zaN�K5�R�T)�ެ -p�8;�j��� -m�_)�" -�w8N�|�4L��������B���B�DQ�I -B���8 -T�^@�SV����� B�#!��
@�J���7+�Z��� -�gkkkk�� - -�+��x� -P -\J�:����85N���ʥReV�j4�o'����Ձ���ኢ(* - - -4Y�eU�dU�����Y�&����@SeY��ɪ*˒P��6�RO�dUSUU���,�BO�$M�U�2�TIV5M���j�*U�UI�ԟ�o ˲,�@�UI�"ʪ�����@�eI{ݖ�{���~ ���u�a��/of -��y - -TȆ -�p8�w�V��] -d�>� -H���>�u�1N��1!�F�Ǐw -P�3p+ -��U -@)%ӌN�tJ����PrX�3�Ҍ��\g3 -P����ăw`W -JH�!L�)�(�b�(ƈfG1N���%,� �߃I�IF�q���3}D�M
�V - -�W ]���}�(v{r�(��������l�� -`������V�e�lcT����``<5��Ƨ�Pvww���� -�� + -���"P� m\�6����$w�!�m( H*T�j>�� -�
�䟮l� -�*^]��Ӎ�fS� - -��%��,�^S�=�����NY.��ղb�N������:�4ˮ�g� - -��y��f�^��r -к��G�~�+��]�PP�K]��+Q�n4�M^/~�(� ! -d>��p�E\F�'� -�����b��'�'�?�����y�_�ggg�Ԥf}@�e
`��c� �I�ɯs�JqV���u6%s��k�K�:g��b�./���)�xZL��,��5ɲ�ݘ��i�M���.V��i�5�N3��}M��aJ0�=�K���B=#�A����љ�)� -��";^J�q%���̢a�Qǁo��J|0b -'6��uY��*�2W�8���� -�q���`���0N� p-S�i�[s -���<KZM���g)@�^��s�^����3K�����N��i�� - -��,0��* -���h��R�۪ -p���,V^�4��6���~U��3 - -~V7��b2e9�5͡�u&��`ʺ
)%�b�&��#r3*1����")"#B0AlS !�4JP��1�(��8EQ�R��
L0��$�C�3=�0������������
c42����;w�lo-wn� -�
p�����//r6~R4����B����| -�,� -м%��U����?' -X�� -��I��!��q®���Eq��a��0�}%JQ��8M�4M�$�|Gu�4M��[S -�l���������]������wl[Q�#p� -s�a6��T�MI�L��)F(t2oϝ@��1 -L�� ��$��8�i��� �Ǎ�8�ϋ#?J�8I�4�1P��Q�a01�DI'� - - -��;��h.Tڷuޞ4�W� -'#� y4˦$�8�g�Y���B��#ߧ9e�>���)����B�,��Mi��]g4�lY��YF��:O�i�O�Q<� -� - -]q.��m� -pk -�T�イ -��� -мw�r�/J -�8�(L�(J�$��8�=?�T3�0�,7�=?��4N�8N�(��0��( -��w-M��(��0X=�+��b<* -�:��N@��������� -:� -@����{��m,���j�Z�T*�ί̃�e���!X�r�e -�0 -|�� �}����a߬<��~�������xd?3c���-�x�Z�n��pȶ������g�{74��y -���W -.F&��ft� 2B1�{}���Xƌ�� - - -� -M�q,�w����w]��<��,�\ -p - -P�6j��U�� - - -��(ߞ(��2���m���Y࿂� -���v��s��B#зg -�^W�2�G�דeY�vA��-������Bof??�V���3=��G�qz:<�Fg�6C����9 -�i -�;2�W�"�x�Ry����� -ØM��Y{-L -]���K��&�q�j� B�}���u����9^h�x�Ŏ t������n���u�V�kq�Q_/�Y���yv����7.>���d�3c<�^>+�px�����1��n� -0�*@�w�<�]� -0���+1W)�K�t^��x�J�C�ӽ�^sq�)@����hAZ� -���8����Z�T�8N�[� - -��(�R�q�$��b�FEQ�����lnp����o�U�ol�7ꛛ���&�s�mnnp���z}c����8��dH�q��f�����Z�Tߨo��.�� -J�0�8EL -p����� -����F�����-���y����D�Zi��V���V_[_�$�sPX_[/��s���t��o�G�g�a�����/�b�1��c9�g�φ�����;�1��p - -��(�m� -� ���A�a�PGI�zxQ��)�ș�I��3M�(��(����b���0��IQ�%aF�w�j��OqU�^+�s5oE�/���5��y˟�����O�k뵗� -�(�-�sm?\��}ߏ�8�� �wM�\ -�_�&��q�F,��5V)(={���<��� -����ko�^+,�H�X�_��8� -�0�(r�� �c��7�(��0~EQ�{l;��y�k��%�^��~�{��{��3=ϛ�������{�ǂ�-�������kkk�k���k������y��烽��s�0�� -s�� - -� �z��_�aFa��#?d\?�(b��(�0\��?�������
�( -�(� �B?��0�� �"�q��W{a��~�^�~x�ŋ�����y��:T��拺&k�o��ng�kk��zi���V��7J��_��������ʀd��������/�ϟ�5��g -�|OP%�5�$ @xO�z��~l�+���$I�ݶ�$�P�eU�uh×�� -� ���ߎ���<�4]�t�(�C��,�t� �� ��tz~���yQa�~��^�A臞븖cif���ijK�\��}�u݉cʂ�:��OR*��*���<w����.���5� � -祅?�5j����j�ΐo{��h��.ڂ���ʱ��L�q=�����L��m�e7�M��)ȐIp��l�v�A�������A��������{.T�\]r}����K������A��a��ﻞ�_���~^���oYZ�ۨ?t�@��\K�\�w]�s}�ul�%[����w�Zo��Bsp1��I��kkk,
X[[��^�G�J{���s2�<;����<8???��� - -�y�?�yo P!����_�*�e{2�HLFTt��~ٻT���-��C�3[�G�x�m�dC~ݴu�K� -�}XT �>����� �� - -�� - - �W:�Ρ��Z�Y����4?L�NVީ - -�@� -��N��j=Z�䓖��ͅo��\��*K�z���y���'?͓���ڬ��I[v��ݔ��y����n�u7[^��9\<��s�^%36���t6+mnv<������Z�O~��h�Ғ۾�n�E��E�gQ - ���Vμ��v�JdF���d�n;�m/!�(�<�8���"?4+m���� -wCZ��"�ē��r/�[�Ff���3����}zE�.
I('�D4���'�����[���W���u��$ ���>n��R�϶.w����O#���j���wЙ����n�B.)!�r�mX�k�_�`�� -��j{��nn.��r3��ɯ�z��v�j�>�s7k -2��U{��(S�E�gf�;U�#���1�%����̋f
%��t6����>'�$$�R��"B�����?�4��}��۫Y}K/g����r]zI���u�Q:PJ(t�}�g�u�|C����QJ���o�+J黭��mty9#��,��.����̻�诪���RBߐ�?�!!����w����?z������lvE��/�| - - � -� -��%!�h����Q�E?!O}��=ߓ3��ގ�����G}Bțzp�O�0쇤G�m��G��(iD�}��n�Z~k}�����F�'�U��p}���vd���"B���t6���4$a���Ņ[��}�/]��? �H�~@%d�L�|��|H�I��l�ۯ��,�r��y��(O�ӯ����N� ��(Ϗ��=��"崜f��_݅p����r�[��`I����q�&���tz7P���<v_@�*�}�й�� �V~�9J���Q���9�c�a;��:]��y�w��,`�ӳ"OS��۶m��m� -gy��2/ϧ����Ӽ����`%P�@Y��M�����
��Η���(�g - - ���4 -w�0� -`��pꐠ���i��5 -`��_H�g���Z�N�S��c�z5:��ԁ��5� -��7t������qVd�����E�ٶ���@�I��t�V�Y6�LS���/�q2[w�(�
L�\@V��"5`7�Sg -������Ɯ ��5 - - -�?�b -`N�U -��y - -�Q�ld��q&�*2�0��Ȫ�^�8�V���4L��iHԟb����mW -����� - -)�c
-�+Z�*þ�����e4�^�����V��nqTU��u0�f������i6������o -9�*�j����(/� - - -�������e)0�bsm&`Q�y^�^����4w����vY:������}.�ݽ -�"�c̅`���_�0��UUP ��e!��s,�1��.C�a���5�3,��3��B0Ƙe1�B�Z��9H8cq.�c��\�CZ?X��(�:]�8P x�K�4P%���������I���Y�_� -�*��R�, - /�,�:�N�����Aݮ���4�S -�K��%��gۭ���e��S�������<)E~��7�~ۑ������}�����{o�/(��(ڏf��� -�@�H -��-C -��_ -`��V��K?�R�`q���p���a(��� -�,
X� - -@EY��Usf�<��w�̹�~�'��Ut9�E߾�%�~A�+BH��>����Ln���( -C߯���nk;|KÏ>�o�>!d�'�������;J(!���J�V�����jv0�$ܚ�_ҫY������3B|?�}���3J �[4Z<"�Q!�0�@�(�<MG���,Ke�o -�jI@8��T1���(�s�(�"�B��2����MG�y��n��;>=MG�������= -D�6�c��c1�V��Ee�������X�@ -����[6��.�<��Ej��i���M���M]Q�
]� -�l���1��1#���4� - F���㪜��������$���w����������o�I�����<���'� -Ȩ��OQ -`���s�1�L&�d<�'���x3Ɠ1�c$0{�-���
ڊZS@[�3\�ʇ�d�/���-1{s�. -�'$C��'}���S���O�}�'�@ �z���` KZ돟�����O|�.R�c��GT�Ό�ґ�L���,� - -�c���x�jha����"���s�9�E�9<�1B�s�͒����7f�s�p��Ʋȏs�!g�!��ea-� - -���T -@���.���= -` - ��L0�X���X$c...Ɯ�ɅHบ(21gL�Lp&.���q����<fU�eY�e)K���PT���s<��q�c��4&���ikjuӔ���A - -� -`wFB�Y�V - Dc!Ds�ㄉ�����s��`1Lp����8N0O�L��y,^��1��c.��F�2�0�֊h( -Ę�8�1�\0c�-�0��υ�]�k�Mմ�y�[o����n�!} -��<���m#-+ -4Ô)�7$�������E4E��t -�,ZЂ�B����2 - - -��>�K}P@Y3tSח - -�V -1��?7���� -�r��e - - - -��,) -��ዉ��P���ph�@� -Ԕ����-k�V�(�RaM[kT��� -1B -�&��N^����%�-�)j[QU�| -�'ɋ�p2�<�' l�9�C�$ -�1D#T
W -@S$�"ynUm�0,��@�������� -� -.��d,��Ir!�ſ��'L���N���x|DZ`3�1��B���� -��D�1�8|(&L6��e�� -�ݮ% -�ZȂ@�1�<�I��q�qlU -`)�*�w����"
���y\�I��.@u͑ɧ{+'��d�2I^J܊��0^\�OC�_ -�'<�,I�D�1VU�@haX���8�<��.���D�a��E��P�0I&B�$N ������d(�C�xb<^$�Dt'�I�c��0���B�@QTUQ����Hℳ��XL��X��� -��3lU~�Q�ò -`]�T�7Y^p' -!�a��n[� - -zi�kk��m_@C�U�{��[��_~���o�iy��<-�<;��plӶMp��t�iK/,��v�Y��! m��jے�@ -A�1('^� - -��0� -��g\`�1�A�� �B0�V�FCQ!�,� A1ba�9f�O���3�0��8�΄c� ,d�D�1ơ!8�b(b�0cB`���d��4 ���� ��a�!p��07��sC�/�in��a��C� -QmX�cl1�̲~�S� -��4`
- -�� -�@ױm����K7ut��M�6�r� -��'��@UU -�(�NV�VM�� - f�1�^0�!�.Ƙ� �B0�N8fBp��'C1�p1 -��ꮇ� ��B0.b93 ���l�R��O-U�����qc.s����E2"a�� -�� -T -T
u H�ù�G@���
�*C�*��
��(g��!T�R -?��H�$��|�'(I�d"���P�����B�% - -�M�FHfNV�"�g��n� -Ui�j�
��e���LZ�����Xm�݆`���m�h�Җ2@ίThC���@U�R)�!���9������'�����@qR'��Y���4��5eMMMk�o(h��{]$/��%C!�c6B�y̙ �E�c�j�P����x^0!qrs>cq���a�$b"b����J���D��p2��D�q1"O!��>��ŋDp&���6P�q[<�l1�1C!��D���p8�\\\p�q
-@s�i� -P���mh�Pդn�V�P[���jC�
mYf����* -�r� c -Ø[B��U,�q���4�w�������� ̰X�}�@�����xx.`k�e|R����ұ���tS's��,��� -����Re��Z�����@Qն�\��BP�C��$B���r.@=�E:�@m7�;UUK�.���?E�z�����|S�#_��E�tM[V�eV[N�i(�"�۪ -UY�VUU�� -��4m�����4�Y<U@~�Z�~t�*�n�*�����]��� -lC̰:���x|1'<����b<�$b2�\L&8�$I&c1�\\����$A�X$�8N��d<�$B1��2��I2C� �T,��$O�8OƓ J��$�q�H���UPGny]_� -���4��}e)�WH_����ݮ�M��m�Y�8������� - -��+R� -��ȕM7��"�k��4��%��`�QuٖE�����%�17�F=�Qi(
�bH��4�m�/��A����_P�]��B�~��1.~��C5t���.eWw�.�@��4@C�����$ER���$�o٨zJc�}����*j��d,�[_�Cc -Fp�8G�w9ChY - -`�>@��E���|��{O� F�ˢ�'���J��p�N�� -��y
��`x#xq����M�E��RJ�]�3Tږm)eY������<`!��Y��� -�R�nB= �< �� -�m˒8)*��/*$�&���� -KE�<P�H)�si�?5��nܰ/�!��$a��;��E�k���? -�~&�Rn�]u��~-�"f@H�@TR[*��S�d2*
�Bw���P�RQ�ԥф���($�&�e�!J�&U�Q�����V��2��A���WJ�]
�㚬0T�� -`k�B� -Q�� -ZM��nēB �����"h���~�ʲ4n���AK���B�A�f$���Z�R� �@��ǂ��s����ڕ!�Q�y����zV�E -`r�`Q4�&���H�J -@��*��� -�B�4� -�rST -d<�L���q�&Qy�"�8�Lƣ(�UU%l��HE�O�p7���FA�p���{{�^�8���m���@0 -��[T -�8j� -D��%"����&��[Э�J�� �� ��j -�ΌEK��Y��> Z�ʒJeVD9�Ҕ�� -q -�c~������Z)S4��Ak����/2� ����E+"$�Z�Zc5Z�5���R�H@�jc -2��{�� -A)�T� -�l�� �,�3�(]��,��2�=���fM�4ͬiv�q�P4 -�!��� -E��P���}Pn8��2�n -�s!8���*c,�Ϭ�l��lo�e����e�Y�~�l�q���g�g�����<d!��������n��B7$�sW-ゑ�M�B��9�c~ij�?�@Y�0C�4u�ԍ��l -$@��DC���|�� -ᇤz - -��� �����1��@Y&��>�V��^������ -8�k -�R�� 5���<d� �!@&2���B �3 Th
���Z"j9��F2�,5�.��b� -`= ���q��I���|e~Cʜ�ZJY?z$��T�� - -�ȬZ�fn0�Q�4Q���j�@����9�
��В�@�5n,��j4�UHʐY�,���J���jP�I�2 - - d�'�m"� -�$S*��\!��FPk -(!�LgDJ(
H����5YD$kHkR�h��B - �\le�4M�:��� w�s�ߐ��3� - �>� -� ���D%(�!�2`����Rؖ+�3@2D-�Rd�j[�������\i�JYtI��CRD�H%�R�"U>hW�-ZЖF)ՖmI\����|/��%r���D�]%�E�RS�Z��h6@<��$��8�تH��i����4�g&��� -@�L�� -��yPɢ�-�� -�'�g������0TtM�`��y��k�ɑK�g''���Oi�k -�mx -���R��2��`<�;T�\Y� - 9Bk[�H����֢%�,��s�K�j -��y -�U��s?�W -(% 3�US�\� - ��s�$ -�m�!��`�
-��'~"�d -��B"\�d�u���9h�[Dl�3���@ -� -� -�� -� -�$q -ca�{����=�q��=!B����N��1�x�l�1�8�8a�Y�y��q��?{<��I4O&}okU9oh?w��~�E?��lp�.3֕�+��<D�F�F�5\��} -�r��A)@��J"
�"�I��Ld,3S Ҋq�@)m��!��!�n꺮�, -�e��iEq��I'���U�2I���$��h�G��E5;p����*/� -Y����,��y; -p{���)��Xg�Lt;�6DP)C��LI��)GT0k���*W|+��?�R�8�ܰ�$�������>�IU��>q��?�냃ꠞ͊��AU��C����r8[ -8d��.M -$C����%2��w��)2h�>PJiB҆+ -)�$aQ�q4��x2���QM�(rդ�� -Ȑ4aK�V�����\)7�A�i%l�fݬk��a�@-�<]�)��l� - ���u˟�����}����-Nz -��㌯c�5D&�k�� -��+k��mUk�����s�eW�Lj��fM�4�` -��8>N����!��� -� -`t^���� -P -J2D����ZX�B�����PYm�&��&�Ii��X
VK���m�ܸ��V��`[�����e��1�E��UHƐ6�R��K�,�MZRH8ED�2�Y&� =��6h5��-akWʒ!ChP��Z��jED��i^ -��ؚ;. - �[��8��� -�x��,�6 -�;��'�-�˄O�N� Y�q��gBd�.�FD�Q��^Kp�3!\%{�r�B��o�L� -������,˲�/���g@���[�x��n����#M&�(��R�Wy<^+�`�'WF��� -@�@�˺�kY����Y�����D�y}����2/ -@)А�(�l�� (�J�j_z -�R��8�%FN\�SQ"^� -Y�W����9 ������2�e��, -�
3ع -�0K�K?zK)�H���4@ -�j_ � -��)�M����j� -�S���Z���s��� -Ai-H[n r - -� �3 -�Z2}
�"Yi"|��VĈJ*ѱJiF"��P%�* �[�e-�u�
���ܢ&��ʲTd���� -5i�Ԥ�BM�0CJ)]�F��#�"2T�5�4�E�I����H -���2Μ%.�f}i�kw��"!@kk��d�&����5jB�:� -��h���>DD���L��Ц�5�B$m�k���ܢk�}�����t�p�*= -�`� -��;>�,�[����P�X>�Ͳ�Y -�'d�P8�!D�m�-iK,YH�ض]Y���vj��֚�4�h��~�����Zk�nW��)r��j��i"���Z�� -���� -�.�!@#'~�s?���� -�-@�p
�f��@<�I -r0Gc�zUX��~ј�.ӗ�i��I -6����>���S -@; -v o������:!h -�>��� -�� -h�P�����_��-���4`��_�"�#��'�v����� -�&�G� -�_r����f�.��e�i*�\����
�P��i�
�����<Nb��x�y�;� -����w�}w�ޟ^������/_�z}�������oN߽{��� -� -!�.`P - �S�2�R>�R�,��(M�O��>�V -��!"�� -���h������S - M�(��G�&Iz#���i~�y� -�ٲ+f˧G�2��a)fЏ} -�_�U|J/�BDDQ�v��3 -���
6 -���y��o��{���O�~����W�\9��o�9�@��̺�� -� -��g����� -`��[�s��1�KJ�/�\.�ˣ� -�Q��)�4��Q�;�R� - -�l -�@�@� -��$Y�>�@ -��;��n�>� -�U ��v��o���Ν?=�w��?={��ٽg/^��x����˗/_��c�B -XUR�f -`' -��O��zO� -`���\� -�H�$OE�̛f���n�\-���b -��(�$K���nS���r���_rC,���`��/��?I������`�Gr4N�cEc�IT�n;�������,f�K�*!�X�r<���m[��1[�2mk�@�(����do�1��(�r+��" -1�5�D
@%�FB -��D$Uw -,I�%�֭Q�-����*$@ - ͟^x��u��쎼 �~�xC\2�"p�֭�w��s��{��w�x���on}��7�os���;w��Y`��q�=n���~�Q��� - �6��Q� � -�4��J��&���P`�����(��q!@k�y`�=#�,[� A$miU�Ɛ -M�mW���%�WZk ҈@� -7/�c@*�(��Y�y1�:� -��8�z�'#��u݀RVn�� ->n��>0?<|�d��ɓ�|�]���x4��� I�Q|=�"D2��.��ĝ��� -!DQ���(<� -`����`�L���[�o߾�ݷ�}�ݷ�o{����\���O_�y��͆x�?}� -���u -@6��O���+��?1�o�x -�m���V�4FGԢ�֮ZӮV+ -�}-X��h�q"]����Eq���<h����,���
-�F�K��t���<��ny�wn(� -��(��n���8�#��������$�/��}{�%" -тȔ�OdL�j�/˲,�� -���Xl�����J� -9d��� -�Z�!� -
i�Xs�{BE$��)Z!��`EZ)@P���%������� -`/��Rh�QIZ -���(�8��;���� -A)> -($MD�E
�)՚����:�D��;�Ҁ]��? -ƓI�Q4�\�g�i������q� -<^`��; -E�L����� -���I)%��S$BMh��qRZ�.
Z�Ԡ -W�XC-��5�!0�DSBMHFg- $�րqB*Wm�ZCeYB��-ꖴi���P0\) -�fH��[�g,Za���L�m�Ze! -$Kd -�T"��Jl�}�Ԛ�mKj�f�sMd�VdL+LI�H��5�B&��@ PiBa�JKɖ-��PkʖȔeI;�s -.�~��Hp�l���W��U -�}��B���*)6�t�\V��'�~��O��s -�Y�� -�>��r���m`7 -@kk5� -`� -to�>��.`�g�0�
0<���O�`G&�_�p��mV�CrRJ��ų������ݾ;l;�{�����V���iUM��ʢ," -&ݵ��^�� -��zޚ���h4YW -��@�-!@wY�
-��ޅ��p�{�9��g� -��UY���w�03�{��|��S� -ԍ� I�fccc��03��qx�f9K|� -0�����_��i�*�%YQ�zY6)�X��/O�Ӫ���Ǧ,��m���R�$O��iQ�����Xu��f���F��(�����ggoR - -����QE�`8z@��,C�Cb��Lc�9��l&_Z���H�>X*�)���� -�aVԗ��?� -�d�t��$M����g�P~�(�;j��9D!$,�Z"�C�� -Vɀ����r~m1�% �>k� -IP�r��D -`6�����~2�FE�y�N -��<�9�Q@|�o�.�͆��N�i���Go�^w�J' .#��^���HĦ���U���q���lnn�K6�4M�b8��vئ��k�:v��"�6��xX���^���1�r� -aQ����ETl�r� -%9�b/V�X�B
��Q˰�������b -Z�c#��f��V=�� -��Q"��t7�^���q:�&�� -����9�B�M"�Ę_��yCM� -��ۯ�����pS����� -�@�d�p;`��� D�{���1�8�nCi�Ӗ6�%ij�4MDZ�W���a�j�U� ClL�l-Ȋ
V����$�� - ���
�T@;0�/@Y�٢m�����7��Y�hK -��: -��1c2&v����"?��/��͜�%z.����C_WeY>~<�G�#���ge^�UU׳��IUU�cx^�����l�V��8J��>[<�[�[,^<�ݶ_�''�t:=�N�N����I=��8[ק�gg�u5+�r�8WN���*Ϟ��|�d��8]-A�A����.�
��h2)�M��>{���] -�o�>�J#PQE�� -�$��;&!c�]�A�6x@Ɛ'��#���cc26D�����L˖b�ca�w�G�$☈�n�|�lv�N�"b��)�d 0[I�c2&��{�N���2D�1CƐ���8:DbH�A&N2.�_I`�O���-9=;[,NO��]=���|^U��"u}V��gq�L�m[WI��f\?��'��I�ԟ<��������bnu) - -��S - -�4��� 0t�p�a|iV�o���k���F -�>��f'� -��K�;�:�N���vw���v������g_����~��w�}��g�}��: - ��: -`-�G -�&4���ìLɽ�$'��aC ��8�laDDDm#�և�����A�p!����Mh ��v���a 4�Z -!5* -{���^��RjȌ�4��l�̘&�e�Ƈ��v�;�o� �(8"�x��_���&0_
�^�u� �!0� -`��b��hR|�q|�~Y?�� -`T�i ���]���&ύy# -���k� -`8�j���p��:� -&�P��"����5�?��q�V4�����Ml���BƘ��ؤ��fw��<���Z���<n���qG�A� -]Q -��/�X�LF����������\|�I����������s��V�N�߿�ag����`ww0�����v-�{���)�b�NM�E��%�/y�g��S�v�`dU�u�l�X�f�Y�^��*�D�uC�������d�3�?�����b�XT�<^���,=*���x]����6�N��F�����u������5����\���B�UnE�� ����z��i<6�����t̔�4���L�$���9db� - -"b5����L���"b�� 4��x��P� -���+("`~ -�S�N�`�D -���?�����?�������{{{�{;���`{{����{{ג�ţ��" -�Go, -Q,���̀y"`�S���l��{G��/f& ~�RA`' -Ya@,L���E����$kؤƤɘE��ab�#�&���H*b�@< -@ޤ - -��) -@����)x; -<{� �\�����oT - y�X -���wVe�[�2�g�lR֗��]�/Z -�I�)YK�±�'Li�M��*Db6m���Z�
D�O���R���+Y(Y~MDD -,�i����Me\����\�}Cpk��yg�5�9 -\$����Q�꽅@�x� -Dϳ��L�6%��o��O8���y�*�y� -�]� -�9f�&N�ܺ/�&�_���ܹ�����w>���>�s���3�����;ۃ���~|��O�^�z����W?�z����� -����&W�I} -%Ol]Ө�9�V���,iJ�4M6�f"���H��=1bm -�� -�@~s` -h�U5�6���s���U�IX�D�$�4qaL4a�!&��+��ë'�jD-�y����A�����ˈ -�iP XA ->BYaE=��Uj��m -����,Ә@264�;YV'k��� -�I�@�$��$I�nn&i����x<N�ƀx��&��bNI$PkCcL��q��2�ZU�X ���b�?%",;{�%Ҷ#��fLIjR�&IB�El0&%2��Kê��
�h���dng���b)�c��I�,}��/���� -`�`�Ē�Z�2�����qZ��ڎ0,$��@�IX ���r��P���VD���v%�j/[vI - - ] -!M�. @X�ķ���Y)@��h -����(�4MӬ9o/��W���af��/'L;cL b"J��]v��X=�Ș�ИHit3G��Cv�ןRC`��b� -���J�6HPk�D&5FR�,$�CcC�6�������(�cƆ���p+m��A���)����)M��x��_@���{�����-_��`���7�����?�����W?���ի���������7`��\K,{��� -�u��m
�,�N��N��ey
-������8��<rN^� J�@@��4�/P�Z2 -vܦ$!��8M�m��$)8F",,��K��97���48/�>6 -��ēCc� -@�Im�f�6���ys=�W�)4��qJK�#B�Lj8��2}���H��`A"l�c�=�`ɞ�J��Pj�i��"�=4(TD�q��,���Rc�f<NSc��)Yo� C���$>X: k�q�cRc�H�dᡍr -xrC O��(� ��*�&WP�� -���j����n�%�a6l_�8���v��� -�Z"�����ccRbf7��^�Һ:%�'("��}*�\�h�=��A�� �$A� ��!���7i�T���e�D��� ML�K��#�!N� -0��V�*;���|�6*^��(T�(O�l�6!����WOBV -X+���������A�P���a�v -�X�X�X�sA�y��, l��������&M67S����Q��,��㔁���mD!.X��/3"�������i�6���J�%j�#uAթ�p!�?� -�GR�`
Sa4*�h�d�+�F��@�5V`�+2� �����^ -*wx�)\hǷ���X��0�Ê(��}�B�a���H - -������I�� -��{+� -$�`$�D�T@N�N�,@p�uι�M8X#��#Qb�6��8�e�? -�z���|~i�xY����qU囝NL -q� -2�Խ��LĂ�2�RU!A��$D�4b��9���qN�����(d�b�ho*@��B^�B,�8X
0q?3LQ'�Qw�5�pp���8 ���9��m� -�
X"sA`��`-��� -� YW -�� - -u:��sGMz���R
- 1��A؊���L%�DOe��H�� -����V��6�`!2�.����r��N$�#�OB�n�4/c�1Q�x��& -�] ����Еn�1��?�y �1p�i�Y��J�!"�!���-<�Jƶh���@��q9R -���O�� -�l~ -�6�4�&��t����}��8d�0p��Iܑ�fa"6i�_�)5Y2i�1&] -���N��8%0������v2��z��qi:3E -����4M�*л�f -�{�0"'�px[+�ؚ,���@�6���:Q��8MӴ��f<6��E���mf�{xHp.�?^nRk�BĿ����ᅬ����������z���뗯_�z��o��KI�a� -pI��������ϛU)�isp��B�zk16����tUg��[�y��ϭ�6@��
����4� -����I@<~� �k -@�ܞt�� -�s���8��&4��9+��b��7��{o�U��$hBh�i����X�f<��4�7���%x�̍�$.!4� `���yx+��9��B���5��qM!X��A}�o�5����ߓ - -`�V'�I1�l
��a2\Ov��Ϗ����s -
MH��9 �{^|+K�#uh� -���3T���p>�b -�:aU��[� A!X_7�����7MP� �f( -�
���50�L&�ћ@v -�� -ptVQ�ķ.dE���FB�:�DUXXm-�`�" -\p�i��9�5���ݝ�����ww���o����|�ӏ�^�|������ -,�Nb0����� -`^W�ePU�����- -`� �e`�� -�w���� -& �������C��_���ڭ����ܐ��6x �6^��xL�0�yl54 -�k%�^Ch�'
!���f2�)N�P��E,��^�W�7�L�}�����o;{{��߿�����o����[��dm���e@/�F��d4e��dY���y}Z��l���$yYUU5��e0mۀ�ʤF���ds3NE1����AQ��/ _� E����U -��60�t&7��$���:U�֪?Pk���@X؆ ���fr�^�&���*��E���- - - -`w���z\$��r����'F�o@. -��@rU�����y����ӧ������T -�^}�"X�VEE���d��`(�`��B���!h#�� �5�aCM��VB�'hJd-k�p�Su��n4nS������N}|P�0!
qcAS
��8�zU������2�P�s°)D)�<�C���_� -����_��Ϻ��
9.`�n8Ï� -�.� -n����nS -`s�EpC���)�ps�F�/)��r -1l�5�y�;�aP�%e)�� -�5�-D�mo6�M�2X�B -`k{ow0l�7#�l~ - -�} -�����˘ -F��z -�n������y -�ؿ:�w� -�Y������ -�Q= - -`>���C���q��� -���t03��u�� -`y�����ϖ -���i���L��[bf"&�S�ޓ�U����� -<{u��v�XD$1K�k�%K�"�%ƪD��/,�������� 4x�r����"N|W����`��*�:D��4�~�efa�sLs�lq"pއԎ���/�Pk�4[�Vke�^o�6��__\^^^]^^�t�~uuuu������k1���K�s�Rל�|��<�����z�^o��w��;��|/��;��;�;�+K�R�W�� -�Ep>�B�F��|�}�뀟��S[��h����Z+�F�n��>���x}yyuuyqyu�f�\g���� - -��oh��$%fk�{��U�@j ��;��D��2�V��/�=2�2�ƻU�dCp���4L�&sUc��$&�g -u*�!�S�x��s� �����ijM�����!`URG^Y�x�BAe��czL��������^īA8�E�bK"QQ'�֩���2/�+đW��wN�1>tjB���zH�+p"��W�F3��8�� -�"P�bD�X"cX�����Iw��I�噛��W�IM5�66�m���A��������OSk�/�ɵ�P�����( <���C�R�9@5|�W%Q��z�'��ˑ&�f���R�0KW�Ëzv��NI<y0���@ -�WG��a�V�RR�[�9)��<��q�P���f��|D�h�m���f�~�vw�����˫��7?�xu��t���%�����ũ$�:����0?��z�~�wh��<j�彣<��������������xx -�T��#!r"tUT�eU= -+�,I�bMd*J�PQ����j���>B��v��@\�3 ���?z�6�Ͻ| -���v�,f?���,��Tj3�J�V��#��up*�kk�Y��
��p3��X�3�4Q�4)��sɽ{IbLj��D�KH�ɠ�9�p)v38M4�
'��ibb!J ,��]�����䃈��0Yb� �!JMj��^R����T�(�(���Z%f?��{u>���ퟦ֚%��*Z��@��b����)���A��,�Hl����ոbp�"�X�9 -�F�eU�s��U��uc�H�E�L�!�Le�0�!^#�W�::|I�����p��,��D�_��n��h4���F�V�Uگ.��/..�����O?��3 -�LJN�w�BPu�u����LH>�8���@bS@2�����P�� ��*DT�*Bg�H��8�XkU��M�� - *@�h -^Qw��E4� -2����D�n}��Xi6��F�Q�l��~}����͛�~���q����mX��/.�};�p0N��^������z����^~pp���ql��{G{G{G� ��Q�g8�ג��0ϏK -wSb�&���]/�)����IXi0*�~H7�1���h̔CIr�Z�L�5�J�{�bN��Ω>xu1���Ԥ�{ÿ<�� xk]���C�� � "�]��e�b��2��U�1�ƒ�� -"Ua�H��BBI�1a��l'l��z�� -����� --�l�%.=��\�( -�]G�E�C���K����4��Vk�[�m�_�_^^���z��?�����G���ť���+�� ���������^??:ܿ�����a�`��wX -��~���彥ޟ�� -?n�u�d�k���f�>˲�\����be��3�&�Cܪ��o��AC�_`!Y"�j��}��np���E'� -� -$�)�!.N��Z�clJҕծ���ƝXQ"hפ��4ziG��eI�X(5dL���$�{s��S%1�Z�T�ծz"U�ŒƷ?�4M�I��{}�g����I�,���]��2�p����D��sP��=��� s>c ΅"x/�������pX�L��Dvw�H��LJ)���y�LĖ���e)�.8��!&`G!]��:���ົqPQ�E�]5��%bq�wA�%&�aa�1+|�P���c���|T��Zi�4�F�Q���:������|���͛������������dz.p;����ao���7���8/o��~���|����`��p�/��@�y�+���`P� ��Fg�����������(f -դl��tJ��ZJ��L�U*s��l�PJL)�M˧&&k�T��;՛�]��]@�G�\8e��*�p!��(���>\իH�+���z���.t�v ���12b�MLDJLH��xu�(��3N} b��|��T�'�.��;�83��2f C�]8���qp"JF=�w�W@�g�H|x�zSh�� -���"�%�q�=���kU ] -%HT4�f2SJUkL�ܫ^� -T��k�b���?"b��l�:Y(�LE\�� ʜ���ې98�j�A=k�b�#s�sΩC����(����q����q<��u�٪7�������g��//�}�[<��� -�!Q!�3�TN�D3K"]�B�Q1q�]�5&I��@%1�0Ӫ�*d�S�%%����ow����:�>��)U�� �M�ϱ�Zx��*B��T\��3��¬�IC�.�BI�XJ��H��H ,�Y#����$�9'��Q$�H�;�[�p��r&de▟��q�J�,���9 x�>x/! -�*��.�(v�w`�LQi/��[�G�@� -" -��`<�_"���f���w�2��������受W7������ :y�N5��� ���� ?���Ǔe�����p�l8<� -r*�� ݸh�L�v���#����d����X��U/�",qQ�rզ�$�{չ�eg;�BF���h��8�����ڔ������ -�'K~ -pr2:99��NFgg/N�NOFq�Y�|6S[�-����η�/���z�a��n���v���n�ۏ:_���םo�����l����:��~�Y���[ -E�eZ�ckP(TT�)�g -H -�/.,��4MA��!�h���=$���O80 �XH�H��\�^�Rj�6�ȋa�� -D� -�~�*"uY�qR�u��SY` ����̑h�[��P,9A xo�1��H�,UJS�$ -k�s.��y�J���
�2��G�ݘ���n��t3H�����CXY�AvH�i�ƖD)!a-]HX�a�3G��M��.�)Ya@�b�&e88Gl�v�g!A -�0��Y�ebfk-��)19���Q-�����- -�TL-�X�������4�#�2/Q��E��,\�\�3��%ap��ca��@Wb��$J.�0��� -����KM�W)��g\�,�.��b� -dY��;xʵW��{/�UH���ԘČm�d�DȠ�R!x@)8� -�w&8��0��H�bKD������Ԑp$ -���� �7^j���[�v��j6�g�^_\�:?������������q 0���0�,.,��� - -�)���%&�%J(��ڤZ:UM�1��!�A�ȟC(��g�l�����cS@�v��^�=���Б��I��A��9ᱹ�K�Ә� -Od@1�e��7xy�FRB�5��X��D���up�b
&Y)�J��R�ǂ�ɒ����Ԑ�Y������N�A�%����!6�^������z��n����v�Y>??������������s^^�%xq!���|�p -����2����Rq�R�&U3' �$1_�6M
���d�Z"Z-ݯ�z�^f\x��LN���0�(\a�{� -����������� -@��(�ҸןܫV�s���\�Jb�v���)KB;Yƌ8����� -�z�3�ϟqd�'m�d`���4@`����� -��;�`=�]/f�X�l�UI@�\�^�ڴ-�4����ZNL�1����4�@�G� -��J&(�h?%B -ՠ>� FY���"�j -5�D -"��LmbLR�V+�J56لj�,hLS�m��*�F�G�]�����-^4���(�0|��NU -��KTwUT��#*�SIjV��@���%%e3q�d����) ��@WQA�F�M���54�lR���RH��,�Xk5�nL�b�O�I�U9� )�Px���*�J.���a�Aಷ�q*�qX��O�W�zc��j�o������F{��Ҭ7Z��J��n�O�������������� -SPVָ�b�1P�[5K��V�\��, �3�d,�����@"�I�JP8���9(���9�s�V�*,(bKl�kL5I��\�J�q�eM!��
������ -W��}g�㗴�E�+C�H�uY�wn�D�=�J��(q�B@�`&3��sT�J�IYʝfe"/]�8A���G�@c>D$�%6\��v�����UHL֚8�!)��8� -1�F*`����L�XU�ԊĖ -���Kj��1={G�߈z�ז -P�d -@�eY�١��!��#S�~����v4�f - - -%ƘjɌc�US�p�+�!��<��:�%���:o�#G��c��$�s���K�9 } 'ީ�0�|kR�$�����=!�U�H�g��|��I�$$@�d0�l�y{#�}���g��$�4鶩(��9��r�,.J�(Ū?J&1�Pj)M
%�q���,��dL�/�A���R���R�%k-�~��(�8����Ŕp� -�� -��p�"��b�p����p�9P���B]`-�Sc���\%��h�j0�.��\�6�\ qP��w��'"��������[WX` -l*BeC,$� ��AGP�����@ʔXC�r�����d���� -$�"��k,�-[kMb37W��0+�@]Z� �p�= . -������w����F���XQ������ˈ�4lM�̥$֒�DiBDc��,�M�-�x�ؔK9%Dɂ@�dG�r72ʍ��2C��5D`� -�rSB�v�&�Xۥqb�5��LDD�ي�ڄ�ꌘ%bGŐ��N�y��[ڃכ���V���Zo5�������WWW�//_��x�Fܧs�N6d� _[�� ��[�;�Y���� -�� -x�(8�}pG�٠A_v�+�21�K -Jm�nL�n��֎��N�1���8����+�my�$BP��7i\�#kR2���ԦƤ�ĔK�Ld�ISk{�xd��ZR!J)Rv���ASJ)I��r������!�$5c�O.�����F�r_0�����(��r��%��,� �dm-�c�b�Ze�aK�מ���[Q���j�k�����W�W�WW��7�nF��ܧ� �~ -p�V���ߏ��5 -�s�/?Cn5[��z��\Yi�]�|�����ח�WW�WW�rC� - -�9�D��Z�j��X�2��G���l��L���*���1qW���V�Z��:%!��3�{��J=�#-H�� -c�v ��1�Z)5d�1 q�G$$��T���B ����&�d$fQ�ز��Ltq�7/��V��j����F}a�����yt����MI��Jenn�2%�џL��6 -Km����:WM˺�4q���ոF�B����C�����_d����L�ʶ9O��D1'7��Բ%k;�&��22�i��Ƥ&MLJ [�v=u�T١��ԤD�Q�-�M -�ڔ�I�
�(��L>N��̤d��2Y����N���{e��Z&ˑ�I�{�^��\�RK�(2dJg����h�Z��zk�q���������뫫חWW?�<7�Q�rZ�V0x/ -%[��)Yk�t.�Ε�4��Ǻ#���O͔ C� -Y��65�%���R����Z@�21!�|(,������(���wH�mj���B���s��/� ���S -f��65� -��@�F��j����f�~�V[uq~~~quuuy��7K��2�[�V0�����?��5 -f��Dv���w`5* -��'�2d`�P -�!���Ld�dl�;XDv�@(R0�c -a�.���U���"b�#�*ʠ�݉,E��;���>r��j���z�VY������7�?��zs3�|z��� - -e!a��%[�L�,�� -%��l�����@ Po4ZcwJ�����o.����&
�ja~���v��e���o��w��`m��������ep<]���F�^���� -n���Pd�K5�5��$��=��R@a -�G�(����4�I��jPQ��9v��v��/ź��ĺ -�����h�
bI���V��\&8S�z��� -�S�f -g��,�nb͐9'.2g�u�¿4���y8a�W���)�I�\R�f�qD���q�� -�q��S���� -��|�� -T��9��Y���e - -KA(M㮰����vS"瘭!b#&MI -g��l;��;����J7�".03Y2��%ժ�&b��9rL^=2�T\Qo����c�s��v�{� -�3u�!�U͢π%J �B��m� -U�ΉL鄿�u�� uQT������%V�n7�2��R*ѻ��x�m���Zc�b�+��SM� - -�B�4^(�f�'�S,��N"[(����bQTu3Ī�GGE(���a�̨��V�b����Q��s�^�]� �uY�[�؋� ��dI����RI�I������z��eYF`�k�^��0,�bہ�l[����2�5qi����
#�t��{��po�f�e0�BʡZη;���(���+P�1��I{�� -���eX��aY�ksssF��@�p8H6׆�A|i)�ݱ;չ%cM{%�R���a�B�����JE�4���h #�U��I�2,kXAږm�N`V���m;4�K�7o�eY�ae;� �l۲
ö�0�V�5�����]�uBt��uMK� - -[�@� N_,;�A$�T�^Gi�ؖ-miY����/r^�T�*sY���X �v��g����f -�s�| -�,i�ʓ&6����#��^�++�ʭ�6�m��ZH):��&��-;�6dH!a�����,[H� �Y�e[B�R�Q�W�έ��4�A�ć;��p C!V�@V%�
{�2*���*+�Zn��K��*�[J[ -��H!#ȿ�C�(P�>�aEa���.t�N��Õ@R�� Z d�Kj<߾iY��vŰlUd�l�6�J�Pߖ -�$5� -��%#��b�n巬�n��eX�-;�";Hi���)�"����M - -)���P�0PɁ�0�RĔB]3��u���e��ZY��Rym�^�-�١�.(�ZQ��F���3ZQGcQ��`��? < -�X lۺe��%")�@ضe\2�%;����0�ed*����l˶���;��e��\J�]#)=ERDS�}=��a�"z� -0C -9��Y2��B2�,щ2����roh��#)B[B��X�m�aT^3lö�� -iGҖ"�B)��2��+lk�V�R1V*�eˠ")�-�(DQhI�RF" -��*U+1��( -bq!J!2�"�'.d�Ki��
l!��FQ42�AEVG2�2C[H�6B�i���"GY��N�NRZM��-� 2� ��b0��4��ZG�qSR� ��po�ױ�
���Kˮ[(�˨�0,�2T�nB�U�rz��R)=E�9k�@�t=� -�Ϻug��� -�@�����B�R�� -���JŰ����f^Ii��l4A$;��@�B -��)C�K)�����@�mEA(Q$��@v�+2�j;)�Ғ�)�ؑl#T�-����m+�m��D,
�r �ޡ� -�����%�FRJ�������m�аe �0�%oGA4�r
��� ��@FR���f$n�0�@�e��[��y�Z|��4��/�tM���wS��{:I�)M'q
����S)m6P��T*�����TN�R)BR)]'D����)M���2��Q� �PF�b may��l!#9��6�U`jRJ���*%$�������gݮ�02��y�x�+�Y�v��)�hgt������� -���`�C�*c��܋��Q'��-e�#Ba���`e嵊QQR�CaG�2 -~"B;�;Q$�pO -a�K"���2���Jvb)�
+���` B1�Ծ�@J�ZB");�P�A m�H�M�DҮ(����5����@���PJےu�r �B!�A ��Ξ!�0��h(N�`?3���BF�VGv��3���t��RF!�RT.Y�`���D����r9�TR��u=G��5�J�FT��� -�ȟ�h0�?0����A�� -˒{Á�Q$#i_D�� - -�h����w�V62vE�x��K�Lf��*s3�d>>|�����ѓ�'GOfA�ݮ" -aK�#���+�b �pЉ�ў5�A����Z[�,�2�|t,� -a )�7�P�la��(lY�d�K�.)@��{��:Q^�vX��e6��k'��R^��_�P�R�Rۑ�-F�!�P�rб�h �\���& -�,�)��r�|>Or9ZV�-GH.E�XJӴ!T{%o��)����R Dc�kM�� -l���XC&�5Zl!����KV\y��T(��U�(�I������G�=9>>:�1�^W�5B� -^��t�b�ʺ-+���u�ۄ5����vri��e�ʊad$�-e��e�6sv�B�FܑS���ϰ[��'pV,۶/Y�Q�{�0V*��aT���r ԥ5�fٖr�F(�ض��ɥ� )el�q��dȡA(;2���@Fr�d�(ښ -�PJI��rJHa�@���<-�i�j)-���8�(�h��u{���2͗ryJr�<!�%�2������T���Q�b|�j)M#�j���p.O�yJ ��PJ ] ��R�c2�y3^A��xjԶ�-R��}3��eۗ*�*++�>��25��.������>~|[��z^� -E -�� -e��D�b)��BX"�RI�HV��D\˸d��\Ų����K�V�H��Zqx�)D �����"BXR�PLÿ3
���� -)�%��$)�V(����A`�s�a\z͈�@V���BJV(� Ƽ V(��5�)�+ʜ�l��� :/�]�d߷���-���ۆ����"ER&� - -��}�Di
�ceV.�r�\���~0a -eG�$�0"y{��A۶�,�0.U�=���B -!�A4T�>)l)E()�%dG -{(�H�z[ɒ����d�siŲ�[{v :2dg� -���x�{�oܻ7��k�*����5�8 ���s �{wgg���i -���r� -[Q
b!CK}�#�ZO�.Y�QI�Vd(���0����C!"�H)�X�J)��8�E�H��9�/�0g+�`�3��0�( -�rT9 -���q�S� - -1����Ӊ��P�H"�jж�(]R�P� -l��v�2V*#��[A �)eYvt{��p(D
"�oi
B)Š#�#i[��Ptb���/�s��k#P�}A�N�V@���b -P��t]�f��^���%$K4�B�J�, - -P���uhB�Y�:s�I��"�&s�>=kӓ9 -+��pxK�����C -1�֥K�B�!�-�p�Ba�(R���@��t��;������ ��ag��F9�o�
��R -��w�A$�Hʁ�{B��B� -Վz'�d ;A0���RF"+�-è�V o�9�p�7��RJ����p0��hZ��(�`8T���h(C�hEQl�%�L��4� -@< -y%�1����� -��poo(CcŒº���b�v۶��A`G���E��`��'�uB��7��D{Q��pu��ho�ٻVlE�HD{����DdXv$BF����B��B�p0�2Q$D$�{��@�
�r/����0ړQ$im��2����2�d$����p(�ȁ��0ړQh
B!�`8����P���� �F��� -� - -�"}Aa��˗ggB�D4[�A`K!�kۖ-b��PFá���.e۲� �HچmVP�t�5ceee�Z2o��n -K�[iB]:q�زsKF"������Җeٱ�RD�e��r�@a(B9Hij��%=�t?U#�NԵW���pOFC��P�K�ȶ�@��9FR�d0�m˶V[HK�@4ř��IXz�� -۲ے -�� ���#a�R��J�;���b+�U*J�rEi�Y�@�ʟ��~2���d�MC�v[��B���<� ,F -P(�gR -�Ė�Bt��-�@]}��V����q� -z������{�����g - - -��k������"�1�َ���
/��;�R�j5'��kb�M��� - �� -Ym�4����eӼv�u]�{�����]s�½v�ڵ�{���k��d
�[g - -����~�i�� �b�p��� -����d]������i�Z,0 - -���^o����o����E���| --�"!���z�<!$�>�g ��:!ie@�����(�Wz~ -�'�x�.�?}��������]ǎv�r��s����T�<4-�i)-��Ij��!��]�%�|���M8�˚�'��v��������cR֕G�\u��L��ԕ�j%�F���%J�$Oi��1�����������7>�d���w���8�ǜ�#��?����ǭ l���r�ܽƱ��!��x�?i�9��p|0�c�p�������r������|�z�l�6]୍&��M@��6�qc���G������m -t��|�Q9Br�\���Q�SZ.SJ��R��\N�����������������-�!����>����8Y�QK��&�ﷀ�ʎ�8c@��+<�9���b��&O��G�<��f`=D�c�c���: & -�J����UV��B�H�?~ptt����'��:;0�
h�����ͫ s��H�kk�jg�����G_W؞���(^�u��[[�n���q���)8��ݹ{ -`�@ -�5�g3�?�=�����J��*��<���r�\(���U���h�RZ���J��g�� �
�D]�Di�8�ʓL�Z��\��R�\�eJ �4�/Q���rY��q;O(!�!D��&��R���e�>bz���W��,_b�)�k������O�ô �[om�#"��9G� -�Vsh�RZ�剩����I.����x,�W(��2+Q� -��%Y��-Y�4maaaaA-�N6��4�Y(ě��4�eS ������r�X(��Y,�������.d4MӴB�$�@�YUY+Ҫym9YS�v�Z�]���@�%���Ii�ʘI)%��?RK�����E - ^`�������������?����?���c�d�l�P(d��l��PȒB![(d��,)�l��,ɒy�i$�Z �l�B -�P�.d�`)RJ�B�dH6[(�@��$�l6�-��,����ͪO��y�@&!G!����Bv�z,P� -���I}t!K�Bv!K��_���B���������s�A����?��>�<|�p|��(-B���2�D'�bW0 -��A�k8
p -,.�J���e�^a���2sXM���8�c%VV5z������J��+�K�U�+�W�e�X��1Vs�T�����x"���� -�&R.��R����9�U �Y ���o�w�:��T*��%Z��r���� -��P"3��Q���<��yo��h�A�o�S$j�n�s�s^羇��� -z�fn���8^�2:���e�X�h�(-�i�BR�9Ps -
��;��T�:��8����3�P��5���g���SK��j��܀�S��8���V$���2VJ*�%Js�PBPg&�W - -S��N>���5\ -|�Ml6r����o�M� .�JL����ys}��qα�9�F���q����f�탇c�N�⛈����&@s���t7~�69���h+Q -JHx���{MXxp�9�������=�f��B�ҪY�VY��Yxp�����ӣGG�?�t�<�� -��;�$�1 -�9_����9"��9���裏������_����������c>>x��|<�0��m>n���
�9�C<䈈q�����������;?s>>��|� -E�ʕ� -�x��%�| -���x��%@;
-�s�L#?I����- - -p� - -pa`�R�XZ\�*�S���L������
�*V!��#�2��� -�$ -Y5N��(��@)˪ .��+�RJ��\.QZ�Wi�Rz��&+ł05Z(d�w4�5�VM�]5M�(���f���D�|��x�_0x�,��?��U�n��l������>:|��h&����ZיI�z6��`mm����;q -������n�z��X,@A�th�,�=�տ;z�g��&5 -rbE-�l2�:��$�����������3��?�������p>~�݇�9���or -�3%�]��;./_��5-�� !�I6�%i]Od�4-�K?ebG<�9k�����:�W*�J���d+�L�R�,..f3�� -0�(��YL�/& -0?� -j��q���96��%�d�㸁|��D���8F� -<��d"�n��d�<Dl1�<�q�1%Jh�W-�q�[��9?��B��#��͟��O�� -pb`>�%K� -�-��,�)��$�]XX�4m�P,�����r�X,����������L�kg -0A�+�Wf�WWWWW�2W�}������3 -�iqE�X��;� -��s�濺z�ʢ��r�����ߦ��D���j�_�*�MS[�����]����������1��� -�f�u� -�IV��T -���� - -�D�+�i$�eg�����R���ua"���x|�9o���}`m�#�b -����s��s��q`n>! - -������@�����)�|��3��Fp�� !���U^ -���&�2�+)~������ ��x"��=Vf5�0��[~�+Q�-#����ls�os�����X!|��]��W�j����
- -@v� --����\�h���0� -��R���N����������ۇ�>�o9|s?iKKW�T\�(PI�����bf1S�� -7O -i1�Y�t�iZ��5�<���ݝ��pΜ1B�5B��/'�}hr̦�4����I�2�.��O��K�7v��X�{yf�T/�ծ*��v{}��{��$U�T1�&T1ƺ������z.�� �8�IM�a]'�\�:g���\NWո�sc�O~��Qa<��$I� % ������S՜������ -�Ĩ{kɘI�5�����̷�
�BT -�@��)��6䏵;�1Vs�`".=�'��l6��f~K�Z -������(?S��}�/ -o�,�B����z-C������ -ER(�2�;�b�XT� �T��r���-���}�?4)�;j5Jt��`��֠&eq��F��r�m9*��X��r��Ps�RJy O��)�Y�=��1�J�6�!�0U��"��_
Fu��f&�3�Lef�Rj�Ȗ���1�? -H�bc7H�QQ�s�<�� ).<�s/��|6;��^ -B@��� -c�m� -GTl�B -{[� đ2��(�B����Fa2��Ţ�{�l�o���yd�U �0�Z�Qe̬2�5wh-�a��kFe�)uޗ �0�B*�R����m1�Ұ�L�7��8���
�����1a��F
BJ�Pj��C���r�|��/��!@0 -R�K���]���Ks�7��9�¸P�Ɠ�d6�.��'��`r�5��d�����,kooOkv:�t�> - ��� @b���q(I�O���d6��g���r;�Iv �lZ�/M -d��h� -�ew~�ɴ�2�� - - -� -u��<�����
x -�����:+3�RC>IH
BH�J��r�;d��p���&��~g�'���_a��<0�(��!�<-aСs���^y���_���w��� x - -b$ -c\��;.R�W��w����b&�x����B�Z��
�܈! �(��TKB�����<
p{���;����
�[1�R��j5c�V��*F��f�CU� ��:)�z�P��k�Cՠ�Bk��a��C��Ç��a���h�b�����}��uU�u�o�At�cuC���:c��z�P�F�a0��Fh�?��7�)�@`%w�Q0 ׆�xo0�uo - -a�/݂q�YC�Q�n����R����ެq.�cX�ܮ�7�&I��A�^}�����9
���)�/�1��a��c&c%f��RZ��8%�mB��f�M��
!�|�=����(5��g��8r�Y5��_������y�a�f�X���>t�!N��F���; -�a�6B(} -���\��T�f��d6�,� -Z�|�A��_���W/����EI���-$�����$��d*�,�� -^�@��X��)�7 @�\N�a����0.UF��x6�ϧ���ӛ -�ò/��,J��`� -���B���� -S���2�LJٰ��<b���q��-Zu����9m�5�uk -��wpp`ɖ��� -�e����՞x_��ހ�>����[�v�R�f{R���/JP��W_???��e���#��$��(c��êU��n�5�F��(-BX��/D$$L��i��UJ)O�5J;�a�ʨ�8<�Ó��q�i��9�gJ���<�R�)��HH��,T3ͪi2J�/tJ)s�Ve�aO��PW�XX�� -��5���a /��Z�/� -@�2��dY�i,�M -\FE�J� ��v}��H�˗ϟ�|���[��VC�~�0ذ[c5�1�t�l����ѐ}��3�X�9C�H't8��Q"�Ɔ��9c]�j�:5����k�ᐱz�1֫;_|�lȘ���mBt��u��G�aT�Na���y�C
ʆ�ukn��gG����û�� -<�wMy�Ľ��h0�. -��p�m -�B�/� -�Ӟtw�.�i -��˗�^��=;�M!x9t��;O������_���ߖ� -a���IMfr�*c
���q{G5��T�����*A!�\��MS��S -�o�Px1P��H�[� -�1��ʀ6��r - -��Eo5 �PJI�[;� -�������w`-��A��w��\�`N�R<R�G��l��/N����|F ��B���5 - -X-�� -|U0(HB0�9P�\IǸ�s0!m�z��x:��g>C����c�"�v+D!$\jv���kZ6��<�we�}% - - -��>�� �b�ʂ�(5c
ƨ�0���<\6�eZ%�BJ��?���\�� -5)�O
�t������h>�P��@n�?-�� -| - �^� -@� -qI2���d:�4�����|H��(��s -@Vn -"� -1i� -p���N@A -���mJH U���c��H2>Odz�bv -Ĥ��F��h��g��bv<_����x4ϏO����|>�/���h:�/fNj���l>�G����|>��Lk�~�;�-N����|2����d4��z݀z}r���ŋ���s��>��`ix[�{�V��mѕ_�d[����\��C�0)l��f���O����;�nG�Cg�XX5uX��0Yä�4>?l��&3�i�mV�����PjԨ�5`^��*_+�U�o���>�������@nPx} -�0
�* -�% -J#E��> -�2�KK��4`���^�^?
(��3�V��f��u\�a�[��j�J�����~}y�l<�@�K!��
@��m<>���;cُ�Yk��x -��)� �#W -� -����
f��95�j���c����;���F����r��df�R��:
Ӥ��rs��t��� -�[�/��x -��rXX٩��<���v��V�`��4�?J��u�����J%�K�R.�HH�0!TW��j��� -��/� -��V�� - ��z -�J\7��K��=�3�������Fa�W�h<���|6Y�O'�����b�8^,N����b~<��̏���l�X��''��|>�����|~||<����'���|>;>9^�f��|:��&��l<9��`<8�^��8�3� -�[~9X*���� -�B���aR -�D/ -�"��� -]@�G -��� -�M -�� -��`Lp{�WU���$` ���J^���løa��X����Ų�Y�R���s��J:ƸT���I�eʗ���߭ -!����: -����M�_�W - - ����� -�x(� �0A:-���t�?�`���` -�RX���� D�YD�b�� -�^���t -���^�N�Ľ-~�ʵ?X>�A��5?���p���'� ��&��������.l�� -|���!( � D6܉`�!�����z�~0���d�<� -` -�B @� - -� -�5 - �V1F�D\����RB��\�7�G��t:��@&� -@� -����+��������y �������_N��S -��@��qI�"A��z�A�?��ޣ͏ -����WώX���������qJ 5Wm� -`� -�Y|��Χ�=M�k�f�Y%#[6���Y�u -`=PW9� -z1�k* I���J�$�D��^�����3���U` -ĂB � -1�J��$E% c|�'(�� �$H�hL -BI��� -���X4QIHBI��$E�`P�������$I�Q)�$)(y�ł�
�`0*a,*q;Ѐ�d@�E��X �!"E��0.I��n������h<L�T - -�B���*�M�6c0��R1c0�FcQI�E��_I�$)*E��c��a*&B@�P����3b�X4&�b�XT��`,%�E�4��1���������?Y�hL�$� ��`L��h,%���}#� ���%)����z�������5 -��x3 - ����~3�ɴw�Y�+�f��9�d9�d�ٌ,+rF��om�� -HQ)*�d�XHE(I17`T�x�O !�E�F -&��{!�R��B���H?�qI�RP����v{�Ao��G� -� -SIa -�R�T2%�N0�1!�R�b1ULA�b��һB��<�J&a�T*�S�N%�?4�J�8I��b1UHAcP�F%I��`@� ����)���8�-R)!��R)���$#�$X�w�n�����|�� - -p
-���(�`*��c\(�X,��TJ -H�8��|*�0� s)�1.�b�PT ��q(�X,��'Uq�H�`P�0�q�u�,p��c���E�q��@��D����d�ju��0��W�m�w@D!t��m��<`YW -�o/*�O��l4�Z��uC -\��H����@&��qQ%)#H��������LI��B��S�b����= -�ڵ4-���7 - -��e? -�bp�X��"&���zLn,��6)qc�T�1I����r�?*B��mR, -�P�*%E�
���Z$8�L�w�0$�q��?��.��2)J��X�.R,A�wܫ�N0(B�d�ju��:�~�\ -�쫧C�qG�u���KF�R)]xP����\ -��rBJg�0�1��k�e]f2��!s�6��˦�wx�;��(U*�Z����z��]�K -���� - - -D'�R>b�����MTF(��T} -@<�!I7���k�n�^�U��R -�#�!�4� ˮ�� - -���������rF�4�Vso��lZ�@}U����������}���Ѭ|^���:�;-�(�U�rFV�? -@F7
�W�!���������J%���릪�Urj.�W -P�k���4�2���2-�U�Z���mJ�d�鄐2�01) ��\ަfդe��I���J�i�)5�ퟗM�V˄�2��d�n��뉝�i�2!�H�d��]-S�R�q8��e��ߖbR0U6))R.SR��� �\&�j��5'��/O9�ĨT�^�wo -��X��pt]���-]��_����CC��z���ꖪ�76p<_ -��}Jr�Ω9�z��:�9}K��^��\��՜NJzNͩ���[:���z.���>Tu����ƺ��T�D�'��qB��#��9�s%o��l�7ԭ�4�ԭ��n�� - -0ØP����n'.Ոq�U�)%�Iͪi -|�x
-����}���ݷ탽L��[n��hYN -R�Jd9�`SQڔ��B�$�u! -a.�I� ��m����W -�������P�w��z�o? -�b�� -R��� -`�Vy��g5��X����k�����U -�$G�Q��7B�IN� ���By��mBUR�U:�%�nnQB� �O>��]$�2!E�D����t��r�LHy[?$�\&�m�].B�!*��#P - -vS��R����� �͝J�����FDr��I0Ts8����� -7� -��2����;
�^آ:����}������DH�0���6EB��lH����2-���� !��ER$4Gȇ9B�}tR.S��L!D�uJ(�d��i�L�d��y�`�D0�8��$I��I��ɰLLB(!JHM7�3��f�4�F�!�ܭ�4�A�p���$% t Ώo1��KU -"_� -�`� -�z�WI$-{7!��@ ��p �j�y�eN+kiV��4-{��=�n5-�̺����������q -A���kx�vl�|3�����V -Z�E�� ܘ����6�l�T -�mDa -B(IB -@�ǹ��� -� - -�y�h�Rv��ִVǶ;���V^�,��<�5M�p��w���@(
@:����=�=��[r�����:�o�4'@(, -�e+��?n'�� - - -��U�-����zE�{ -T2�J��m�a�&qC) -!.��",�"�ڿX��B��?ĸ��2)��1�m���L��K�X.����I��$IA��H��a��Rz�X��4)�l�1J��x\�b�T*�t��UX�
F��d<�c�b�k -�F�#��Z���3Y�Pj��
F)��$š�åR �R�����x<��'��t<�������[������6�;�� -V����!� -�0�1&LHcյMI -J&�0�a -'�b�P�E���$) ��5#�&��2!�����T�f��١ -`C����"�x<�� -�T�q&��?N%S�=T`�JbR(`�!��T���Q!L%a�U�L� -0�|�gb�Ę�cL!�4M�H�������x -EPEJs= - -U�!L�$N� I��T�h4*��$m@a&S0S��`��rw��$I�Ba�b��ab�%S|G�P��X,�Y -p� -��\_�' -���%�r9�˳���V�������^BʕJ_�U�U��2�
! -���߶m�����d�e[�� -���u��~���% -�@hc� -a,%%�� �� H���zC�
0��xrh����8��cL��!�� �J�^��kuV���r�+�b>K0? -X��p5 -��Ӏ���w�j�ų�i�ڏ�� ģ -"@k�?�����+S�p(��*Ho;��[ -0�` $w÷�]���7������Q1NBL0&�)5�F��4���$ ��dTj�Vc�n�[�ֻ�z���������[W - �@E��`��D�k�� -�9���(��� - -��<���T՟x�*�M -��~Y��@p�%��/��_ ���յ?M�`@♂O��
Nwvvc,�H$r�C�R�U��n�_�n����F��`0�;�\ -�("o�HOh��D< - -�lr;� -!�M�3_��������=���n}���o^�1����r��+w�F�����QI��}@��x�����
9 -�P� - B� �p�%�j3�g ƫ -��U6n�� -�(�P -���.z ���@0��O=`��` �������` ���{������`0�E��0�L�RS~�MVe�l4B�1j�Z��z�^�?F��`<�Ǔ�ty��j� - -��@g,3�@p�ϿbG_�^O�Y���v����t�����p8��N���D|3 -%�X�^��\2�J&��L&��L -��J�V(��ЊaPZ��^���Z���pJ+�5h͈F⌊��R�+Z��Ԡ�`۰���������������<3
��o���5@>_�J���x�8`�������J]�~=1��g�h��JŠF�0*��Ш�^(ֵ�n+����N_O�����hA���ۋJ�@? -#��S���+�eb��(����SiE�rt��^J.�TE�,4�PH)E�k�V4M+hZ"�N��(�Ŕ���i�� -%���+ - -iAT��#���c��w�����X�����/p"2 - 1�������/g���� -```2 - -` �6�����9
Z�#Zm�f��!��&c -ժe��4L�~�g #��nJ�nT�^Z -�� -k�R�t�^�^�^I��z�T*�B�P�W(��J���r���۷�|>�_/���z��/ -�B>_(�B!_����º�^( -�w�����B�N�0=�|A/�K����|>_�w��_��biM/ -�u�(ȿ���� -��z�T*���QE�uj����A�xxx||rr2:�G�S��pE �~��2�����v�x - *�p���3&�G -۱��؋ `&�*��2.l
���z�� -��dr�R\]��w��X�[�7�T���y��k?���V���J�?�G�''����������t|z~6����<����O�NOOç��|<��Fgg��ӳ��������˗ggg�/������g�g�ӳ������x<��������Qc��Zmk�D5�����x�z:��� -@?J�F�V�"@����#`��X�L�:c� ��(ʺV1j��l��?���� -'���ߴ���7��������>�������
�n�ڭV���bW]Y�2��b�gϞ=m���6��"�ѕM�|�3��/~�1�dR�/����w�����E���g -�4����u��!nL��-�e -�#A/ -�4Ln������(W���I3|O�%@{W]Y��"b - -�BI�P�R�K��^*��R�����B!���J}����ϔ��+��VB���ۋ����½RI�z%��҇�����z��/�+���ҽR)*۬��/I���d4�F�ӗ��7 -�^ϲv���1c���?|����'�}i=�5S�eM� -�i��]��,��cfY�i2�v�1Ƭދ�j��10��_���iY���u -0��q�ߓ -C�2�94eR�Lj� -�� -���˼x -~����a1}[Q�ںNa���
�B+z�V���p��m�ʺ�W� -���i��Wt�Bi�s8<��j�Ri����������à��+�sP�M��~g?ZA�j -�\�x2�����ɤ������ -E��������0:�������~7g�3L��o��o�6�Y\.kʵXZI�����t��i�AAo0Ơu�� �H�u�*�Y�P��=ՕE%�Nߊ-,,\�5��x�MM���J:���.�x�����4Y�c3R�)��/{���;�d;��sMQ����z��5�R����E-6 -ZE������������P�s�e��J����$��V���n�E�Ὂ��?����V[���f���ō�ӟ�l���� -`�+�.����&����� - -Q�e��,*JZI��^�GYZҔemIQn��m!����1��1V7M�,�4� `�X�_��:����(/)�f8� -��2Ӿ�r�� -
�t^����W�_��j���
�:�>8����gŦ�7��s'�k�X�3�nݼ%)6������k7cQLw,�[��jڲ��0�t:}3�ܼ����.���bj��3M�|�1Pg���2f�ˊ��QZ�� -�B���Jz塞7>�u�Rٮ��*zE/��C]/�t]/���t]�+�?��%��2�]��J��X2J��W*u]������ -�e�z*�X*�zE��W�0*�z%z����늢h�aԶ��px0<9�Nƣ���������� -J!���(�����,*�?Vo..*������R鴲�|]I���^H�o*WV�W��͛i%�����B�c� �F��4X���=tX#�
ss� -�V
�G��
z�_A���` -J:�1Ƃ`-�Ƃcl��z�:� �BAQ*4d -�.��&�#ڶ�:���W�y��j - -_�3
~ -�VhР�N�̴���J -��� -u0�Ao��&c���=�Q������ -��V��� -=� M�N� -\/��t�֭��t$6=z�Y���5 - � -�����9]���� -TBf�&�&-�1 z]Q5eYQn���صX��h4��X�� ~���Ư�{�{q��hG���q���0�,x�/�/����:���e�A�1��f,��3M����2�ހY,8j�^��1�v~�`�1�^�/ٯc�^�C�6PJum�0X/п�GG����|0�/z���,�ںV�F�ƶ����������h4>;;;?�O����� - -�Y2�&�K& -� (\�甆��W��1++ -)@,�h4&#�5�4�O,��q�� �lB��E5�O(�U -̄@gV�gY�%u}V��~E�{�&P�h��� -G��ڏ�/�@�E[ � -�c�ȭ`�YgF`Y�s�f�E$j�)ʭ��M -U`%R��˲��a`�����@� -0 -����Vw�sn�*qT9QW�Oq|�s�&ȹ����>�]t]9����XD!9>�z�������@tl.P�~}!8��l�'��#�:"#f -T���uM�u -��zA)h�BA���,���tJ&}^��Қ�(�픾�(_��1��#d��=<�D�i2f���ry�\��i�Y�׳>a�na -A -�菶�(�����(�F)���&MJ�1�&c��i����3�xd~��vs%��]�F -���0�Kf2��\ �"�x�>: -`ۈ��@$� -\����2B�+�c�s����w��c�� - -� �p�Q=D��p]�""�\��8�<����h#"�.f9�@��I�(2��XpD���E.��8�WJ -�T[�4��?�T��nj�f�B�p+}3�b `�ViY��hjsyyI�^���0��P0{���Yi -�>��8�m������}�A�蠇����j�����W>G�F!<[���_q�;K�����O�G9A�r�6�]nۜ�9�]T���̫ -DDn��� r�(�s�#�Y� !��E$�Nڈ袯�@�(<"\��� -`���n)��+a��b�榦�2���ܚr��r% -����z���t=_* -�|鞮��J�R�^�P����z�"���K�|��녂~���J���������K� -�~�T�W(����%�TW����_\L_O�Һ�P/����R�r�d+%��=]/�u��$:��P
�[@�i��n7WZ�l&�6��www� -�h�3}�I
@P�*�.��Q�@mBᜐ����Ol�'�ۜ��&ܖ�a�mQ%��Q�s�����@��cs�B���mN�>Q��Y�m�ۮ�fI6K8��1���F�FU�Dꇢ���/� -��W -p� ����.r�t��\��DUm���#��}�#��S�mB'hb�v����sN���Uns���Ml���&��UU%��J�r����6�9b����mr����ܱ�;��3�\Qb۶:_ - 1� -�̗ -�$� -P��e2V�`k�`��QJ��&��7)�Ԥ�D��7EI�c�tl��%�N��Tp��%UÛ�����k-��i2f1`f�QӲ,s'\�&�)gz�V�tF�ժ����L�L�gF(�X`�l���2)�Z�2 -� �AD.��,'D%H���Q8��r���S�m�${�;�����s}�;�p�s���A�D�C�F]G�ݮ/<�؞��}��z�9�H<�!zA��\U����! -��@�Fb_Q�;�F`���g@K�Ҋ�k���P�RVX��]�~u��M#�n�5�O���k~@i��2�e]nSn)�r�f:��K_JIC�Z�����GStsY��y���µ�˲�(�7 -@�^g�eY̲��@�bV���{ - -g�X2�L%�q�̥��\l��*@"��q?��? -��mns$�'t8��E}�ue -T}Wꂶ���"r���#G�l�q<�u=�E��Q؞�lD��
A��� -�8[���m�`�W3 -ㅥ$��x�P��C9�W1*������ �W*鴐J-*�k��`�a
��P���h P���W����N+�����/�J���֍�a�^*�%��a�A+�����:5t}]������J�� -��^z�W*�J8R�^���nT*�^z�JE��ʷ -��gḯ�urmmU6�T��>Ǭ����mN���MԨ���:��>�9!�h�-Pt�����"AϗnD�k;���s$ܓm��=`#��r�6r[ r�������."G����]��=��� -���Ƕ-l;[�̶�F�ۈhBP w����qW :"�6�ۄ�<�m[%�����GD.l(�/$=��B؈6�]�q�G�=�z��GG���9G��z?�9�ȳ�m��sD��F�����>:�Ė�`D�\t�б�C -�늒/T�4]�ԨT�0%��+���������ۅBi��^X_/��u�� -�u��n/*����t����:X��5]� -��E���t�z*Ċ|>�H4J��V�3"�^7M`y��hʴR��=V��: -z�E��T�4����)��=����&��`� - r����9�(L∈6��Yas��%������."�� A��U�B�H�Q���=�p.Y@��{�s��9���m��@U��Bݱ��[48�� -� R�l@�*)J�2̪0=�*�@X����TtJa� -�Π -A�@i�� -vh -�O�}2! -��
���1�=�Ш -�h
�e10���t0�K����4e1S( -��9����,�<�&Y��� -�PUU%*����ӷʔj�0`L�Kn\��w�s�J)hi�O -D}�}W��p�&Y���9����]�h�]���@��U}�+|W����]D�V�hs�*��gk#� -!2&жe���r��]�w��m�3�}_���$�"r�d9'���`�~�sѷ q]��?�C�A��� -�jT[T�pj���@[�`I�u��t����5��\֖n�L�oI�PX - -���v=Nl��r�$�r?���뻾@��@����q�D%Q�pi쳑�ms����@ヘ.}�#>r��W�]�}����BG�>�̞�@���g�(8G���v�46�ė-��o' -PjhiE� -�.ommU�d�P.k����L�o�_�%��X#|��E!��:걁R`[��oZ��~��B��� -��#v���r�u=��E�j����Tſr]]!�� -����\�{(=BTO�G�!���u=�(���u<�{��/Px�/��G��W�u�z·=�;�@�������gˮ��r�":�C>�B�,�T -�F��h@ctX�:�����������4,�}b1fY�y`���hY�������S>a&{4��%f@��õ_����`�& -B���mĮCD�gDEb����z��dz����#�Dx. -D��(:*��s���|�y>�8��"G�#�mt}�wD]Dݢk# -��(���E�F���yaZ���/Ǎ�6w\�_�N��`R -~X����Q -.D��������U �, -��NƳ�E -�FQ�ꡍr� (<��GOŮo���Ñ��F�T_*x���%���c��s��n��6�Om�6G��{�w�j�6�"��Ll�?u�}B�L -y�V������_��: -�ٔ`4(����BxB��U�SQH���Б��J������ -���� Q��BP��q�N����;�#f}���:6���"�b"p�%�S��9�2L�x}�������pD�r_2{�g<�%�z��o[�k�h;��!(����@B�1窃6qm�?�³DJ!��U%!�/ -�fEW������#r�Ue� z��{j����Ém�Hl����6O�����=�6w -�qԘ�(���sk���ҳL�����M��G` -p���
� -QȁE$�cV�p��DH8'a�q�#G+t�L -� -�7�vX=�0�'�'3@��B�X03re6�^���k��D�� -Ja,��_�0z����Z3����_}�L���`��:����˿��Y�L�R�D<~7�L�2q -�f��FgDն�(�����<L�����kK��>���Ķ��|�sdl��9G��O̹=� !]�;�;G�9��<��{=_���ز���aO��؎���q�OAg;��~�E����\�?�B.(�oۂs�#��o���T9�!@����]ߕA\j6眐�Y�>��L� -TQh!����離TnT�����t��-E��\� -�kJ�^�-\���N �YV���|ѳ¯_�b�YV0����}`�;�G����Am�z����䃳`֡J�!�ƌ�mP; -���YV����Ѓ/��=k��h�z0`?��k�� ���|�23���5���E��s�\��}5x|��7����b -^,�c�zG������}��}���~?��}VgAP�:���k���`0��Y,��׃ޯ�?��y�����ϧ�F<����T2o}*�J&S�ܴ[p�*��a� -f -��'���pVӔ -���i<|�P����P7�����HH���D.O�b�XR���r��R�+`�b8A�y!p��"� -=�B G�=b�6��F�g�m�Q�F�S�X��m��8����r��sGBS��|����9�m�H��:2~�p�dm��%�!A��]� �>w}=�#'�A��F���������� ���� -�(��c�v!mn&�@��j6����' -��0�h�`������4����QE����1l�`��c�`�ʤ���m�ZUI/kZ��X�C��2���EI+��B�֭[7ouK�e -!?�!������@b䪣:��F��������SR�0��*`�D�#���q��h��訏].\]�Lj�'a@:�m�AN�ߟU -�R�p�P(��������B�����TjQ��ȿ��Z\L-...��_�~���T"v�ɿ+n�^L-�R��ׯ'.����BˬgY�������Y,��,s����?�� E6%�a{Аܝ� -��M� -4�� -W��{�8�*i�H��pι��6� ��O?�?%�g�>�6b��Bpz|½��qlbg ��?k��ƕe��`D]*W1�1�×F���"��@dD�Ae -N3G���j>�<�I��2�t��>�=~�o8LY�*�� -%]�>+��.�jZ����g|'�eW�L�a;,�)�8+��{��|_w|��-�ӱ��2��ׅ��顅���Δ��R��KV�nY -d'���v3����nH�˷����,��ݎ��gup�������B �!�)!LӅh�D*Ȟ(�(`�)S���9o� -��1���+���|��U�5%1���$�U�d -�h�QJH�$��a���Q���?��}��䣏ז -���� -+�`hݛ)8��}B9&�R~���%�D1�?��� �e�) �%u�*��L ~�Cq�+~��ǟ|��G}�w�|���������Ț�� -z2
}E$� *�RU�u��y�b��p#I -`[ -�������K)��q0:w')�� �T�hߪu�$�4�믥)����/�L��p4D�Q�)�D��^i�B�X����<��ϝt)�⽬�O>��G}����ǗO�� -+���9�~��eY������zL"M��:��$%���%$Y�68:8��d���5�$ -a�J)ɳ�|�xQ��!P�VM��D��/����D��[����&XP�_�P�ߗ_��kYF{��$P-�_7��G}���hy�� ��q^
��߽�8 -r��{6��f��*�l���5�gY��V��6H�_�)��Y�Ϭ�)WZݲf$���=�J��(Ng�U� ����|I��l���14��0�ś�g� -�g:��Ҿ5#V�sY�~���*���<��f��VJ����������Hh���ʌ���GH�*2D��6ѱ��hr<¾nZ��n�8 -� �{��y;;W� �o'��������ս��������}�����_ԏ�Q�ԯޫ�� ��V,����o�ގ��w��>�䓏�h|��4X�����ޟ�c -ܱV3��d~��ie��:�[��s_���*�r[>tZ�����4 -J�h���B�.:N(L�9�^�G*��")�Ķ�Ib�"���; -���� -=S����/T�Ph?�Ju�T-����"Wy����,/����S��Y�����3?���V��Gi>� @��8�_[`2DCd���$�A?���??1��>a�1 -!HQ�qȸKa�� -))J0�;���1 Da�Rʣ1�D�4'剡~�m���g��"IBJ3. -q�=�R��q}�% -s��;RJ���KYJ9�僊�B'A�!$ -HJ!�;- -��m!�FRRY~]�R�I���}J�.ΐ@bɼ��&�R��$�B�(�TJ��i
"���4}�pQ�RJ����%�ބUN}���� -�š���:�������|���a�U�Nϭ[��~����<��>*�h�wP�XQ;�6a�9ۃ�Hi���A���Hb%8��э�$( -� ��v�C]�_c<��v�ɘ㬬4�-� -�}�T���P;�J]ֵz��|_�[�β]�}�$�ZY��T��ߎ�� - -�H&$�H ���Q�(@�����\ -����d�Y�tQ;��n�Z����Ɓ�Y6UE��*W�t��U�Zf��m��5=�d���U�x��f -��٣Û�i0Hn�
1�8�nHi4�
�������d��+M����V���J�����&Ӆ�gZ��Ȧy��N��.Tv���<ϧ�é��~��z6�+�Bg����z�~��s�ۑ -n&IIr�]B�sA�J��}F. �� a ��/K�Ө�h�q�5CL�*A��Yk�J�$�Q��"BIB�4�T�@�I��Bk~�E�OK���?y�@b�K����b�W �$��zq�ؒ$Q�F�bq'�(H�kR��}p�r�1�qc�c�c�_[ -�����N��^ -a?�!�ͳ@�#� ���|�m3��6g�q���� -�W�M���6�E -r67�cEAB�Ov�R�/ŗBHa�0�q��,$�����Hc���8Jl��3����Y���[��E�_ -�6�`�'I�e6�;��:�������y�J������2=��绶�� -���.2?S��F��BO3�E6Ѷ��79U���2��>U�:92T��?�\��UDD�$c$U$�1xPI�"�k��&�M������M�F�SJ8@Q -"IR �X�|�q �R/"���K!�� -$� -DiRяx��m�� I��cI���@���y� -���R,�]�d�Џ�3�{�T؏""cP����� -�����!�e��@c8.������\n�|w����P�]�W�P����[Je��2_���y�s��T����D��l6�T�K�`�:��R����H ���(�<%E}� -�B�i��;��� VW���d -�(0H������G�;�� F�/h��9�uJ"�o+o�b}�� �wJ͓�w���TXųm6H#��l�N���X���2b�aJ�]S��.�m�cB��@L=��ŝEJU4\.=�R_����ۇHQ�:� �1��D�)�i��=s9�βp=��K���_������rk�}�3��Ync3�V��Lߞ��3�R*�fy�ua�}��5ӷu��<SY'��-���Z -Bo�������aݜ?/� -J��u�c<��p_V�!��]q�.���C0R�1@D7�����H��TΓD�q����������/[����Jլu��Q�����6�P�LO�RyњE�gKX����18N��K!��e��H�|NUV-2&Ky$��
-A�Se�ݻ�_��b������) -B+٭����Vb!P�)�� -f� -��<�T��$]D�)J1$��!#�r���8�a�(�H����;�Ȥ)�z�z�i�C����^Ʋ��4�z��N�_���i �v�p���&���n����۾�nZIP���U�v=̊拈O��S]̦ڦi(���7�i��Z)_k_e���+;?T~�t�c׀��~!HVQ��3�?�k"`�L�ܤG�}�ڊ{M��u���4� -c�v��� -�bh��d2��@�"�Nj�u�� -q4�l�� -�""wV����HɌc��R� ��.(�_~��e��8W�WJ.�2���\����YO�?eY��l��J��|�7C�1��g)��R:�kw�
|:�j -и��| -p���2�+�?mp�n*��;j6ѓ�bR'�.&��o�|_���4�٬���7:ӳB+�Z�k��gY�T���lc5<�JND"��h����^��Տ1$�s�Ό$�(����8���!��|kK ���( -��`oHD湩�]�q���&�~J$�i�|�� - -Y��|�W��X[�<�U>�3?�k���Zi�f����~��Kn{�w� �v� �GQ/���% -v<ϋ�(���GQ�EQt�E��=�mg��c[�֖w�u�5�Cj �kGĞ籭-�W��)�P��H\ -дM��B�����y -0H�3��P4���l<2B��������?$�<�렮m��@!)x+��旻��r��Z)e�E3_Y��S�3�T"p��k��r�a'"�yp� ��j���X�44�%}�� -_-��-��<�y���2�\���O��=�3�������1 - �͊��/��6�/�Ί��]t�Pe�?�ꢘ(���2���<�����dZ����o��3��oa��ȶ���Y9� -��Ji}�9s��CD4W �~5"S� -�`'�r]8�5��fc -���k�1���k�y[����h4x��y���p���kl���K�~���5���k3��:�8D��d,�֖m -��u�+Wl�V^�R@ֺ��Z�DMt�ɲ�>,&�ȷfw��Y�l��Z�j�g�h)�e�_^���ܟ�0���
i�}�u����k�3���s@J�.%^�������B���0f?��Ÿ>�v�Ā�
+�""ɣ�3DH�B�8����$x�C -��-Y�A�V
w"$C�7\�A���W*�b�
gM�Bʶ[�B~E����k���"lns�k��1�(��B�c��1@ ��fgT/$v9�xs{�a������M�l6C�����Y�ey��T�t���;9��Ĵ%�֖��
�[j - -R:(��C�!���ק��nBv -L�D)��HJY�h��I���0���k�1g)^i�O�<����h\�͘�����5�/��� -:�5w���5?�̳��<�<��1g�q\��d -J��˔��SS -��]ֵ��Y�<�{�ί�a�Z�p�e �m��{�cί�0 -��sΣ��("�c��yEQ��� �C -��-k���?�=)&�Bk�_�Z�Y��:��}u�iߟJ��ٮ��Q������ϐ1��5 -� -Ad�y� -!��D$�u��P�J)�8g� -J�C� -�pay�$����&�(��� �T �x�l𬪆1�n�Õ��@u��yث�rù �����}� -94�1�͍;�8F��O.E�瑭o8ζ����V- - -q{\ -!H�i� -!�H����嘄��;6� �|D)�!T^b�>�a�I�@�$5|���S��M>;7L��(�� I��i/&� Zwp�{Dfo��X��b��R@~�s��K -���8|�����5���2� -"0�0L�%�x��m��\��vI -�=� 䜳���� -�8�h���]�}ܷl���J�d��> -A��Ȍ�d/��$Ipt -�s,/�-���a-�A ����q��XmڊS"�!��� -��������4t֛�ܱi���� - K�0��6k���zse��h8
���K�����]j - -��& }%�јmŅd ��T�9� -Y�������2�������'�O�C����ň1�F��A� -����zAxA�x3I�!�#�(0$R$����1@�)�h2n�A���=*�v�q� �"E$h' -"�$����D��H)0���nƈB�B���p��EI� -D�q�|cʼn���W�b@ƶ�v�B�� -!1�q+��� -a��4@$�E��!�͆ -k:�|g�H��DB��< -QG��B�㽓 2�b��ѐ����K�v�#腜Y��� �8��w�/���N�& 3�y��͛�?�x8��w�������g�^������?�y����7o�����?�z|p����=�w�����o}��[����o~��o��Ϸoz����/���K�-�D���>|����gO�<y��ՋW�^�~����g�^�~����?�z�����^/����W�^�x����gO?|�����!@���1���i�P�
�{����;��Պ�>`
-/��|���������a�p���:������%�;G{8d%A7*��`��.��'���\�J������L[��������y��C'���)��s��+0����N8�Ѓ<GT -�<� -������/�M�ӮTh��C -t�����n3F��!c�1��V��P"�L��6��3�fm�5i+ -x�go�I��1D���o>جA�A�J�6w -����pT>?v^]��6%���lg��B�*�[c�=U$�. -��٦m�n�@% -��?@�N -�ޓ,g���CE��. -�P�"�ؕ�:�,��\��a�>�t -�"�=����`�I� -� -Ң���4Me��,U�G�:��8����fo�(\�g��h8�կX�괮F�;�@�JY`a1��,����Ӳ,f1�l��b;�RJ�A -s���Y�
�f�5e�s���6��b��o�H�2���I8�7�%�T'�B+����F(�t���� -@��-�Q��6Ww��� -�?� x��w�?�0�{��덦�0��ёn�M"e"�,��M�M.[�Vw2M��n�Nd^��T��{�[-�;���h貣����Y�&Y�6˲m&�4�I�.�卆��h赦q��i���L�$��8MSǛ͌h�9<��r>��e��p8$:��z���l��(�7q,cod�H���?��$Qq@�$i*�L�5�X&q,�x]�Lg�Q�m�z�^ϵ�U���\ -W��l40�ѻ*�Ė�7)k@�o���8G��2e�*��|��� -�D`�v�4m`�� -q��m�&�M[gd���������?t:�����G��͚�F�Z�9S(�Nz`C�]՟S���'��}���#�R����N�ʀ��B��x>�l�<���.��J�� -�p�ZF�hF���ޯ��M�H�:g�L�Z&�V��
���h�+V�,ɒ$˒DQ��$I��h��9��d*S�� -xd��8��&�L����ќ�*���eGQE�����j���r��h�I����ꗂ�L*FS�d*�HR��$QB)�f� ��j9�M�C�u�!����2���8@�qs\� -ͩ�6p����@�宄���Lp<��(��'�- -�@�^?ӫ��&W��� -0��$��Y�(�`�d*UQ�D��b'��e��2^o6qEQ���fî�2B��:c�� -��+���������<��a,�Ó�kϹ(�gYX4���}�1�3 -�J -����ᛓ�j'����?~���q_�{��y��2���(Z�(9*���h�U;KR�([�4�歺ӝL���������$Ɋ;�2�a�����d2t[G�8M�Tx�,�2�e2M�TF�;�&s�TL�Lv G��$��x��F��B� ��:�e�&I�XV�ղ��r���/� -)�,Q�m�$۬p&�i����!�*�� �g���8z�^���4 e -4ԸQnW��g�BJ��t� -��� -�0R��p.�h>�Lg3���u���]�a��0��h��0ZG��r�Z.���hEaь�U�&\���l6�t�u��:�Fr�(�H��Ni�jyݑ�.��e���0�c)U�@���?˲,٦�,͒,�UR�&�L�X�q�Xq���n�iQjY<W�j�-8�� -�8@�|�,x#E`0�8( ->�@ -p -�����y.s�R�뺎��p8���y�\�+��y�����q]p\�W��u��t��G�j���r6u��빮�2�i�-�9��,�t]�e�>��LƩT�D':mu���t�Z��u� -R��Y��4��X&��\GQF��t��rZu� -T��Y��G��Ɇ?8��X�����k�,@,~?��}���Pt2�X�M�%�@#_ -0~������@ -���\a�s�N�nw:�͖�0��)�|~A���mN>J��*�m��i�m����t e�D��p�\.����kQjY�G�P����� -t��p�V�mJ��,�<zqqqa* -py -���F�F��h$ɇB -��C� G�~����������Z���}�ߌ=D��bx�W�\J���]��f/8� b��|��Z������!�}���x>v���� -���+���U>���f�5�6�K��� 8_]��W���b����9�#���G�y�#�xb]urR��}�wx�N� -.n�o.̋�<�6���� -W�r��*��H�mě�:�2�Q���M�^/U���z�ެW��f���8�כ����j�n�U�?ZE�p���ܬ���ro6Q���yE�<�Va�Z.g��|:M�]V�2IS��=GGG�s���t6��(��%�q�2I�m�>T�>�f�3�A(�L%I*�4M�T�r����r9W#�uB -O��x��a`��8��8���9�c�<��B� -��&�����U�,����L)m9����!*�x���<��� �g -� -�<Od-���q�+<�qȞ��Ï�Jb��%ʻ�� -�8�֛u����7I������ĊPEa��(����|6�ͦ�n˚$2Q�4M��:m90��f�e���:��Ld"�Ja�����Vu�,ݦ�mR� �$Md^�r��֫p5������q]@�j�����z��������q��JB�z���<�����"���^�q<��L�� -Wa���Mś�Y����)z�ěu��u�@A�4V��$')��XFk�̵�T�-�8�U��u��o��Q��7�x*v�l>��<w'��O����i�N���r�c�q�$�:γ4M��ܦI�m�4M�[��7���i"�L��� -�U8�M'CieqK ��N�}��a}a ��6������G�N>��n2���q��ϱ�T��ʾ�w -C�d��#����G����o�S���&kvخ4z���� - -��A��
ʀQ�xO� -���h�N�X.c�����±�_��#���D�x�> -��T�XmS�m�o�ܮJ�$%��Q�z�/PzbI�d�Ru�'I"�L*P�4Mԗ�M.��Mo��:Z�a8��&�I���r�W+B�z�q���t>_mb5(7JWLɍ$y0M�o�v@��#B2I�4��Rq��0��&��q~Řrc��h8�q�8�V1��Q�s��6Y�G��[�QGu�����=:��Z;�/������q+�{���9��Ul�<�m3�,JI�����TX�� -R��$�HY�b)���֛u���d�u�p��B�V��Nf��JMI'ʂ\�*&Y*��m�n��v��'��,�2�6M2% -���R&2�ěu� -���=�i�V+�v,p -pa�+H�P�痗��} -7�$QD�TfJ�#M�c�n`��oI�d��(\�4U�^I��2��q����z����Ct]���n��Ro���d9_��0�b����3� -͏$Mӷ��e�R.�ҜO���8�!7�( -W��h�+�U?��r�y�< -�������I�������pw��� -�uo���e��2Sv��J�/�Y'i*e��q,�T�7�;),�B�J<MR���*��4�I&3�
7�N�`�h�Q��p9��g�Qw8�v��H���L��0��(V�y�!Q��I�m��m�m�4����2 �Rn�q�7�p>�O'��c��u�,D{|��CD����kxs���=��o��!�B��x �=\\_� ���^�X,�� ��B���O��~J~t����@"_y�_��B�jqǟ -�0��M���8�ű:��$7�H�8��*�� -嶾�����M -9`��M'3��o3��jp'��@U���)I�L�8��x�j��ͦ��d؝�&� 9:����d:��;�c)�C"�_�J�Ͷ�6ɲ�:�TU�T����L��F���r5�NFC�Y�����V�g���^�V
�Z��U�gU�p��ɳg�j�zf=ӫժqV�V���j���a��I��>㬪�~V����ꓳj�Z՟�Uu�Я��=9;3�'���q��^�Z�ΞT����nD-�W����t�������Ç��z�����D�U��W���=9s�8�z�<���j��gF�Z�儞�������OlT�Uݨ�U]?{��y����ceztxx�^���?� -��ӿf�j�Z�*�4k5Ӽ0�����i�����i����
f\\\���E���4��K����ļ|}��v -fo!~�������>zO�_(�y������1p�? -|���g��X�X�#��p!Z`��?�)��DZ�]b\c|� -<�Eu�xcx�;��1X�!������@\��i�7B\�K��c�-g)(�2zD(k0��8П�T*�J�L�X�Bm - - -�k�_|�E������wk -j5���V3�kf��\=ڬ)��0/j����~�<9999�.��b�W���~ -�h��2��=�d"�͙��s��4MҴ ��LTa �W!�j�;��,O��4M�[�M��N�L*���X����|8_.���h8��dBiݢ�7���V\�G�P�I�S�dY�K���uA�'[e�&I�ĉ��(�VJ����S˶�ݰ��(�it 0t -�4H�R) -j���s�v�������K��>ztj�f������*�����^;�����������i�� -v|���w��*6x�#�n��h�~��w;x�������ɩZ�V;���D�NM���_�͓�SE8<������jf-�%Hzrj��5�4k���f��yrr�i�?�����ח�/__V*%�N -p�p -<=������ӓZ�����~�<>>̓��Z�V;������������y�f��?:>=5��ɧǟ���o////{��Kz/ -���l6�î��v�]Ji���Di�)cp�TTe%��ɷJ4SL�,K�m�!L�$��C)7�:ڬ�p9����Ӣ���ܑ����b -�e���|<����� - -�h��z���w[T����Enī�;�9p���|��3�fq]�?!'#�k��8>`�.. -��|q��}��jZn������ - -^M�-��C�Ժ��x��t� -�hob��|aAGP���,K�J#4�fY�n��2 -I�8��f��r6�<���Am�Sl# t�P�a�i�� -D��(IU$H�$�F��zEa���D��PJ)BDD|)���D�& -PD -�� -aebj7Y�Y~���
�<�(W�D#BHI�h�BK��h�{�4m�ֶ�H�h�L5�V.W*�T��@�Ѧ� -��5�ux�Dh�rP!D�� -!��m��- -%��ˤ� -P�U(R� -po
�{%y��E؝ΗQ��&Ie*e���L�\V��֥�ѝS��*ѝ��B�j��v�M�<�����ަ9Y_��Uq�x����c�8O
R)���E�
q2�ϗ��f�Y�2ڬU/ ˲���eY�M��j�mw&Ai��q��j�Qn֫�: -�����[��:_]]������M�/~>.��#���L�iq}}%����=1��ٛ��Mp�&�駅@~'D��B�c!�����?���ĸ��?]�x-�V�B"��fq��� @�w��B����M�x���?���J���{{{�r�md�m�l���7�^�^�x �� -��k��� �"��7����]����,?�����ij�x#����o��7���
����l�h�F -�4�hځv���m�ឦ��5M{�=����ޙ�����}M���=��T*�J�ҁV*�H�T*�K5M+BJ����i%B4�P+R�4��H4R.�J�q�D4�����o�����}M����RI�>���R�h�R�h�A�DJ%�@��ȁ�i������ -)�RS#�� -��Ѡ���$�M�h6h��x����P���h6�
>
�l6)��Jʨ�l�_`6k�F�I)k4�NJ�4��v`��D(!��f)m���BͦMi�RJ+�n7�/5ڬ�l�Ձ�&���U�K�aS�H��`_�W��A�D(!�B>'����y�5*�R�0���X�6����c�}���,x��L�I�z��|�ZG�$��wո�R���"�W�:2{��n)Z�*�o�,��,� -��۷Y�v�[tz����M�4}+o����$�&�\Ǜ�&���r*<go�$�nsEb]'�N��p:��W�U�Y�7�:)����`%� -�qќ��rK�'�=��9@G-��;=t,���xh�v��1Q����=x���`�R>�a���7^��/��N:�#XW>�8r>�. -�(���t8�鄐O>� c��s��BE�s��'_Q�od;��3G ( K?�#��N��&8�;���`���~��`��ŝ�_��'��;�+��f�V�CJT �@�{��i7���)���UXo%�
�=)�� (`��Ҁ�w3����*P2M�������� -�Z��]�^lf"�6S{�B˄���i�j���J�6�
v�mm�w�9��h���i~qc�P/4gj��Aa@i�6Y�RRz�
x�B�D)0Z�\��%]����q���ҶmuG
�`L���� -j��_�������
��vc/���
������:��J͆�.�8`��V�*0��*�`h3v[-n��|�� -P�[ -�+?�j�[��q]U�������s`1ƞ���k�P8p#��; -��0�N��_�c;"�@D�"��C�A�#�NO`���;]��)W�F�1����c�#v�B��E�` "�D���+�W��߷��� -�!�Cp-|_ @Q����ϼ@��,��/� �s�������c_��(1Q�^ !�@,ĵ�}�� -!z ��{�q�������U�1F)���h�2��I�|@���H>��Ǝ=��/�c_����`1���Da��\!���?�����_�Ԗ@%9 -#���g�wY�W�ѲZ��-�zbY�����g�a���0,��u�Z=3ðò,˰ξ2]?;�Wu�hY�eX�eg_U��e�eX-f�����<;3�9��0��u�2����������aƙq�W�j�����~tt���������Ç{{{�
ðZ-�^�,�2���������a�;7���ٙ^����euK7�3����qf0�s[g����_�:���������k�vxxxtT��Y�nX���u�0�eXFݪ�Y�L��a�,uuè>�Zw��M -Wa���&�z̢D;�����^���zݪgUð,�^���qf֙z�Y��q�����z+Z�e�qf=�J��V���nY�U��0�/���-�vot���)ڿUW��g�Ό�b��nq�Y��P�,ԩ�?�W��z�����X{���Ç{����� -�V�3�0��egֿS�ƙaY-�+u������Z�U�,��w���^U[� =��� @U�����Yе!��}������'4O�\� -�7�#r!�@��������1��u�֠U�1X�r�K��r�: -��n�g��Ra�q�y�1���~w�m -���h�G3�X4 -��RZ��T��D)�Pt������8NP)����\��@L��Ĉ�'17E���D�/��*�?8 -�3�rMZ+5 �����u���<� -�?v -�"\h��\k�T�e�B$���
�uN4����&�g -1Ms�kJ�LޞQ�N��y����_x�"c�u]����/�8V*V�8G�'�����2� -I�=?���0������w���Ͷ\o˦)�����,����@Y�}�*K��=G;n�������
�M��`���栥mj�V
K����z��pww}IpS���03l� -1M�,�`�����z���֛���nv۪��n��������nnn.���_���G#�;���?���GT2�.?��L9S�P�1�R -�B\��k��gD�c��7�,3|0�3��G�1��/~ "��6!�l\B\�����Ԝ��Oe�`z(�'<��u]��:� -"2(���e��h��^��:+��EA��O�6_�E�|��%_*���x��h��X,�_>S��r��^j����cs��Y���G6^�������(H/?�D�ht^,�b��q�vOE�@��,~2�eF���ܞ}|6>C$4��D?c4�-�B�Ϗ�ѿH�/�_�䟮(/����c��)��(~.��:B�� -Z��>�\��D_-�_�����*|\�L��j}�,wM��e�@�{+^V�M��Jȷ��a:�C�����-5x]W��3����j�e��3؇�����<[��g�0f$��r�^�V7����|�/|!�?��h"Ӌ�������_�?�6��z���6۲ڕ��v�[o���f�~xxX���V�7w�w�7sJQNF�`��<i��1�H��BT���I�����0�����������%�Ǽ�����hZ�\,�/?-Lq���?�/E� -C�1���. ��F�/)_�B��ٲ0/ -��ˢ�9���/���O�?������i��jY|��$3����J�\(Ԅh�O? -� ��w��M<���, -���o㷘��h�����. -� �-��$��wÁ�2���`����%Y㣡D�(����=��zo��~�}��
�8��;Z<O�.X?�� ���� �Ξw>��'�$�-�i��`��(��`4���!on���������{��}��-������L�� ��0Q4 &gC�'E��FA�`�*9�: -F�0F�����>�;o��ޞ��
���.@��3�=�1�抌Y�(#�iQ��"""���Rc���+S�)�</ -2׆�FRb���P����tE�����������G��,�b1�����岠ܘOff����"�HED$_8u]��vc�m& A B2L�L�X,���/�����4WEAs���ǂL���rYhCF�D���(�P�e캮�za��ɋ\O��C�D�WW9���7��S��\ω!%�e�9\.Ȑ1��,^�������M���`���n����ji���C�����˺l������%7���}�/�i� -c�g��x�D�Qj�(�:'CyQ|�?Ii��I2��g��䤌�@OxG��a� }���Yj��R�W�9e�3�Y� CHs2��(>�,��KC&[\�S�i��O>�wǮ�y�x,�&Q!��\���8?�j)�Q���v��4e��y2� ��4QBxND��(1]�,�<#;�Y -��q����L�]%��ȝr"���L�b#��1����y���t:��9�!�\Xՙ�yό��e�� b�3�Ւ$�,i�<�?5�Һ=��xgD�q��c�!�U�H���BDB -R�QE*A,�c$�$ȾN�OQ��s�PQƕJ��$"����i{b -���3��,�g8���&�2��R{?���$jM:�JaI�WI{&hˀ�sMLӐi��G���L"�[�v��_깔3+��P�S��z�OÀ�n��x�C����Z�`XWQ2>4#J%4��v���)�Q�B �On+�Bt�=�ñ�\GT��� !FB�"l�"<,��Pg0�,�Dx�0/�>R��_���~�����j�-�j[U���lf���m}�ޗ{��.˽|z��۰��u��T7u��7O\G|zj�~��UU33yS��hS�ծ.�r�-W�������n�^�V���{�Qt8��7�G�Y�^\^^�o�o��������V�w�������������͍�������_ L��獞=���g�4 -�'��d���y�R���O�w;�뺞�x�x���@Hg"%���L%����Y���g�C� AJ��O�J93���x���3e�P�H/"zm���J�.1A� -p��Za���n��i_�����u]?=�d`��O<%�pUO�ʒ��� -��)�BxG�%F:�����$��!֪��H�� �2�1�'/E�%��5cL`� ��,FD=Ң�t�cϋ�� -����נ9�-���J%cW g�$%Y���Who՛��Bx���xS�/��D -!,0F�7 -�&���R�^\�Z)���3{���q�S��aaS���^{���Y��^P&�s�eA1� -� �<ؔuݔծ�v��v�[=ܭnoo�2M�._n����y'���$�ҋˋ���������ۛ�˛������Y -r2��'��W1�W��)�;92F�?�|\ -��z��v]��q\��b�Zы`bZ��Q��\*�: -D�HQ`PJ��<<1&0��q]���0��c�aS -{�� -D��)2�8�����W����o��7w���f��2gFU�Uٔ��a�z� -mr#�ڳX�
ߛ}ń�L��$:������C�o�{;X�K�b���j[V۲\3c���r~1�|�����uO��BL�Y���|>������ח����l��r6�!F#���j�E��`�a��X=X��rQ4"�y�E����4p3N�"e��F�J���s��G�<��cȏ��p�PD� -"&��d�/�����L�a&g-#���YF6.9{,�b�q�c���i��Ĉ����g)D%���<��h�錯� sA~�������������z��l��b�ݺ���u��T�M�����s�_�u������r�2���M��< -�Ǭ˭�P�)��7�U{br�p�v&Qb�"H�c�#} -"�@T���ȦR]��vW`��+�U�3Q�x���&р�D�J��D)���L�8{/_��_���Ǟ����N��S{��\���6���$K.�B_���p g_�����ͥ��z -� M��H焨�?)S����s6��b�bc�EɠI͒���W�2""� =�c!��{�!QN�(��!���|N�Y"< K�9 -^�}o��[�qy�o��z'�����q�j=O���4X�KI�iP��1E��/�_
�/���/�s�L͜������0_ -2�H����PJ�)�������,��4MS��XZ>�4�='c�_~)rC�Y�x��G4D�q�����5~�s*�|��d����������NDz�n�����1��̗/�y6~iV)�D����K�3S,���������������,MNT,s��:�'�rC*��%��Q- -`-yNT��eF��1��ya��c��S"��GD�ѷ����v;�I
@J�88G$2���<���6���O�����U�ϰxW �(g��_.g�RD��5Nd�Êl��Q]d˪3��e�N�e�n��8��ˑ�P[ - -?��(?<w�D�&0 �L�a������aQ�*�����Cu�AX�z ��{��~�]��u\@�"���2{�%a�P�x@|1�HDx��fX�'�X�"���TKb,�"@4~}���q8�x:E"&����(��d�ׯT�l��Ղh" -!��@aȧ9Db�E��X�����1�(�����y7��enz�u�#�u=��;�7�y�"Bx^�/O@��]��u�w -��F�@��H%�2B�H`v�%�Y5%>�E�f$AJ��pJ����i_! �����2>���@�b9� �R۶�-6�~S)������hח��ח77�������f���ʪ.�]�T��ʾ,�4�S�����U�:!U;�:BO���b������?5u��ꡅ��m-� -��Mm�w�v�ݮV��˛���뛛ks���i��v�qN��: -?$6PD���\�"�^���p��ܨ/%J��E'���R-�m�oF�����ULju����@�<���z����n�[o�����z���ֻ��˃nh�oGx9��5�4M�T?1p��7{K��U��m��};dQ��@�`h�}�Mf -)˲ޕ�r�Y��n���,�^�_���q{q�x�'"�����l��#��Z&�б���|�u�#��J�����Xh�������r�Ow:��w����n�=u-���������v�?^ۑ�/'���K�G�繮���&��~�s�n���v;]��8�o\��NO=�;��0���+�t]��F��^��F8���8|s|����x�麮�v;�o��q:��, � -�;����8�^���{�v^=��u -d���a�E���H)�&ggR���YE�=�q��;XJ�H����z��}��Q$�(��I�����Qp6�M&��R����H������w��Lq�Z�w�ܕu]UU��KV�9��4�������+��P�~���!LT[����s�`��\�)����dզ\o6����K���ݮڕ��)��q�v -"��k�l���R��z�Y����!M��7���f�ۖ���UU]�x���y�Ϳ��ڠl����M�bvh`ߴ��UK ������u]�uSYe@�.w�n�Y=��\�g���n�ݮ6��V�_:m��m;f�뫽��o9�8��%�=� -�w�b��{�����k���p���X�Pu�������v�����m����YA�K��st�����s��9N��=����v����q:~��N�_H�s|j�|���:^���%Y��8��{||4v��n��Ow��N��5��n���:���t��~����v^��v�c������Q��gXЯS -��������[�=��U0,���z��#��y��G�=��]���sB��e�p�=>��ݣ#��;>����q��������=��0fpla�G���y��9�Y<���<��y����8>>��������O��ё�G�GG��^���Z��o: -j�� -�ʈ�����$J���=g� -��^�|&S@��� -2x� -!�1@܋�0C��#cvO��;����㱈X�5
�q����c=���0ECh�±C -�� �'�\�q����s����� -����N�����<�����U�5%t�HfR=$�0�����sn�$QH������`��\�e R�*E�"X�/fs^��̸��@Oc�� ��yGG�8���@��&��0��������ү&u��%��2�����K��띞��H8(��Qx����V�qE|�@�%< -�@ -��ШD&�GT�*�(G,�� -S���W�$�_�VB�$���q����)�b�eTBd4�4����Z� ��s��W�� xMd����9�h -J��yaͯ�����EQ���9��hV�����<_ Q�Ƙ/�?�D?-��W�2�摪���#�i���4}, -��y�{����I���L��o���`��$�"/@!!��8������O�"��ˢ0Ds��w���?B6.� -S��0�1�ѐ�q�;��� b:�e�yj�w��p�}+� -����?D~D�?�}0�����^�7��H����h�����V*�H���h�|����Q0���G�`�cV>?~��9�z'=�����/����/���` |������������rr2���N''�
|���G�h���?�G3��"��}_��}�F��LFv����ǖ�p4����#$F�h4��ZG�(���(�DE0�?1"����=��|��;�'�^�Ě�}�쉾���������ѐ�:���(�&g�A����, -��G�`0���?��a}��A4�� ���`8d��/���� ��� -4���lr�.�`��� 8��������h
���w�Q���
[G����I�����8o�(�ш�O����(�CD��L��A4���?�L*Dڝ� z�+
�������pD=�q�7���x�����7n���'-q�}��5?����_�����_�V����bF���z�ٕeUV�]ŷr]6׳��Muh��K��ɿ<5�����A��K;�쫺n*�5�����q@ծ�ʺ��e��nW�������b6��V���a���Q|=a���~@D9�r��c�����X�%A��Y�"!ķL@! -��K`� -��J� - ��I%��c���8j�ۇv��A�Ds(l&_��EƑ(A��""�a�Y�c -�2� -Cz�D�0ha3�t�F)-�00�0Ї��4e�"�)���� !���s2���o'q8� -���H}��5c���u�p�Z=�V��ٿ̯o����v�ݕ�ݎ!����V��n���a�n���>�V��k�9���O\2��f���U]?=�վ�De͝Cv%��v�m�٬��7�����z�zX�?�<���B@E�Z2:DT��T�M,m9ɂ=l��w�x�P)M�j�k�I�v�S��R'V� -���i�)0R�1��L��1T8O�b�4˗ - -*��H=,�����L�y�(a�i=E����8�8F����9b'��' -c��&E�JT�F -�� -U�+�UD�(f1(�l'}�*���dZk�_�J�L�����Ok�� \�x��t{�� -��q@��n�Z?<��T���oooo._2�����/��/^0@�Q -U�g�� ��J�Q��s�G� -c��( -m��I�����1��sCY-�E~�����'�� C -�.�O
��L>�� -cLn2��b���5 -P���@_k^��7w��������fu�Zo��]�۔eY�\�/���˪��ܒ|���5�|�}]1 -M -�ufť�G"��YQ�L��B/�22M�0EKb��eFD|�tf�z���G�$��H�B@"�"�ʹ.���|�s�9�&L�vvD1]�ZkE���� -U,R�牕B�+5���͜���X�Z�?�� -�I -C���R@fye��qy�|d�}^ -c���i�E -�B�1K@ �@RhL�/��բ@$CSLϨ $c!��2�BZh҆��W!����y����� �˛�뇇՚� -�C����̐H�HS""T�R:��!��YB�݉D�f�)˯��(�?"mc�� ��G� -S���Wc>Rb -�4�1 ��� -�|2��Z�Gc>\���ȍΗ���O�-��e�\S,FO�c��g$"BJT����|�4���� -c����G��G�.fDEQ�f�X�˂���c�,�by�U�oy�����q\O@z977�����j�^�w�ݮ,˺lJ�Ϋ˒����iveݔu�B-�G+�]��*T�% �j����/�]Y��,8���_Y���l6��z�Z��no��t6y�+��ߒ���T#"@E�)-u�k�ʸb��X!E��Da��1�Q -�Ljế�<1q����1A:3LNB�3� ��&���}�;N�=�'3�ϯo������n�+rW�UU����vuU���*�ږU[ -�H%J��O�k�,��
�e;Q�RK -�((����i_��4�B��PqN�)��n{�d%vW,�kA!�k���U�q"bL�}��0V �! - -D�]w�Ad@ -Q!��>��f&xY!���L��Jr>�*#�`��Q*d R㣎붪ւ�$& \����/�ЉR+}�H4!�O� 3�"KD_i���-�t��{�@���������z�zXm�e�)weɷuYVUS�u�,�����,f�②�dT@Y�uU�U�Tw�zǧ�lʺ��]]�u��w宪ve���v��f���v���������r��&1�<��g#��)@Nd"���nG":�����R"N`B�
�����4�"�+RJa��2m���
R����l<9����-B7 -)R*Az�H���q��o�qX@��x>�f��777w���f�ۭ�%k��]U��g�|���sp��5V�cWVuY�;
TUUջ�����vUՆM��eӔU�+�K0��,��v��nw��j�Z������///d�F'=�q�.��o���&�R���2R�0!B�+K�dC���������<����H�QiCJ!-�"$�tFI�$��DF�5f�%<�"�
�-%�dE -�cĜ�#"҄�u8�����Ii���l��P�*B���J�*�b���zޑ{��+b�m&%H h�� �v| e{D����9���5�3�:���%)E\��Ć��y���o���B��'�'�A$��"�J��"9�� �L�laC 1�+���8n��n�{��qO�������������j�Z=���͆g����UUy.몪wMUVeY�4\7L�WUU�c���]Y�
'����2_�F宬�j�����e��z�+w��n�^=<0'��e:�E"�z�8�p0�4ei����Z�<ϸ�</H�NR�D�S�*G�U�����AD��B�\�&� b~���d�����9�2{�:+�\�HE�8#U8\��Hdp�5!�� �q� - - -�����������z�7����z����ɉ?����z.�r�s{������۷n�m�m�;��E���{��7��zܣ�����`0��p�����{����z��f0�쯃�����e��C�;?�&Q�?���C~���`8�exr2��8o����2��Q���"ߏyX�1�_}||ԆQJ�,H�L�TJ ��@���~Di��a8/ -v��\��LrJk��)�[Ra��3�h��d&����bi$�������c�.��8�1���!G�O�z�������mI��e�!l{LkLߌn/Фu�l�Gl�̸N<L��S{~
/s����jq���C�u�y[//2#��H���^)KN:��a�tǎ�,J\\��Z�q�}cۗ� - ! ��?�9D\ -�k��e���-��������_ƀ�OUďR�D��s �!�j48A ����*�TIx�hu��x��N2U��&� -Q5k,e�H��0�&aWBB -خ�eY����v�[�6�vW�e��o���n��m7e���v��v��m����;�w�f�ٔ��f�ە�,w�f��mK���ۖ�f�ۖ�r��mw��z�Y��\�g��l6�̆���|�nY
�+�6rGLI�F:є�2�Ii� -�� 0A$ʈߣ�fHH�N" -�5J�}-�g����:�ø�=��v���_\Z�Ђ^�6֞6����l�lv��7����Ł�F�Pb�9�$y����> -+�a!�<ts�!�a!� -�P;D�0����>����Ab��bY)�������T8�� - -�@���zf��<�5$n�C��s~od'QK�ĸ�q�!��j�������۶m]5��Föm�������qfY����a]^Z�l�f���u���m�v�#�<�0�JΡ
��U`�E�`5/�} rh$�g�!�:�^�!fC�Ň��p��q -HsD�������W�%C|LW�jE@��4"ʧ�\#�`<�� -��V8 -�8��|N -h�#eho����jN�4���O�ի��?��D�'��#�zQN��"|���<��U�rTH9) - -�J*5 -�@����!�cj�"!���+ߨ� @R -�V)��fF]>��"cVE�@��BxJ� -"��H��K�� -fƐ�<���xEe -�'DD�\#�#bt$����0F$ʦdR�1`F���ULʼ� `K3E -en3�!���5F��gn�`E�P(��>H�M&%p���C% -����m�ZV�J
�� -����^>��szD��K�@���S�� (��?�O+����� s���"�<'�c>���+LA���E���1~�����hV�c.�����iE�GT��?BnZ�`��D��?d����8�~8�Os"@������m]�w�#�����?5��f��`T5B��('��y>B̓|�%f�]��y��|�c�~�����8o4,�kw�<A ���@)�@
��@Ej���p0�*M��¥�a��0ŊQ��� R��4(���b��`xH�
p����R�7*������c��u�a5�AT�C��ѡs����Aԙ~.�7%?D������kU�G< -�����Rb���4$!�����G�����&i͕#�i�M��d�h��f�1"�~��u�����ߜ�w�UR�����yݮ۹�q�[ǹ�8���3������n�}�\��K���yޭ�8��������x���s[}߃�W�@;N��qn�����=�������q畱�s�sZ���uѪm4���ٞ��{��u]���jkt�[�qn���⯼W�^=<<x��<T���8���m�u�Ϋ���tZ�F�_�9�����1��>??��h9�}gd`�/�������^�zx��yp��o�qo=u]��:���s�Ơ{�hZ
˺�m�?��HEJ��HE)%��� -�R�@������̿V�j��M�h�""� `]�+�l�"�"8:N�Kr��H�@N*����O�qf���:�5���C|��1�1y�GD�,�����G)���� -'U}_�1F��Z�H�"T��ϙ(�{�f��n����yyu�l^]]�\6�ͫ˛�f�yuuټ��������OMQϬf��n3����%��ǹr�;qUk��N�_�suJ"B�#A -!�P���w@EBDQ����`P}>��:��Ap�}���u�}}ݪ�λ��㤽DgY� ��b�:�uc�= ��X��(��&fCY����7��9�a�e�G�����z^���PB�Q��I�g�A�%Ơԣ�&�+�������k؍�n����g�C�׆D���1��^���jЧ�y�+����mf�Xڬ�����G�(J��1����IH�$ 倏�^��])Q8�?�l�����<��
=@�&�΅D�Yéu�֕zJ���M�.Cir(�2���T����K|+c -J�� -�>"a6����<x�>�~�����tE9���{�DN�Q�k|���Τ���Fn3���U�B��t�7W=�l��O4�,��'4�����Y�v��n��ŵ�c �{#D�*@Ĺ�#�N0�W�V��洢�<����i���a����/���W�?"�s�礀 -�$�ƀצVG#�*�GDJI����3�E�Z'1���֚�'<�^v������$�b��$���+�A���mYͳ3��� - - - -N�!BE� - -P��\x� diff --git a/examples/web/models/models_loading.html b/examples/web/models/models_loading.html deleted file mode 100644 index 34bf7e4..0000000 --- a/examples/web/models/models_loading.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_loading.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_loading.js b/examples/web/models/models_loading.js deleted file mode 100644 index 71053d1..0000000 --- a/examples/web/models/models_loading.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){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 location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_loading.data";var REMOTE_PACKAGE_BASE="models_loading.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"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){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"]("/","resources",true,true);Module["FS_createPath"]("/resources","models",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<files.length;++i){new DataRequest(files[i]["start"],files[i]["end"],files[i]["audio"]).open("GET",files[i]["filename"])}function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);DataRequest.prototype.byteArray=byteArray;var files=metadata["files"];for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_loading.data")}Module["addRunDependency"]("datafile_models/models_loading.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"filename":"/resources/models/castle.obj","start":0,"end":407909,"audio":0},{"filename":"/resources/models/castle_diffuse.png","start":407909,"end":852122,"audio":0}],"remote_package_size":852122,"package_uuid":"fef43d7f-10e4-4915-a2aa-676c006c6075"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||67108864;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_loading.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["ae"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["de"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}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 PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd);if(size<cwdLengthInBytes+1)return-68;stringToUTF8(cwd,buf,size);return buf}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"a":___assert_fail,"Ta":___sys_chdir,"L":___sys_fcntl64,"Sa":___sys_getcwd,"Va":___sys_ioctl,"Xa":___sys_open,"C":_emscripten_exit_pointerlock,"aa":_emscripten_get_element_css_size,"X":_emscripten_get_gamepad_status,"Y":_emscripten_get_num_gamepads,"Jd":_emscripten_glActiveTexture,"Id":_emscripten_glAttachShader,"Zd":_emscripten_glBeginQueryEXT,"Hd":_emscripten_glBindAttribLocation,"Gd":_emscripten_glBindBuffer,"Fd":_emscripten_glBindFramebuffer,"Ed":_emscripten_glBindRenderbuffer,"Dd":_emscripten_glBindTexture,"Rd":_emscripten_glBindVertexArrayOES,"Cd":_emscripten_glBlendColor,"Bd":_emscripten_glBlendEquation,"Ad":_emscripten_glBlendEquationSeparate,"zd":_emscripten_glBlendFunc,"yd":_emscripten_glBlendFuncSeparate,"xd":_emscripten_glBufferData,"wd":_emscripten_glBufferSubData,"vd":_emscripten_glCheckFramebufferStatus,"ud":_emscripten_glClear,"td":_emscripten_glClearColor,"sd":_emscripten_glClearDepthf,"rd":_emscripten_glClearStencil,"qd":_emscripten_glColorMask,"pd":_emscripten_glCompileShader,"od":_emscripten_glCompressedTexImage2D,"nd":_emscripten_glCompressedTexSubImage2D,"md":_emscripten_glCopyTexImage2D,"ld":_emscripten_glCopyTexSubImage2D,"kd":_emscripten_glCreateProgram,"jd":_emscripten_glCreateShader,"id":_emscripten_glCullFace,"hd":_emscripten_glDeleteBuffers,"gd":_emscripten_glDeleteFramebuffers,"fd":_emscripten_glDeleteProgram,"T":_emscripten_glDeleteQueriesEXT,"ed":_emscripten_glDeleteRenderbuffers,"dd":_emscripten_glDeleteShader,"cd":_emscripten_glDeleteTextures,"Qd":_emscripten_glDeleteVertexArraysOES,"bd":_emscripten_glDepthFunc,"ad":_emscripten_glDepthMask,"$c":_emscripten_glDepthRangef,"_c":_emscripten_glDetachShader,"Zc":_emscripten_glDisable,"Yc":_emscripten_glDisableVertexAttribArray,"Xc":_emscripten_glDrawArrays,"Md":_emscripten_glDrawArraysInstancedANGLE,"Nd":_emscripten_glDrawBuffersWEBGL,"Wc":_emscripten_glDrawElements,"Ld":_emscripten_glDrawElementsInstancedANGLE,"Vc":_emscripten_glEnable,"Uc":_emscripten_glEnableVertexAttribArray,"Yd":_emscripten_glEndQueryEXT,"Tc":_emscripten_glFinish,"Sc":_emscripten_glFlush,"Rc":_emscripten_glFramebufferRenderbuffer,"Qc":_emscripten_glFramebufferTexture2D,"Pc":_emscripten_glFrontFace,"Oc":_emscripten_glGenBuffers,"Mc":_emscripten_glGenFramebuffers,"U":_emscripten_glGenQueriesEXT,"Lc":_emscripten_glGenRenderbuffers,"Kc":_emscripten_glGenTextures,"Pd":_emscripten_glGenVertexArraysOES,"Nc":_emscripten_glGenerateMipmap,"Ic":_emscripten_glGetActiveAttrib,"Hc":_emscripten_glGetActiveUniform,"Gc":_emscripten_glGetAttachedShaders,"Fc":_emscripten_glGetAttribLocation,"Ec":_emscripten_glGetBooleanv,"Dc":_emscripten_glGetBufferParameteriv,"Cc":_emscripten_glGetError,"Bc":_emscripten_glGetFloatv,"Ac":_emscripten_glGetFramebufferAttachmentParameteriv,"zc":_emscripten_glGetIntegerv,"xc":_emscripten_glGetProgramInfoLog,"yc":_emscripten_glGetProgramiv,"Td":_emscripten_glGetQueryObjecti64vEXT,"Vd":_emscripten_glGetQueryObjectivEXT,"Sd":_emscripten_glGetQueryObjectui64vEXT,"Ud":_emscripten_glGetQueryObjectuivEXT,"Wd":_emscripten_glGetQueryivEXT,"wc":_emscripten_glGetRenderbufferParameteriv,"uc":_emscripten_glGetShaderInfoLog,"tc":_emscripten_glGetShaderPrecisionFormat,"sc":_emscripten_glGetShaderSource,"vc":_emscripten_glGetShaderiv,"rc":_emscripten_glGetString,"qc":_emscripten_glGetTexParameterfv,"pc":_emscripten_glGetTexParameteriv,"mc":_emscripten_glGetUniformLocation,"oc":_emscripten_glGetUniformfv,"nc":_emscripten_glGetUniformiv,"jc":_emscripten_glGetVertexAttribPointerv,"lc":_emscripten_glGetVertexAttribfv,"kc":_emscripten_glGetVertexAttribiv,"ic":_emscripten_glHint,"hc":_emscripten_glIsBuffer,"gc":_emscripten_glIsEnabled,"fc":_emscripten_glIsFramebuffer,"ec":_emscripten_glIsProgram,"S":_emscripten_glIsQueryEXT,"dc":_emscripten_glIsRenderbuffer,"cc":_emscripten_glIsShader,"bc":_emscripten_glIsTexture,"Od":_emscripten_glIsVertexArrayOES,"ac":_emscripten_glLineWidth,"$b":_emscripten_glLinkProgram,"_b":_emscripten_glPixelStorei,"Zb":_emscripten_glPolygonOffset,"Xd":_emscripten_glQueryCounterEXT,"Yb":_emscripten_glReadPixels,"Xb":_emscripten_glReleaseShaderCompiler,"Vb":_emscripten_glRenderbufferStorage,"Ub":_emscripten_glSampleCoverage,"Tb":_emscripten_glScissor,"Sb":_emscripten_glShaderBinary,"Rb":_emscripten_glShaderSource,"Qb":_emscripten_glStencilFunc,"Pb":_emscripten_glStencilFuncSeparate,"Ob":_emscripten_glStencilMask,"Nb":_emscripten_glStencilMaskSeparate,"Mb":_emscripten_glStencilOp,"Kb":_emscripten_glStencilOpSeparate,"Jb":_emscripten_glTexImage2D,"Ib":_emscripten_glTexParameterf,"Hb":_emscripten_glTexParameterfv,"Gb":_emscripten_glTexParameteri,"Fb":_emscripten_glTexParameteriv,"Eb":_emscripten_glTexSubImage2D,"Db":_emscripten_glUniform1f,"Cb":_emscripten_glUniform1fv,"Bb":_emscripten_glUniform1i,"zb":_emscripten_glUniform1iv,"yb":_emscripten_glUniform2f,"xb":_emscripten_glUniform2fv,"wb":_emscripten_glUniform2i,"vb":_emscripten_glUniform2iv,"ub":_emscripten_glUniform3f,"tb":_emscripten_glUniform3fv,"sb":_emscripten_glUniform3i,"rb":_emscripten_glUniform3iv,"qb":_emscripten_glUniform4f,"ob":_emscripten_glUniform4fv,"nb":_emscripten_glUniform4i,"mb":_emscripten_glUniform4iv,"lb":_emscripten_glUniformMatrix2fv,"kb":_emscripten_glUniformMatrix3fv,"jb":_emscripten_glUniformMatrix4fv,"ib":_emscripten_glUseProgram,"hb":_emscripten_glValidateProgram,"gb":_emscripten_glVertexAttrib1f,"fb":_emscripten_glVertexAttrib1fv,"db":_emscripten_glVertexAttrib2f,"cb":_emscripten_glVertexAttrib2fv,"bb":_emscripten_glVertexAttrib3f,"ab":_emscripten_glVertexAttrib3fv,"$a":_emscripten_glVertexAttrib4f,"_a":_emscripten_glVertexAttrib4fv,"Kd":_emscripten_glVertexAttribDivisorANGLE,"Za":_emscripten_glVertexAttribPointer,"Ya":_emscripten_glViewport,"Pa":_emscripten_memcpy_big,"Qa":_emscripten_resize_heap,"x":_emscripten_run_script,"Z":_emscripten_sample_gamepad_data,"ya":_emscripten_set_click_callback_on_thread,"Aa":_emscripten_set_fullscreenchange_callback_on_thread,"ta":_emscripten_set_gamepadconnected_callback_on_thread,"sa":_emscripten_set_gamepaddisconnected_callback_on_thread,"za":_emscripten_set_keydown_callback_on_thread,"$d":_emscripten_set_main_loop,"ua":_emscripten_set_touchcancel_callback_on_thread,"wa":_emscripten_set_touchend_callback_on_thread,"va":_emscripten_set_touchmove_callback_on_thread,"xa":_emscripten_set_touchstart_callback_on_thread,"Ra":_emscripten_thread_sleep,"V":_exit,"M":_fd_close,"Ua":_fd_read,"Na":_fd_seek,"K":_fd_write,"p":_glActiveTexture,"D":_glAttachShader,"k":_glBindAttribLocation,"b":_glBindBuffer,"j":_glBindTexture,"Lb":_glBlendFunc,"e":_glBufferData,"v":_glBufferSubData,"N":_glClear,"O":_glClearColor,"eb":_glClearDepthf,"Fa":_glCompileShader,"La":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"Ab":_glCullFace,"m":_glDeleteBuffers,"G":_glDeleteProgram,"H":_glDeleteShader,"J":_glDeleteTextures,"Wb":_glDepthFunc,"I":_glDetachShader,"P":_glDisable,"h":_glDisableVertexAttribArray,"R":_glDrawArrays,"Q":_glDrawElements,"w":_glEnable,"c":_glEnableVertexAttribArray,"pb":_glFrontFace,"f":_glGenBuffers,"Oa":_glGenTextures,"u":_glGetAttribLocation,"Jc":_glGetFloatv,"Ba":_glGetProgramInfoLog,"F":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"E":_glGetShaderiv,"n":_glGetString,"t":_glGetUniformLocation,"Ca":_glLinkProgram,"Wa":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ma":_glTexImage2D,"o":_glTexParameteri,"y":_glUniform1i,"q":_glUniform4f,"r":_glUniformMatrix4fv,"l":_glUseProgram,"Ja":_glVertexAttrib2f,"Ka":_glVertexAttrib3f,"s":_glVertexAttrib4f,"d":_glVertexAttribPointer,"_d":_glViewport,"A":_glfwCreateWindow,"pa":_glfwDefaultWindowHints,"$":_glfwDestroyWindow,"B":_glfwGetPrimaryMonitor,"i":_glfwGetTime,"oa":_glfwGetVideoModes,"qa":_glfwInit,"da":_glfwMakeContextCurrent,"ia":_glfwSetCharCallback,"ea":_glfwSetCursorEnterCallback,"ga":_glfwSetCursorPosCallback,"ka":_glfwSetDropCallback,"ra":_glfwSetErrorCallback,"ja":_glfwSetKeyCallback,"ha":_glfwSetMouseButtonCallback,"fa":_glfwSetScrollCallback,"la":_glfwSetWindowFocusCallback,"ma":_glfwSetWindowIconifyCallback,"W":_glfwSetWindowShouldClose,"na":_glfwSetWindowSizeCallback,"_":_glfwSwapBuffers,"ca":_glfwSwapInterval,"z":_glfwTerminate,"g":_glfwWindowHint,"ba":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["be"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["ce"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ee"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["fe"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ge"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["he"]).apply(null,arguments)};Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_loading.wasm b/examples/web/models/models_loading.wasm Binary files differdeleted file mode 100644 index 4965e7e..0000000 --- a/examples/web/models/models_loading.wasm +++ /dev/null diff --git a/examples/web/models/models_material_pbr.c b/examples/web/models/models_material_pbr.c deleted file mode 100644 index 5692653..0000000 --- a/examples/web/models/models_material_pbr.c +++ /dev/null @@ -1,224 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - PBR material -* -* This example has been created using raylib 1.8 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2017 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" -#include "raymath.h" - -#define RLIGHTS_IMPLEMENTATION -#include "rlights.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -#define CUBEMAP_SIZE 512 // Cubemap texture size -#define IRRADIANCE_SIZE 32 // Irradiance texture size -#define PREFILTERED_SIZE 256 // Prefiltered HDR environment texture size -#define BRDF_SIZE 512 // BRDF LUT texture size - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// Define the camera to look into our 3d world -Camera camera = {{ 4.0f, 4.0f, 4.0f }, { 0.0f, 0.5f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; - -Model model = { 0 }; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -// PBR material loading -static Material LoadMaterialPBR(Color albedo, float metalness, float roughness); - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - SetConfigFlags(FLAG_MSAA_4X_HINT); // Enable Multi Sampling Anti Aliasing 4x (if available) - InitWindow(screenWidth, screenHeight, "raylib [models] example - pbr material"); - - // Load model and PBR material - model = LoadModel("resources/pbr/trooper.obj"); - model.material = LoadMaterialPBR((Color){ 255, 255, 255, 255 }, 1.0f, 1.0f); - - // Define lights attributes - // NOTE: Shader is passed to every light on creation to define shader bindings internally - Light lights[MAX_LIGHTS] = { - CreateLight(LIGHT_POINT, (Vector3){ LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 0, 255 }, model.material.shader), - CreateLight(LIGHT_POINT, (Vector3){ 0.0f, LIGHT_HEIGHT, LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 255, 0, 255 }, model.material.shader), - CreateLight(LIGHT_POINT, (Vector3){ -LIGHT_DISTANCE, LIGHT_HEIGHT, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 0, 0, 255, 255 }, model.material.shader), - CreateLight(LIGHT_DIRECTIONAL, (Vector3){ 0.0f, LIGHT_HEIGHT*2.0f, -LIGHT_DISTANCE }, (Vector3){ 0.0f, 0.0f, 0.0f }, (Color){ 255, 0, 255, 255 }, model.material.shader) - }; - - SetCameraMode(camera, CAMERA_ORBITAL); // Set an orbital camera mode - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadModel(model); // Unload skybox model - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera); // Update camera - - // Send to material PBR shader camera view position - float cameraPos[3] = { camera.position.x, camera.position.y, camera.position.z }; - SetShaderValue(model.material.shader, model.material.shader.locs[SHADER_LOC_VECTOR_VIEW], cameraPos, 3); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - Begin3dMode(camera); - - DrawModel(model, Vector3Zero(), 1.0f, WHITE); - - DrawGrid(10, 1.0f); - - End3dMode(); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -} - -// Load PBR material (Supports: ALBEDO, NORMAL, METALNESS, ROUGHNESS, AO, EMMISIVE, HEIGHT maps) -// NOTE: PBR shader is loaded inside this function -static Material LoadMaterialPBR(Color albedo, float metalness, float roughness) -{ - Material mat = { 0 }; // NOTE: All maps textures are set to { 0 } - - #define PATH_PBR_VS "resources/shaders/pbr.vs" // Path to physically based rendering vertex shader - #define PATH_PBR_FS "resources/shaders/pbr.fs" // Path to physically based rendering fragment shader - - mat.shader = LoadShader(PATH_PBR_VS, PATH_PBR_FS); - - // Get required locations points for PBR material - // NOTE: Those location names must be available and used in the shader code - mat.shader.locs[SHADER_LOC_MAP_ALBEDO] = GetShaderLocation(mat.shader, "albedo.sampler"); - mat.shader.locs[SHADER_LOC_MAP_METALNESS] = GetShaderLocation(mat.shader, "metalness.sampler"); - mat.shader.locs[SHADER_LOC_MAP_NORMAL] = GetShaderLocation(mat.shader, "normals.sampler"); - mat.shader.locs[SHADER_LOC_MAP_ROUGHNESS] = GetShaderLocation(mat.shader, "roughness.sampler"); - mat.shader.locs[SHADER_LOC_MAP_OCCUSION] = GetShaderLocation(mat.shader, "occlusion.sampler"); - //mat.shader.locs[SHADER_LOC_MAP_EMISSION] = GetShaderLocation(mat.shader, "emission.sampler"); - //mat.shader.locs[SHADER_LOC_MAP_HEIGHT] = GetShaderLocation(mat.shader, "height.sampler"); - mat.shader.locs[SHADER_LOC_MAP_IRRADIANCE] = GetShaderLocation(mat.shader, "irradianceMap"); - mat.shader.locs[SHADER_LOC_MAP_PREFILTER] = GetShaderLocation(mat.shader, "prefilterMap"); - mat.shader.locs[SHADER_LOC_MAP_BRDF] = GetShaderLocation(mat.shader, "brdfLUT"); - - // Set view matrix location - mat.shader.locs[SHADER_LOC_MATRIX_MODEL] = GetShaderLocation(mat.shader, "mMatrix"); - mat.shader.locs[SHADER_LOC_MATRIX_VIEW] = GetShaderLocation(mat.shader, "view"); - mat.shader.locs[SHADER_LOC_VECTOR_VIEW] = GetShaderLocation(mat.shader, "viewPos"); - - // Set PBR standard maps - mat.maps[MATERIAL_MAP_ALBEDO].texture = LoadTexture("resources/pbr/trooper_albedo.png"); - mat.maps[MATERIAL_MAP_NORMAL].texture = LoadTexture("resources/pbr/trooper_normals.png"); - mat.maps[MATERIAL_MAP_METALNESS].texture = LoadTexture("resources/pbr/trooper_metalness.png"); - mat.maps[MATERIAL_MAP_ROUGHNESS].texture = LoadTexture("resources/pbr/trooper_roughness.png"); - mat.maps[MATERIAL_MAP_OCCLUSION].texture = LoadTexture("resources/pbr/trooper_ao.png"); - - // Set environment maps - #define PATH_CUBEMAP_VS "resources/shaders/cubemap.vs" // Path to equirectangular to cubemap vertex shader - #define PATH_CUBEMAP_FS "resources/shaders/cubemap.fs" // Path to equirectangular to cubemap fragment shader - #define PATH_SKYBOX_VS "resources/shaders/skybox.vs" // Path to skybox vertex shader - #define PATH_IRRADIANCE_FS "resources/shaders/irradiance.fs" // Path to irradiance (GI) calculation fragment shader - #define PATH_PREFILTER_FS "resources/shaders/prefilter.fs" // Path to reflection prefilter calculation fragment shader - #define PATH_BRDF_VS "resources/shaders/brdf.vs" // Path to bidirectional reflectance distribution function vertex shader - #define PATH_BRDF_FS "resources/shaders/brdf.fs" // Path to bidirectional reflectance distribution function fragment shader - - Shader shdrCubemap = LoadShader(PATH_CUBEMAP_VS, PATH_CUBEMAP_FS); - Shader shdrIrradiance = LoadShader(PATH_SKYBOX_VS, PATH_IRRADIANCE_FS); - Shader shdrPrefilter = LoadShader(PATH_SKYBOX_VS, PATH_PREFILTER_FS); - Shader shdrBRDF = LoadShader(PATH_BRDF_VS, PATH_BRDF_FS); - - // Setup required shader locations - SetShaderValuei(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, 1); - SetShaderValuei(shdrIrradiance, GetShaderLocation(shdrIrradiance, "environmentMap"), (int[1]){ 0 }, 1); - SetShaderValuei(shdrPrefilter, GetShaderLocation(shdrPrefilter, "environmentMap"), (int[1]){ 0 }, 1); - - Texture2D texHDR = LoadTexture("resources/pinetree.hdr"); - Texture2D cubemap = GenTextureCubemap(shdrCubemap, texHDR, CUBEMAP_SIZE); - mat.maps[MATERIAL_MAP_IRRADIANCE].texture = GenTextureIrradiance(shdrIrradiance, cubemap, IRRADIANCE_SIZE); - mat.maps[MATERIAL_MAP_PREFILTER].texture = GenTexturePrefilter(shdrPrefilter, cubemap, PREFILTERED_SIZE); - mat.maps[MATERIAL_MAP_BRDG].texture = GenTextureBRDF(shdrBRDF, cubemap, BRDF_SIZE); - UnloadTexture(cubemap); - UnloadTexture(texHDR); - - // Unload already used shaders (to create specific textures) - UnloadShader(shdrCubemap); - UnloadShader(shdrIrradiance); - UnloadShader(shdrPrefilter); - UnloadShader(shdrBRDF); - - // Set textures filtering for better quality - SetTextureFilter(mat.maps[MATERIAL_MAP_ALBEDO].texture, FILTER_BILINEAR); - SetTextureFilter(mat.maps[MATERIAL_MAP_NORMAL].texture, FILTER_BILINEAR); - SetTextureFilter(mat.maps[MATERIAL_MAP_METALNESS].texture, FILTER_BILINEAR); - SetTextureFilter(mat.maps[MATERIAL_MAP_ROUGHNESS].texture, FILTER_BILINEAR); - SetTextureFilter(mat.maps[MATERIAL_MAP_OCCLUSION].texture, FILTER_BILINEAR); - - // Enable sample usage in shader for assigned textures - SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "albedo.useSampler"), (int[1]){ 1 }, 1); - SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "normals.useSampler"), (int[1]){ 1 }, 1); - SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "metalness.useSampler"), (int[1]){ 1 }, 1); - SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "roughness.useSampler"), (int[1]){ 1 }, 1); - SetShaderValuei(mat.shader, GetShaderLocation(mat.shader, "occlusion.useSampler"), (int[1]){ 1 }, 1); - - int renderModeLoc = GetShaderLocation(mat.shader, "renderMode"); - SetShaderValuei(mat.shader, renderModeLoc, (int[1]){ 0 }, 1); - - // Set up material properties color - mat.maps[MATERIAL_MAP_ALBEDO].color = albedo; - mat.maps[MATERIAL_MAP_NORMAL].color = (Color){ 128, 128, 255, 255 }; - mat.maps[MATERIAL_MAP_METALNESS].value = metalness; - mat.maps[MATERIAL_MAP_ROUGHNESS].value = roughness; - mat.maps[MATERIAL_MAP_OCCLUSION].value = 1.0f; - mat.maps[MATERIAL_MAP_EMISSION].value = 0.5f; - mat.maps[MATERIAL_MAP_HEIGHT].value = 0.5f; - - return mat; -}
\ No newline at end of file diff --git a/examples/web/models/models_mesh_generation.c b/examples/web/models/models_mesh_generation.c deleted file mode 100644 index 9ebe5f6..0000000 --- a/examples/web/models/models_mesh_generation.c +++ /dev/null @@ -1,152 +0,0 @@ -/******************************************************************************************* -* -* raylib example - procedural mesh generation -* -* This example has been created using raylib 1.8 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2017 Ramon Santamaria (Ray San) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -#define NUM_MODELS 8 // Parametric 3d shapes to generate - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -Model models[NUM_MODELS] = { 0 }; - -// Define the camera to look into our 3d world -Camera camera = {{ 5.0f, 5.0f, 5.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; - -// Model drawing position -Vector3 position = { 0.0f, 0.0f, 0.0f }; - -int currentModel = 0; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - mesh generation"); - - // We generate a checked image for texturing - Image checked = GenImageChecked(2, 2, 1, 1, RED, GREEN); - Texture2D texture = LoadTextureFromImage(checked); - UnloadImage(checked); - - models[0] = LoadModelFromMesh(GenMeshPlane(2, 2, 5, 5)); - models[1] = LoadModelFromMesh(GenMeshCube(2.0f, 1.0f, 2.0f)); - models[2] = LoadModelFromMesh(GenMeshSphere(2, 32, 32)); - models[3] = LoadModelFromMesh(GenMeshHemiSphere(2, 16, 16)); - models[4] = LoadModelFromMesh(GenMeshCylinder(1, 2, 16)); - models[5] = LoadModelFromMesh(GenMeshTorus(0.25f, 4.0f, 16, 32)); - models[6] = LoadModelFromMesh(GenMeshKnot(1.0f, 2.0f, 16, 128)); - models[7] = LoadModelFromMesh(GenMeshPoly(5, 2.0f)); - - // Set checked texture as default diffuse component for all models material - for (int i = 0; i < NUM_MODELS; i++) models[i].materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; - - SetCameraMode(camera, CAMERA_ORBITAL); // Set a orbital camera mode - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - // Unload models data (GPU VRAM) - for (int i = 0; i < NUM_MODELS; i++) UnloadModel(models[i]); - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera); // Update internal camera and our camera - - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - currentModel = (currentModel + 1)%NUM_MODELS; // Cycle between the textures - } - - if (IsKeyPressed(KEY_RIGHT)) - { - currentModel++; - if (currentModel >= NUM_MODELS) currentModel = 0; - } - else if (IsKeyPressed(KEY_LEFT)) - { - currentModel--; - if (currentModel < 0) currentModel = NUM_MODELS - 1; - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawModel(models[currentModel], position, 1.0f, WHITE); - - DrawGrid(10, 1.0); - - EndMode3D(); - - DrawRectangle(30, 400, 310, 30, Fade(SKYBLUE, 0.5f)); - DrawRectangleLines(30, 400, 310, 30, Fade(DARKBLUE, 0.5f)); - DrawText("MOUSE LEFT BUTTON to CYCLE PROCEDURAL MODELS", 40, 410, 10, BLUE); - - switch(currentModel) - { - case 0: DrawText("PLANE", 680, 10, 20, DARKBLUE); break; - case 1: DrawText("CUBE", 680, 10, 20, DARKBLUE); break; - case 2: DrawText("SPHERE", 680, 10, 20, DARKBLUE); break; - case 3: DrawText("HEMISPHERE", 640, 10, 20, DARKBLUE); break; - case 4: DrawText("CYLINDER", 680, 10, 20, DARKBLUE); break; - case 5: DrawText("TORUS", 680, 10, 20, DARKBLUE); break; - case 6: DrawText("KNOT", 680, 10, 20, DARKBLUE); break; - case 7: DrawText("POLY", 680, 10, 20, DARKBLUE); break; - default: break; - } - - EndDrawing(); - //---------------------------------------------------------------------------------- -}
\ No newline at end of file diff --git a/examples/web/models/models_mesh_generation.html b/examples/web/models/models_mesh_generation.html deleted file mode 100644 index e3bdba8..0000000 --- a/examples/web/models/models_mesh_generation.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_mesh_generation.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_mesh_generation.js b/examples/web/models/models_mesh_generation.js deleted file mode 100644 index af54abc..0000000 --- a/examples/web/models/models_mesh_generation.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_mesh_generation.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["_d"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["be"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"n":___assert_fail,"L":___sys_fcntl64,"Ta":___sys_ioctl,"Va":___sys_open,"C":_emscripten_exit_pointerlock,"aa":_emscripten_get_element_css_size,"X":_emscripten_get_gamepad_status,"Y":_emscripten_get_num_gamepads,"Hd":_emscripten_glActiveTexture,"Gd":_emscripten_glAttachShader,"Xd":_emscripten_glBeginQueryEXT,"Fd":_emscripten_glBindAttribLocation,"Ed":_emscripten_glBindBuffer,"Dd":_emscripten_glBindFramebuffer,"Cd":_emscripten_glBindRenderbuffer,"Bd":_emscripten_glBindTexture,"Pd":_emscripten_glBindVertexArrayOES,"Ad":_emscripten_glBlendColor,"zd":_emscripten_glBlendEquation,"yd":_emscripten_glBlendEquationSeparate,"xd":_emscripten_glBlendFunc,"wd":_emscripten_glBlendFuncSeparate,"vd":_emscripten_glBufferData,"ud":_emscripten_glBufferSubData,"td":_emscripten_glCheckFramebufferStatus,"sd":_emscripten_glClear,"rd":_emscripten_glClearColor,"qd":_emscripten_glClearDepthf,"pd":_emscripten_glClearStencil,"od":_emscripten_glColorMask,"nd":_emscripten_glCompileShader,"md":_emscripten_glCompressedTexImage2D,"ld":_emscripten_glCompressedTexSubImage2D,"kd":_emscripten_glCopyTexImage2D,"jd":_emscripten_glCopyTexSubImage2D,"id":_emscripten_glCreateProgram,"hd":_emscripten_glCreateShader,"gd":_emscripten_glCullFace,"fd":_emscripten_glDeleteBuffers,"ed":_emscripten_glDeleteFramebuffers,"dd":_emscripten_glDeleteProgram,"T":_emscripten_glDeleteQueriesEXT,"cd":_emscripten_glDeleteRenderbuffers,"bd":_emscripten_glDeleteShader,"ad":_emscripten_glDeleteTextures,"Od":_emscripten_glDeleteVertexArraysOES,"$c":_emscripten_glDepthFunc,"_c":_emscripten_glDepthMask,"Zc":_emscripten_glDepthRangef,"Yc":_emscripten_glDetachShader,"Xc":_emscripten_glDisable,"Wc":_emscripten_glDisableVertexAttribArray,"Vc":_emscripten_glDrawArrays,"Kd":_emscripten_glDrawArraysInstancedANGLE,"Ld":_emscripten_glDrawBuffersWEBGL,"Uc":_emscripten_glDrawElements,"Jd":_emscripten_glDrawElementsInstancedANGLE,"Tc":_emscripten_glEnable,"Sc":_emscripten_glEnableVertexAttribArray,"Wd":_emscripten_glEndQueryEXT,"Rc":_emscripten_glFinish,"Qc":_emscripten_glFlush,"Pc":_emscripten_glFramebufferRenderbuffer,"Oc":_emscripten_glFramebufferTexture2D,"Nc":_emscripten_glFrontFace,"Mc":_emscripten_glGenBuffers,"Kc":_emscripten_glGenFramebuffers,"U":_emscripten_glGenQueriesEXT,"Jc":_emscripten_glGenRenderbuffers,"Ic":_emscripten_glGenTextures,"Nd":_emscripten_glGenVertexArraysOES,"Lc":_emscripten_glGenerateMipmap,"Gc":_emscripten_glGetActiveAttrib,"Fc":_emscripten_glGetActiveUniform,"Ec":_emscripten_glGetAttachedShaders,"Dc":_emscripten_glGetAttribLocation,"Cc":_emscripten_glGetBooleanv,"Bc":_emscripten_glGetBufferParameteriv,"Ac":_emscripten_glGetError,"zc":_emscripten_glGetFloatv,"yc":_emscripten_glGetFramebufferAttachmentParameteriv,"xc":_emscripten_glGetIntegerv,"vc":_emscripten_glGetProgramInfoLog,"wc":_emscripten_glGetProgramiv,"Rd":_emscripten_glGetQueryObjecti64vEXT,"Td":_emscripten_glGetQueryObjectivEXT,"Qd":_emscripten_glGetQueryObjectui64vEXT,"Sd":_emscripten_glGetQueryObjectuivEXT,"Ud":_emscripten_glGetQueryivEXT,"uc":_emscripten_glGetRenderbufferParameteriv,"sc":_emscripten_glGetShaderInfoLog,"rc":_emscripten_glGetShaderPrecisionFormat,"qc":_emscripten_glGetShaderSource,"tc":_emscripten_glGetShaderiv,"pc":_emscripten_glGetString,"oc":_emscripten_glGetTexParameterfv,"nc":_emscripten_glGetTexParameteriv,"kc":_emscripten_glGetUniformLocation,"mc":_emscripten_glGetUniformfv,"lc":_emscripten_glGetUniformiv,"hc":_emscripten_glGetVertexAttribPointerv,"jc":_emscripten_glGetVertexAttribfv,"ic":_emscripten_glGetVertexAttribiv,"gc":_emscripten_glHint,"fc":_emscripten_glIsBuffer,"ec":_emscripten_glIsEnabled,"dc":_emscripten_glIsFramebuffer,"cc":_emscripten_glIsProgram,"S":_emscripten_glIsQueryEXT,"bc":_emscripten_glIsRenderbuffer,"ac":_emscripten_glIsShader,"$b":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"_b":_emscripten_glLineWidth,"Zb":_emscripten_glLinkProgram,"Yb":_emscripten_glPixelStorei,"Xb":_emscripten_glPolygonOffset,"Vd":_emscripten_glQueryCounterEXT,"Wb":_emscripten_glReadPixels,"Vb":_emscripten_glReleaseShaderCompiler,"Tb":_emscripten_glRenderbufferStorage,"Sb":_emscripten_glSampleCoverage,"Rb":_emscripten_glScissor,"Qb":_emscripten_glShaderBinary,"Pb":_emscripten_glShaderSource,"Ob":_emscripten_glStencilFunc,"Nb":_emscripten_glStencilFuncSeparate,"Mb":_emscripten_glStencilMask,"Lb":_emscripten_glStencilMaskSeparate,"Kb":_emscripten_glStencilOp,"Ib":_emscripten_glStencilOpSeparate,"Hb":_emscripten_glTexImage2D,"Gb":_emscripten_glTexParameterf,"Fb":_emscripten_glTexParameterfv,"Eb":_emscripten_glTexParameteri,"Db":_emscripten_glTexParameteriv,"Cb":_emscripten_glTexSubImage2D,"Bb":_emscripten_glUniform1f,"Ab":_emscripten_glUniform1fv,"zb":_emscripten_glUniform1i,"xb":_emscripten_glUniform1iv,"wb":_emscripten_glUniform2f,"vb":_emscripten_glUniform2fv,"ub":_emscripten_glUniform2i,"tb":_emscripten_glUniform2iv,"sb":_emscripten_glUniform3f,"rb":_emscripten_glUniform3fv,"qb":_emscripten_glUniform3i,"pb":_emscripten_glUniform3iv,"ob":_emscripten_glUniform4f,"mb":_emscripten_glUniform4fv,"lb":_emscripten_glUniform4i,"kb":_emscripten_glUniform4iv,"jb":_emscripten_glUniformMatrix2fv,"ib":_emscripten_glUniformMatrix3fv,"hb":_emscripten_glUniformMatrix4fv,"gb":_emscripten_glUseProgram,"fb":_emscripten_glValidateProgram,"eb":_emscripten_glVertexAttrib1f,"db":_emscripten_glVertexAttrib1fv,"bb":_emscripten_glVertexAttrib2f,"ab":_emscripten_glVertexAttrib2fv,"$a":_emscripten_glVertexAttrib3f,"_a":_emscripten_glVertexAttrib3fv,"Za":_emscripten_glVertexAttrib4f,"Ya":_emscripten_glVertexAttrib4fv,"Id":_emscripten_glVertexAttribDivisorANGLE,"Xa":_emscripten_glVertexAttribPointer,"Wa":_emscripten_glViewport,"Pa":_emscripten_memcpy_big,"Qa":_emscripten_resize_heap,"x":_emscripten_run_script,"Z":_emscripten_sample_gamepad_data,"ya":_emscripten_set_click_callback_on_thread,"Aa":_emscripten_set_fullscreenchange_callback_on_thread,"ta":_emscripten_set_gamepadconnected_callback_on_thread,"sa":_emscripten_set_gamepaddisconnected_callback_on_thread,"za":_emscripten_set_keydown_callback_on_thread,"Zd":_emscripten_set_main_loop,"ua":_emscripten_set_touchcancel_callback_on_thread,"wa":_emscripten_set_touchend_callback_on_thread,"va":_emscripten_set_touchmove_callback_on_thread,"xa":_emscripten_set_touchstart_callback_on_thread,"Ra":_emscripten_thread_sleep,"V":_exit,"M":_fd_close,"Sa":_fd_read,"Oa":_fd_seek,"K":_fd_write,"p":_glActiveTexture,"D":_glAttachShader,"j":_glBindAttribLocation,"a":_glBindBuffer,"h":_glBindTexture,"Jb":_glBlendFunc,"d":_glBufferData,"v":_glBufferSubData,"N":_glClear,"O":_glClearColor,"cb":_glClearDepthf,"Fa":_glCompileShader,"La":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"yb":_glCullFace,"l":_glDeleteBuffers,"G":_glDeleteProgram,"H":_glDeleteShader,"J":_glDeleteTextures,"Ub":_glDepthFunc,"I":_glDetachShader,"P":_glDisable,"g":_glDisableVertexAttribArray,"R":_glDrawArrays,"Q":_glDrawElements,"w":_glEnable,"b":_glEnableVertexAttribArray,"nb":_glFrontFace,"e":_glGenBuffers,"Na":_glGenTextures,"u":_glGetAttribLocation,"Hc":_glGetFloatv,"Ba":_glGetProgramInfoLog,"F":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"E":_glGetShaderiv,"m":_glGetString,"t":_glGetUniformLocation,"Ca":_glLinkProgram,"Ua":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ma":_glTexImage2D,"o":_glTexParameteri,"y":_glUniform1i,"q":_glUniform4f,"r":_glUniformMatrix4fv,"k":_glUseProgram,"Ja":_glVertexAttrib2f,"Ka":_glVertexAttrib3f,"s":_glVertexAttrib4f,"c":_glVertexAttribPointer,"Yd":_glViewport,"A":_glfwCreateWindow,"pa":_glfwDefaultWindowHints,"$":_glfwDestroyWindow,"B":_glfwGetPrimaryMonitor,"i":_glfwGetTime,"oa":_glfwGetVideoModes,"qa":_glfwInit,"da":_glfwMakeContextCurrent,"ia":_glfwSetCharCallback,"ea":_glfwSetCursorEnterCallback,"ga":_glfwSetCursorPosCallback,"ka":_glfwSetDropCallback,"ra":_glfwSetErrorCallback,"ja":_glfwSetKeyCallback,"ha":_glfwSetMouseButtonCallback,"fa":_glfwSetScrollCallback,"la":_glfwSetWindowFocusCallback,"ma":_glfwSetWindowIconifyCallback,"W":_glfwSetWindowShouldClose,"na":_glfwSetWindowSizeCallback,"_":_glfwSwapBuffers,"ca":_glfwSwapInterval,"z":_glfwTerminate,"f":_glfwWindowHint,"ba":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["$d"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["ae"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ce"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["de"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ee"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["fe"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_mesh_generation.wasm b/examples/web/models/models_mesh_generation.wasm Binary files differdeleted file mode 100644 index ef81efe..0000000 --- a/examples/web/models/models_mesh_generation.wasm +++ /dev/null diff --git a/examples/web/models/models_mesh_picking.c b/examples/web/models/models_mesh_picking.c deleted file mode 100644 index 90105ef..0000000 --- a/examples/web/models/models_mesh_picking.c +++ /dev/null @@ -1,242 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Mesh picking in 3d mode, ground plane, triangle, mesh -* -* This example has been created using raylib 1.7 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2015 Ramon Santamaria (@raysan5) -* Example contributed by Joel Davis (@joeld42) -* -********************************************************************************************/ - -#include "raylib.h" -#include "raymath.h" - -#define FLT_MAX 3.40282347E+38F // Maximum value of a float, defined in <float.h> - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -Camera camera = { 0 }; - -Vector3 cubePosition = { 0.0f, 1.0f, 0.0f }; -Vector3 cubeSize = { 2.0f, 2.0f, 2.0f }; - -Ray ray = { 0 }; // Picking line ray - -Model tower = { 0 }; -Texture2D texture = { 0 }; - -Vector3 towerPos = { 0.0f, 0.0f, 0.0f }; -BoundingBox towerBBox = { 0 }; -bool hitMeshBBox = false; -bool hitTriangle = false; - -// Test triangle -Vector3 ta = (Vector3){ -25.0, 0.5, 0.0 }; -Vector3 tb = (Vector3){ -4.0, 2.5, 1.0 }; -Vector3 tc = (Vector3){ -8.0, 6.5, 0.0 }; - -Vector3 bary = { 0.0f, 0.0f, 0.0f }; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - 3d mesh picking"); - - // Define the camera to look into our 3d world - camera.position = (Vector3){ 10.0f, 8.0f, 10.0f }; // Camera position - camera.target = (Vector3){ 0.0f, 2.3f, 0.0f }; // Camera looking at point - camera.up = (Vector3){ 0.0f, 1.6f, 0.0f }; // Camera up vector (rotation towards target) - camera.fovy = 45.0f; // Camera field-of-view Y - camera.projection = CAMERA_PERSPECTIVE; // Camera mode type - - tower = LoadModel("resources/models/turret.obj"); // Load OBJ model - texture = LoadTexture("resources/models/turret_diffuse.png"); // Load model texture - tower.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture = texture; // Set model diffuse texture - - towerBBox = GetMeshBoundingBox(tower.meshes[0]); // Get mesh bounding box - - SetCameraMode(camera, CAMERA_FREE); // Set a free camera mode - - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadModel(tower); // Unload model from GPU - UnloadTexture(texture); // Unload texture from GPU - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera); // Update camera - - // Display information about closest hit - RayHitInfo nearestHit = { 0 }; - char *hitObjectName = "None"; - nearestHit.distance = FLT_MAX; - nearestHit.hit = false; - Color cursorColor = WHITE; - - // Get ray and test against ground, triangle, and mesh - ray = GetMouseRay(GetMousePosition(), camera); - - // Check ray collision aginst ground plane - RayHitInfo groundHitInfo = GetCollisionRayGround(ray, 0.0f); - - if ((groundHitInfo.hit) && (groundHitInfo.distance < nearestHit.distance)) - { - nearestHit = groundHitInfo; - cursorColor = GREEN; - hitObjectName = "Ground"; - } - - // Check ray collision against test triangle - RayHitInfo triHitInfo = GetCollisionRayTriangle(ray, ta, tb, tc); - - if ((triHitInfo.hit) && (triHitInfo.distance < nearestHit.distance)) - { - nearestHit = triHitInfo; - cursorColor = PURPLE; - hitObjectName = "Triangle"; - - bary = Vector3Barycenter(nearestHit.position, ta, tb, tc); - hitTriangle = true; - } - else hitTriangle = false; - - RayHitInfo meshHitInfo = { 0 }; - - // Check ray collision against bounding box first, before trying the full ray-mesh test - if (CheckCollisionRayBox(ray, towerBBox)) - { - hitMeshBBox = true; - - // Check ray collision against model - // NOTE: It considers model.transform matrix! - meshHitInfo = GetCollisionRayModel(ray, tower); - - if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance)) - { - nearestHit = meshHitInfo; - cursorColor = ORANGE; - hitObjectName = "Mesh"; - } - } - - hitMeshBBox = false; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - // Draw the tower - // WARNING: If scale is different than 1.0f, - // not considered by GetCollisionRayModel() - DrawModel(tower, towerPos, 1.0f, WHITE); - - // Draw the test triangle - DrawLine3D(ta, tb, PURPLE); - DrawLine3D(tb, tc, PURPLE); - DrawLine3D(tc, ta, PURPLE); - - // Draw the mesh bbox if we hit it - if (hitMeshBBox) DrawBoundingBox(towerBBox, LIME); - - // If we hit something, draw the cursor at the hit point - if (nearestHit.hit) - { - DrawCube(nearestHit.position, 0.3, 0.3, 0.3, cursorColor); - DrawCubeWires(nearestHit.position, 0.3, 0.3, 0.3, RED); - - Vector3 normalEnd; - normalEnd.x = nearestHit.position.x + nearestHit.normal.x; - normalEnd.y = nearestHit.position.y + nearestHit.normal.y; - normalEnd.z = nearestHit.position.z + nearestHit.normal.z; - - DrawLine3D(nearestHit.position, normalEnd, RED); - } - - DrawRay(ray, MAROON); - - DrawGrid(10, 10.0f); - - EndMode3D(); - - // Draw some debug GUI text - DrawText(TextFormat("Hit Object: %s", hitObjectName), 10, 50, 10, BLACK); - - if (nearestHit.hit) - { - int ypos = 70; - - DrawText(TextFormat("Distance: %3.2f", nearestHit.distance), 10, ypos, 10, BLACK); - - DrawText(TextFormat("Hit Pos: %3.2f %3.2f %3.2f", - nearestHit.position.x, - nearestHit.position.y, - nearestHit.position.z), 10, ypos + 15, 10, BLACK); - - DrawText(TextFormat("Hit Norm: %3.2f %3.2f %3.2f", - nearestHit.normal.x, - nearestHit.normal.y, - nearestHit.normal.z), 10, ypos + 30, 10, BLACK); - - if (hitTriangle) DrawText(TextFormat("Barycenter: %3.2f %3.2f %3.2f", bary.x, bary.y, bary.z), 10, ypos + 45, 10, BLACK); - } - - DrawText("Use Mouse to Move Camera", 10, 430, 10, GRAY); - - DrawText("(c) Turret 3D model by Alberto Cano", screenWidth - 200, screenHeight - 20, 10, GRAY); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -} diff --git a/examples/web/models/models_mesh_picking.data b/examples/web/models/models_mesh_picking.data deleted file mode 100644 index 25e3636..0000000 --- a/examples/web/models/models_mesh_picking.data +++ /dev/null @@ -1,3938 +0,0 @@ -# (c) 2018 Medieval Assets Pack by Alberto Cano
-# Licensed as Creative Commons Attribution-NonCommercial 4.0
-
-#
-# object turret
-#
-
-v 0.0000 13.3010 3.5973
-v 0.0000 12.1596 2.3386
-v 2.5639 12.1596 2.3386
-v 3.4913 13.3010 3.5973
-v 3.5203 14.0462 3.0738
-v 3.9444 14.0450 3.1421
-v 3.9444 14.0369 -0.0000
-v 3.4351 14.0369 -0.0000
-v 3.4352 14.0462 2.9719
-v 3.3643 13.3303 2.9127
-v 0.0000 13.3303 2.9127
-v 0.0000 13.3010 2.9740
-v 3.4352 13.3010 2.9740
-v 0.0000 14.0462 2.9719
-v 3.9444 13.2918 -0.0000
-v 3.9444 13.2998 3.1441
-v 3.4913 14.0462 3.5952
-v 3.3643 13.3303 -0.0000
-v 0.0000 13.3303 -0.0000
-v 0.0000 14.0462 3.5952
-v 2.5639 12.1504 -0.0000
-v 3.4352 13.2918 -0.0000
-v 3.5237 14.9316 3.0740
-v 3.9478 14.9305 3.1422
-v 3.4947 14.9316 3.5953
-v 3.5271 16.4764 1.4274
-v 3.9512 16.4752 1.4274
-v 3.9512 15.9080 2.0774
-v 3.5271 15.9092 2.0092
-v 1.8327 16.4815 3.5953
-v 1.8617 16.4815 3.0742
-v 2.5117 15.9086 3.0742
-v 2.4725 15.9086 3.5953
-v 3.9512 16.4757 3.1424
-v 3.4981 16.4769 3.5955
-v 3.5271 16.4769 3.0742
-v 2.5639 12.1596 -2.3386
-v 0.0000 12.1596 -2.3386
-v 0.0000 13.3010 -3.5973
-v 3.4913 13.3010 -3.5973
-v 3.5203 14.0462 -3.0738
-v 3.4351 14.0462 -2.9720
-v 3.9444 14.0450 -3.1421
-v 0.0000 13.3010 -2.9740
-v 0.0000 13.3303 -2.9127
-v 3.3643 13.3303 -2.9127
-v 3.4352 13.3010 -2.9740
-v 0.0000 14.0462 -2.9719
-v 3.9444 13.2998 -3.1441
-v 3.4913 14.0462 -3.5952
-v 0.0000 14.0462 -3.5952
-v 3.9478 14.9305 -3.1422
-v 3.5237 14.9316 -3.0740
-v 3.4947 14.9316 -3.5953
-v 3.9512 15.9080 -2.0774
-v 3.9512 16.4752 -1.4274
-v 3.5271 16.4764 -1.4274
-v 3.5271 15.9092 -2.0092
-v 2.5117 15.9086 -3.0742
-v 1.8617 16.4815 -3.0742
-v 1.8327 16.4815 -3.5954
-v 2.4725 15.9086 -3.5953
-v 3.4981 16.4769 -3.5955
-v 3.9512 16.4757 -3.1424
-v 3.5271 16.4769 -3.0742
-v -2.5639 12.1596 2.3386
-v -3.4913 13.3010 3.5973
-v -3.5203 14.0462 3.0738
-v -3.4351 14.0462 2.9720
-v -3.4351 14.0369 0.0000
-v -3.9444 14.0369 0.0000
-v -3.9444 14.0450 3.1421
-v -3.3643 13.3303 2.9127
-v -3.4351 13.3010 2.9740
-v -3.9444 13.2918 0.0000
-v -3.9444 13.2998 3.1441
-v -3.4913 14.0462 3.5952
-v -3.3643 13.3303 0.0000
-v -2.5639 12.1504 0.0000
-v -3.4351 13.2918 0.0000
-v -3.9478 14.9305 3.1422
-v -3.5237 14.9316 3.0740
-v -3.4947 14.9316 3.5954
-v -3.9512 15.9080 2.0774
-v -3.9512 16.4752 1.4274
-v -3.5271 16.4764 1.4274
-v -3.5271 15.9092 2.0092
-v -2.5117 15.9086 3.0742
-v -1.8617 16.4815 3.0742
-v -1.8327 16.4815 3.5954
-v -2.4725 15.9086 3.5953
-v -3.4981 16.4769 3.5955
-v -3.9512 16.4757 3.1424
-v -3.5271 16.4769 3.0742
-v -2.5639 12.1596 -2.3386
-v -3.4913 13.3010 -3.5972
-v -3.5203 14.0462 -3.0738
-v -3.9444 14.0450 -3.1421
-v -3.4351 14.0462 -2.9719
-v -3.3643 13.3303 -2.9127
-v -3.4351 13.3010 -2.9740
-v -3.9444 13.2998 -3.1441
-v -3.4913 14.0462 -3.5952
-v -3.5237 14.9316 -3.0740
-v -3.9478 14.9305 -3.1422
-v -3.4947 14.9316 -3.5953
-v -3.5271 16.4764 -1.4274
-v -3.9512 16.4752 -1.4274
-v -3.9512 15.9080 -2.0774
-v -3.5271 15.9092 -2.0092
-v -1.8327 16.4815 -3.5953
-v -1.8617 16.4815 -3.0742
-v -2.5117 15.9086 -3.0742
-v -2.4725 15.9086 -3.5953
-v -3.9512 16.4757 -3.1424
-v -3.4981 16.4769 -3.5955
-v -3.5271 16.4769 -3.0742
-v 0.1550 14.0277 -3.1544
-v 0.1550 14.0277 -3.5335
-v 0.1550 16.9018 -3.5335
-v 0.1550 16.9018 -3.1544
-v -0.5341 14.0277 -3.5335
-v -0.5341 16.9018 -3.5335
-v -0.5341 14.0277 -3.1544
-v -0.5341 16.9018 -3.1544
-v -3.5170 14.0277 -0.3456
-v -3.8961 14.0277 -0.3456
-v -3.8961 16.9018 -0.3456
-v -3.5170 16.9018 -0.3456
-v -3.8961 14.0277 0.3435
-v -3.8961 16.9018 0.3435
-v -3.5170 14.0277 0.3435
-v -3.5170 16.9018 0.3435
-v -0.3446 14.0277 3.1662
-v -0.3446 14.0277 3.5453
-v -0.3446 16.9018 3.5453
-v -0.3446 16.9018 3.1662
-v 0.3445 14.0277 3.5453
-v 0.3445 16.9018 3.5453
-v 0.3445 14.0277 3.1662
-v 0.3445 16.9018 3.1662
-v 3.5160 14.0277 0.3435
-v 3.8951 14.0277 0.3435
-v 3.8951 16.9018 0.3435
-v 3.5160 16.9018 0.3435
-v 3.8951 14.0277 -0.3456
-v 3.8951 16.9018 -0.3456
-v 3.5160 14.0277 -0.3456
-v 3.5160 16.9018 -0.3456
-v 0.0000 8.6187 2.3766
-v 0.4715 8.6467 2.3766
-v 0.4598 9.7167 2.3896
-v -0.0117 10.0591 2.3896
-v 0.8403 8.5183 2.4160
-v 0.8403 8.5183 2.3077
-v 0.8403 8.6724 2.3077
-v 0.8403 8.6724 2.4160
-v 0.7068 9.8138 2.4290
-v 0.7068 9.8138 2.3207
-v -0.0117 10.3117 2.3207
-v -0.0117 10.3117 2.4290
-v -0.8403 8.6724 2.4160
-v -0.8403 8.6724 2.3077
-v -0.8403 8.5183 2.3077
-v -0.8403 8.5183 2.4160
-v -0.7186 8.5183 2.4160
-v -0.7186 8.5183 2.3077
-v -0.0000 8.4646 2.3077
-v -0.0000 8.4646 2.4160
-v 0.7185 8.5183 2.5347
-v 0.7185 8.6724 2.5347
-v 0.4715 8.6467 2.5347
-v 0.4598 9.7167 2.4290
-v -0.0117 10.0591 2.4290
-v -0.7186 8.6724 2.5347
-v -0.7186 8.5183 2.5347
-v -0.4715 8.6567 2.5347
-v -0.0000 8.4646 2.5347
-v -0.0000 8.6187 2.5347
-v -0.4833 9.7167 2.3896
-v -0.4715 8.6567 2.3766
-v -0.7303 9.8138 2.3207
-v -0.7302 9.8138 2.4290
-v 0.7185 8.5183 2.3077
-v 0.7185 8.5183 2.4160
-v -0.4832 9.7167 2.4290
-v 0.4715 8.6467 2.4160
-v -0.4716 8.6567 2.4160
-v -0.0000 8.6187 2.4160
-v -0.7186 8.6724 2.4160
-v -0.7186 8.6724 2.3077
-v 0.7185 8.6724 2.4160
-v 0.7185 8.6724 2.3077
-v 0.8403 8.5183 2.5347
-v 0.8403 8.6724 2.5347
-v -0.8403 8.6724 2.5347
-v -0.8403 8.5183 2.5347
-v 2.6080 8.6187 -0.0010
-v 2.6080 8.6467 -0.4725
-v 2.6210 9.7167 -0.4608
-v 2.6210 10.0591 0.0107
-v 2.6474 8.5183 -0.8413
-v 2.5392 8.5183 -0.8413
-v 2.5392 8.6724 -0.8413
-v 2.6474 8.6724 -0.8413
-v 2.6604 9.8138 -0.7079
-v 2.5522 9.8138 -0.7078
-v 2.5522 10.3117 0.0107
-v 2.6604 10.3117 0.0107
-v 2.6474 8.6724 0.8393
-v 2.5392 8.6724 0.8393
-v 2.5392 8.5183 0.8393
-v 2.6474 8.5183 0.8393
-v 2.6474 8.5183 0.7175
-v 2.5392 8.5183 0.7175
-v 2.5392 8.4646 -0.0010
-v 2.6474 8.4646 -0.0010
-v 2.7661 8.5183 -0.7195
-v 2.7661 8.6724 -0.7195
-v 2.7661 8.6467 -0.4725
-v 2.6604 9.7167 -0.4609
-v 2.6604 10.0591 0.0107
-v 2.7661 8.6724 0.7175
-v 2.7661 8.5183 0.7175
-v 2.7661 8.6567 0.4705
-v 2.7661 8.4646 -0.0010
-v 2.7661 8.6187 -0.0010
-v 2.6210 9.7167 0.4822
-v 2.6080 8.6567 0.4705
-v 2.5522 9.8138 0.7292
-v 2.6604 9.8138 0.7292
-v 2.5392 8.5183 -0.7196
-v 2.6474 8.5183 -0.7195
-v 2.6604 9.7167 0.4822
-v 2.6474 8.6467 -0.4725
-v 2.6474 8.6567 0.4705
-v 2.6474 8.6187 -0.0010
-v 2.6474 8.6724 0.7175
-v 2.5392 8.6724 0.7175
-v 2.6474 8.6724 -0.7195
-v 2.5392 8.6724 -0.7196
-v 2.7661 8.5183 -0.8413
-v 2.7661 8.6724 -0.8413
-v 2.7661 8.6724 0.8393
-v 2.7661 8.5183 0.8393
-v -2.6159 8.6187 -0.0010
-v -2.6159 8.6467 0.4705
-v -2.6289 9.7167 0.4588
-v -2.6289 10.0591 -0.0127
-v -2.6553 8.5183 0.8393
-v -2.5470 8.5183 0.8393
-v -2.5470 8.6724 0.8393
-v -2.6553 8.6724 0.8393
-v -2.6683 9.8138 0.7058
-v -2.5600 9.8138 0.7058
-v -2.5600 10.3117 -0.0127
-v -2.6683 10.3117 -0.0127
-v -2.6553 8.6724 -0.8413
-v -2.5470 8.6724 -0.8413
-v -2.5470 8.5183 -0.8413
-v -2.6553 8.5183 -0.8413
-v -2.6553 8.5183 -0.7195
-v -2.5470 8.5183 -0.7195
-v -2.5470 8.4646 -0.0010
-v -2.6553 8.4646 -0.0010
-v -2.7740 8.5183 0.7175
-v -2.7740 8.6724 0.7175
-v -2.7740 8.6467 0.4705
-v -2.6683 9.7167 0.4589
-v -2.6683 10.0591 -0.0127
-v -2.7740 8.6724 -0.7195
-v -2.7740 8.5183 -0.7195
-v -2.7740 8.6567 -0.4725
-v -2.7740 8.4646 -0.0010
-v -2.7740 8.6187 -0.0010
-v -2.6289 9.7167 -0.4843
-v -2.6159 8.6567 -0.4725
-v -2.5600 9.8138 -0.7312
-v -2.6683 9.8138 -0.7312
-v -2.5470 8.5183 0.7175
-v -2.6553 8.5183 0.7175
-v -2.6683 9.7167 -0.4842
-v -2.6553 8.6467 0.4705
-v -2.6553 8.6567 -0.4725
-v -2.6553 8.6187 -0.0010
-v -2.6553 8.6724 -0.7195
-v -2.5470 8.6724 -0.7195
-v -2.6553 8.6724 0.7175
-v -2.5470 8.6724 0.7175
-v -2.7740 8.5183 0.8393
-v -2.7740 8.6724 0.8393
-v -2.7740 8.6724 -0.8413
-v -2.7740 8.5183 -0.8413
-v -2.5639 0.0000 -2.3386
-v -2.5639 0.0000 2.3365
-v -2.5639 12.1411 2.3365
-v 2.5639 -0.0000 2.3365
-v 2.5639 12.1411 2.3365
-v 2.5639 -0.0000 -2.3386
-v -3.3222 12.8680 -0.0010
-v -3.3222 12.8680 -2.9994
-v -3.3222 11.9932 -2.9994
-v -3.3222 11.8321 -0.0010
-v -0.0000 12.8680 2.9974
-v -3.3222 12.8680 2.9974
-v -3.3222 11.9932 2.9974
-v -0.0000 11.8320 2.9974
-v 3.3221 12.8680 -0.0010
-v 3.3221 12.8680 2.9974
-v 3.3221 11.9932 2.9974
-v 3.3221 11.8320 -0.0010
-v -0.0000 12.8680 -2.9994
-v 3.3221 12.8680 -2.9994
-v 3.3221 11.9932 -2.9994
-v -0.0000 11.8320 -2.9994
-v -2.5639 11.9932 -2.3386
-v -0.0000 11.8320 -2.3386
-v 2.5639 11.9932 -2.3386
-v 2.5639 11.8321 -0.0010
-v 2.5639 11.9932 2.3365
-v -0.0000 11.8321 2.3365
-v -2.5639 11.9932 2.3365
-v -2.5639 11.8321 -0.0010
-v -2.5639 12.8680 -2.3386
-v -2.5639 12.8680 -0.0010
-v -2.5639 12.8680 2.3365
-v -0.0000 12.8680 2.3365
-v 2.5639 12.8680 2.3365
-v 2.5639 12.8680 -0.0010
-v 2.5639 12.8680 -2.3386
-v -0.0000 12.8680 -2.3386
-v -3.3222 6.6605 -0.0010
-v -3.3222 6.6605 -2.9994
-v -3.3222 5.7858 -2.9994
-v -3.3222 5.6246 -0.0010
-v -0.0000 6.6605 2.9974
-v -3.3222 6.6605 2.9974
-v -3.3222 5.7858 2.9974
-v -0.0000 5.6246 2.9974
-v 3.3221 6.6605 -0.0010
-v 3.3221 6.6605 2.9974
-v 3.3221 5.7858 2.9974
-v 3.3221 5.6246 -0.0010
-v -0.0000 6.6605 -2.9994
-v 3.3221 6.6605 -2.9994
-v 3.3221 5.7858 -2.9994
-v -0.0000 5.6246 -2.9994
-v -2.5639 5.7858 -2.3386
-v -0.0000 5.6246 -2.3386
-v 2.5639 5.7858 -2.3386
-v 2.5639 5.6246 -0.0010
-v 2.5639 5.7858 2.3365
-v -0.0000 5.6246 2.3365
-v -2.5639 5.7858 2.3365
-v -2.5639 5.6246 -0.0010
-v -2.5639 6.6605 -2.3386
-v -2.5639 6.6605 -0.0010
-v -2.5639 6.6605 2.3365
-v -0.0000 6.6605 2.3365
-v 2.5639 6.6605 2.3365
-v 2.5639 6.6605 -0.0010
-v 2.5639 6.6605 -2.3386
-v -0.0000 6.6605 -2.3386
-v -2.6103 9.3882 2.4561
-v -2.6767 9.3882 1.9558
-v -2.9138 6.4859 1.8341
-v -2.9138 6.4859 2.7406
-v -2.9138 12.2904 1.8341
-v -2.9138 12.2904 2.7406
-v -1.9967 6.4859 2.7406
-v -2.0923 9.3882 2.4561
-v -1.9967 11.6821 2.7406
-v -1.9967 6.4859 1.8341
-v -2.1587 9.3882 1.9558
-v -1.9967 11.6821 1.8341
-v -2.6103 9.4353 -2.4582
-v -2.9138 6.5331 -2.7426
-v -2.9138 6.5331 -1.8362
-v -2.6767 9.4353 -1.9578
-v -2.9138 12.3375 -1.8362
-v -2.9138 12.3375 -2.7426
-v -2.0923 9.4353 -2.4581
-v -1.9967 6.5331 -2.7426
-v -1.9967 11.7293 -2.7426
-v -2.1587 9.4353 -1.9578
-v -1.9967 6.5331 -1.8362
-v -1.9967 11.7293 -1.8362
-v -2.6103 2.9022 -2.4582
-v -2.9138 0.0000 -2.7426
-v -2.9138 0.0000 -1.8362
-v -2.6767 2.9022 -1.9578
-v -2.9138 5.8044 -1.8362
-v -2.9138 5.8044 -2.7426
-v -2.0923 2.9022 -2.4581
-v -1.9967 0.0000 -2.7426
-v -1.9967 6.4231 -2.7426
-v -2.1587 2.9022 -1.9578
-v -1.9967 0.0000 -1.8362
-v -1.9967 6.4231 -1.8362
-v 2.6103 9.4517 2.4561
-v 2.9138 6.5495 2.7406
-v 2.9138 6.5495 1.8341
-v 2.6767 9.4517 1.9558
-v 2.9138 12.3539 1.8341
-v 2.9138 12.3539 2.7406
-v 2.0923 9.4517 2.4561
-v 1.9967 6.5495 2.7406
-v 1.9967 11.7456 2.7406
-v 2.1587 9.4517 1.9558
-v 1.9967 6.5495 1.8341
-v 1.9967 11.7456 1.8341
-v 2.6103 2.9022 -2.4581
-v 2.6767 2.9022 -1.9578
-v 2.9138 -0.0000 -1.8362
-v 2.9138 -0.0000 -2.7426
-v 2.9138 5.8044 -1.8362
-v 2.9138 5.8044 -2.7426
-v 1.9967 -0.0000 -2.7426
-v 2.0923 2.9022 -2.4581
-v 1.9967 6.4231 -2.7426
-v 1.9967 -0.0000 -1.8362
-v 2.1587 2.9022 -1.9578
-v 1.9967 6.4231 -1.8362
-v 2.6103 9.4353 -2.4582
-v 2.6767 9.4353 -1.9578
-v 2.9138 6.5331 -1.8362
-v 2.9138 6.5331 -2.7427
-v 2.9138 12.3375 -1.8362
-v 2.9138 12.3375 -2.7427
-v 1.9967 6.5331 -2.7427
-v 2.0923 9.4353 -2.4581
-v 1.9967 11.7293 -2.7427
-v 1.9967 6.5331 -1.8362
-v 2.1587 9.4353 -1.9578
-v 1.9967 11.7293 -1.8362
-v 2.6103 2.9022 2.4561
-v 2.9138 -0.0000 2.7406
-v 2.9138 -0.0000 1.8341
-v 2.6767 2.9022 1.9558
-v 2.9138 5.8044 1.8341
-v 2.9138 5.8044 2.7406
-v 2.0923 2.9022 2.4561
-v 1.9967 -0.0000 2.7406
-v 1.9967 6.4231 2.7406
-v 2.1587 2.9022 1.9558
-v 1.9967 -0.0000 1.8341
-v 1.9967 6.4231 1.8341
-v -2.6103 2.9022 2.4561
-v -2.6767 2.9022 1.9558
-v -2.9138 0.0000 1.8341
-v -2.9138 0.0000 2.7406
-v -2.9138 5.8044 1.8341
-v -2.9138 5.8044 2.7406
-v -1.9967 0.0000 2.7406
-v -2.0923 2.9022 2.4561
-v -1.9967 6.4231 2.7406
-v -1.9967 0.0000 1.8341
-v -2.1587 2.9022 1.9558
-v -1.9967 6.4231 1.8341
-v -1.5453 5.6703 -3.5469
-v -1.5453 7.5835 -3.4309
-v -0.7727 7.5835 -3.4309
-v -0.7727 4.7854 -3.5469
-v -1.5453 9.4968 -3.2987
-v -0.7727 9.4968 -3.2987
-v -1.5453 11.4101 -3.3804
-v -0.7727 11.4101 -3.3804
-v -1.5453 13.3234 -3.5469
-v -0.7727 13.3234 -3.5469
-v -0.0000 7.5835 -3.4309
-v -0.0000 4.2830 -3.5469
-v -0.0000 9.4968 -3.2987
-v -0.0000 11.4101 -3.3804
-v -0.0000 13.3234 -3.5469
-v 0.7726 7.5835 -3.4309
-v 0.7726 4.7854 -3.5469
-v 0.7726 9.4968 -3.2987
-v 0.7726 11.4101 -3.3804
-v 0.7726 13.3234 -3.5469
-v 1.5453 7.5835 -3.4309
-v 1.5453 5.6702 -3.5469
-v 1.5453 9.4968 -3.2987
-v 1.5453 11.4101 -3.3804
-v 1.5453 13.3234 -3.5469
-v 0.0000 23.5750 -0.0000
-v -4.1897 16.4768 -3.9339
-v -4.1897 16.4768 3.9339
-v 4.1897 16.4768 3.9339
-v 4.1897 16.4768 -3.9339
-v -1.2971 3.7738 -2.1572
-v -1.2971 3.7738 -2.6666
-v -1.7173 3.6544 -2.6666
-v -1.7173 3.6544 -2.1572
-v -1.2971 -0.0000 -2.6666
-v -1.2971 3.3171 -2.6666
-v -1.2971 3.3171 -2.4156
-v -1.2971 -0.0000 -2.4156
-v -1.7173 -0.0000 -2.6666
-v -1.7173 3.3171 -2.6666
-v -1.7173 -0.0000 -2.1572
-v -1.7173 3.3171 -2.1572
-v 1.2970 3.7738 -2.6666
-v 1.2970 3.7738 -2.1572
-v 1.7173 3.6544 -2.1572
-v 1.7173 3.6544 -2.6666
-v 1.2970 -0.0000 -2.4156
-v 1.2970 3.3171 -2.4156
-v 1.2970 3.3171 -2.6666
-v 1.2970 -0.0000 -2.6666
-v 1.7173 -0.0000 -2.6666
-v 1.7173 3.3171 -2.6666
-v 1.7173 3.3171 -2.1572
-v 1.7173 -0.0000 -2.1572
-v -0.0000 4.3176 -2.6666
-v -0.0000 4.3176 -2.1572
-v -0.0000 3.7437 -2.6666
-v -0.0000 3.7437 -2.4156
-v -0.0000 -0.0000 -2.4156
-# 518 vertices
-
-vn 0.0000 -0.7408 0.6718
-vn 0.0016 1.0000 -0.0028
-vn -0.0000 0.9024 0.4309
-vn 0.0000 -0.0028 -1.0000
-vn 1.0000 0.0000 -0.0000
-vn 0.4189 -0.8046 0.4210
-vn 0.7071 0.0020 0.7071
-vn -0.0000 1.0000 -0.0000
-vn 0.0000 0.0028 1.0000
-vn 0.6366 -0.7712 0.0024
-vn 0.4322 0.9018 -0.0014
-vn -1.0000 -0.0000 0.0000
-vn 0.1589 -0.0004 -0.9873
-vn -0.9985 0.0039 -0.0555
-vn 0.7071 -0.0029 0.7071
-vn 0.0524 -0.7346 -0.6765
-vn -0.6635 -0.7469 -0.0434
-vn 0.7071 -0.0016 0.7071
-vn -1.0000 0.0014 -0.0007
-vn 1.0000 -0.0014 0.0007
-vn 0.1062 -0.7327 -0.6723
-vn -0.0001 -0.0001 1.0000
-vn -0.0000 0.0001 -1.0000
-vn -0.6920 -0.7204 -0.0452
-vn 0.0000 -0.7408 -0.6718
-vn 0.0016 1.0000 0.0028
-vn -0.0000 0.9024 -0.4309
-vn 0.0000 -0.0028 1.0000
-vn 0.4189 -0.8046 -0.4210
-vn 0.7071 0.0020 -0.7071
-vn -0.0000 1.0000 0.0000
-vn -0.0000 0.0028 -1.0000
-vn 0.6366 -0.7712 -0.0024
-vn 0.4322 0.9018 0.0014
-vn 0.1589 -0.0004 0.9873
-vn -0.9985 0.0039 0.0555
-vn 0.7071 -0.0029 -0.7071
-vn 0.0524 -0.7346 0.6765
-vn -0.6635 -0.7469 0.0434
-vn 0.7071 -0.0016 -0.7071
-vn -1.0000 0.0014 0.0007
-vn 1.0000 -0.0014 -0.0007
-vn 0.1062 -0.7327 0.6723
-vn -0.0001 -0.0001 -1.0000
-vn -0.0000 0.0001 1.0000
-vn -0.6920 -0.7204 0.0452
-vn -0.0000 -0.7408 0.6718
-vn -0.0016 1.0000 -0.0028
-vn 0.0000 0.9024 0.4309
-vn -0.0000 -0.0028 -1.0000
-vn -1.0000 0.0000 0.0000
-vn -0.4189 -0.8046 0.4210
-vn -0.7071 0.0020 0.7071
-vn 0.0000 1.0000 -0.0000
-vn -0.6366 -0.7712 0.0024
-vn -0.4322 0.9018 -0.0014
-vn -0.4321 0.9018 -0.0014
-vn 1.0000 -0.0000 -0.0000
-vn -0.1589 -0.0004 -0.9873
-vn 0.9985 0.0039 -0.0555
-vn -0.7071 -0.0029 0.7071
-vn -0.0524 -0.7346 -0.6765
-vn 0.6635 -0.7469 -0.0434
-vn -0.7071 -0.0016 0.7071
-vn 1.0000 0.0014 -0.0007
-vn -1.0000 -0.0014 0.0007
-vn -0.1062 -0.7327 -0.6723
-vn 0.0001 -0.0001 1.0000
-vn 0.0000 0.0001 -1.0000
-vn 0.6920 -0.7204 -0.0452
-vn -0.0000 -0.7408 -0.6718
-vn -0.0016 1.0000 0.0028
-vn 0.0000 0.9024 -0.4309
-vn -0.0000 -0.0028 1.0000
-vn -0.4189 -0.8046 -0.4210
-vn -0.7071 0.0020 -0.7071
-vn 0.0000 1.0000 0.0000
-vn -0.6366 -0.7712 -0.0024
-vn -0.4321 0.9018 0.0014
-vn -0.4322 0.9018 0.0014
-vn -0.1589 -0.0004 0.9873
-vn 0.9985 0.0039 0.0555
-vn -0.7071 -0.0029 -0.7071
-vn -0.0524 -0.7346 0.6765
-vn 0.6635 -0.7469 0.0434
-vn -0.7071 -0.0016 -0.7071
-vn 1.0000 0.0014 0.0007
-vn -1.0000 -0.0014 -0.0007
-vn -0.1062 -0.7327 0.6723
-vn 0.0001 -0.0001 -1.0000
-vn 0.0000 0.0001 1.0000
-vn 0.6920 -0.7204 0.0452
-vn -0.0000 0.0000 -1.0000
-vn 0.0000 0.0000 1.0000
-vn -0.0035 -0.0104 0.9999
-vn 1.0000 -0.0000 -0.0002
-vn 0.5696 0.8219 -0.0001
-vn -0.0745 -0.9972 0.0000
-vn -0.0000 -0.0000 1.0000
-vn -0.0000 0.0000 1.0000
-vn 0.0033 -0.0104 0.9999
-vn -0.5696 0.8219 0.0001
-vn 0.0745 -0.9972 0.0000
-vn 0.0000 -0.0000 1.0000
-vn -0.9999 -0.0109 0.0008
-vn -0.5875 -0.8092 0.0009
-vn 0.5875 -0.8092 -0.0008
-vn 0.9999 0.0111 -0.0004
-vn 0.0803 0.9968 0.0001
-vn -0.0593 0.9982 -0.0000
-vn -0.0027 -0.0118 0.9999
-vn -0.9999 -0.0102 0.0001
-vn 0.9999 0.0103 -0.0002
-vn 0.0029 -0.0117 0.9999
-vn 1.0000 -0.0000 0.0001
-vn -0.1034 0.9946 0.0000
-vn -0.0593 0.9982 0.0000
-vn 0.0803 0.9968 -0.0000
-vn 0.0634 0.9980 -0.0000
-vn -1.0000 0.0000 0.0001
-vn -0.0000 -1.0000 0.0000
-vn 0.0000 -1.0000 0.0000
-vn 0.0000 -1.0000 -0.0000
-vn -0.0001 0.0000 1.0000
-vn 0.9999 -0.0104 0.0035
-vn -0.0001 0.0000 -1.0000
-vn -0.0001 0.8219 -0.5696
-vn -0.0000 -0.9972 0.0745
-vn 1.0000 -0.0000 0.0000
-vn 0.9999 -0.0104 -0.0034
-vn 0.0001 0.8219 0.5696
-vn 0.0000 -0.9972 -0.0745
-vn 0.0008 -0.0109 0.9999
-vn 0.0008 -0.8092 0.5875
-vn -0.0008 -0.8092 -0.5875
-vn -0.0004 0.0111 -0.9999
-vn 0.0000 0.9968 -0.0803
-vn -0.0000 0.9982 0.0593
-vn 0.9999 -0.0118 0.0027
-vn 0.0001 -0.0102 0.9999
-vn -0.0002 0.0103 -0.9999
-vn 0.9999 -0.0117 -0.0029
-vn 0.0001 -0.0000 -1.0000
-vn 0.0000 0.9946 0.1034
-vn 0.0000 0.9982 0.0593
-vn 0.0000 0.9968 -0.0804
-vn 0.0000 0.9980 -0.0634
-vn 0.0001 -0.0000 1.0000
-vn -0.0000 -0.9972 -0.0745
-vn -0.0000 -1.0000 -0.0000
-vn -0.9999 -0.0104 -0.0035
-vn 0.0002 -0.0000 1.0000
-vn -1.0000 0.0000 -0.0000
-vn -0.9999 -0.0104 0.0033
-vn -0.0008 -0.0109 -0.9999
-vn -0.0009 -0.8092 -0.5875
-vn 0.0007 -0.8092 0.5875
-vn 0.0004 0.0111 0.9999
-vn -0.0001 0.9968 0.0803
-vn 0.0000 0.9982 -0.0593
-vn -0.9999 -0.0118 -0.0027
-vn -0.0001 -0.0102 -0.9999
-vn 0.0002 0.0103 0.9999
-vn -0.9999 -0.0117 0.0029
-vn -0.0001 -0.0000 1.0000
-vn 0.0000 0.9946 -0.1034
-vn 0.0000 0.9968 0.0803
-vn 0.0000 0.9980 0.0634
-vn -1.0000 0.0000 -0.0001
-vn 0.0000 -0.0000 -1.0000
-vn -0.0547 -0.9980 0.0314
-vn -0.0263 -0.9978 -0.0603
-vn 0.0547 -0.9980 -0.0314
-vn 0.0263 -0.9978 0.0603
-vn 0.0547 -0.9980 0.0314
-vn -0.0263 -0.9978 0.0603
-vn -0.0547 -0.9980 -0.0314
-vn 0.0263 -0.9978 -0.0603
-vn -0.9945 0.0939 0.0469
-vn -0.9945 -0.0939 0.0469
-vn 0.0000 0.0976 0.9952
-vn -0.0469 -0.1106 0.9928
-vn 0.9980 0.0430 -0.0471
-vn 0.9974 -0.0543 -0.0471
-vn -0.0000 0.0419 -0.9991
-vn -0.0199 -0.0471 -0.9987
-vn -0.9945 0.0939 -0.0469
-vn -0.9945 -0.0939 -0.0469
-vn 0.0000 0.0976 -0.9952
-vn -0.0469 -0.1106 -0.9928
-vn 0.9980 0.0430 0.0471
-vn 0.9974 -0.0543 0.0471
-vn 0.0000 0.0419 0.9991
-vn -0.0199 -0.0471 0.9987
-vn 0.0375 -0.0870 -0.9955
-vn 0.9983 -0.0354 0.0471
-vn 0.0162 -0.0377 0.9992
-vn 0.9945 0.0939 0.0469
-vn 0.9945 -0.0939 0.0469
-vn -0.0000 0.0976 0.9952
-vn 0.0469 -0.1106 0.9928
-vn -0.9980 0.0430 -0.0471
-vn -0.9974 -0.0543 -0.0471
-vn 0.0199 -0.0471 -0.9987
-vn 0.9945 0.0939 -0.0469
-vn 0.9945 -0.0939 -0.0469
-vn -0.0000 0.0976 -0.9952
-vn -0.0375 -0.0870 -0.9955
-vn -0.9980 0.0430 0.0471
-vn -0.9983 -0.0354 0.0471
-vn -0.0162 -0.0377 0.9992
-vn 0.0469 -0.1106 -0.9928
-vn -0.9974 -0.0543 0.0471
-vn 0.0199 -0.0471 0.9987
-vn -0.0375 -0.0870 0.9955
-vn -0.9983 -0.0354 -0.0471
-vn -0.0162 -0.0377 -0.9992
-vn 0.0375 -0.0870 0.9955
-vn 0.9983 -0.0354 -0.0471
-vn 0.0162 -0.0377 -0.9992
-vn 0.0281 0.0492 -0.9984
-vn 0.0141 0.0591 -0.9982
-vn 0.0101 0.0563 -0.9984
-vn 0.0163 0.0408 -0.9990
-vn -0.0000 0.0132 -0.9999
-vn -0.0000 -0.0647 -0.9979
-vn -0.0000 -0.0867 -0.9962
-vn -0.0000 0.0535 -0.9986
-vn -0.0000 0.0380 -0.9993
-vn -0.0101 0.0563 -0.9984
-vn -0.0163 0.0408 -0.9990
-vn -0.0141 0.0591 -0.9982
-vn -0.0281 0.0492 -0.9984
-vn -0.8612 0.5083 0.0000
-vn 0.0000 0.4847 0.8747
-vn 0.8612 0.5083 -0.0000
-vn -0.0000 0.4847 -0.8747
-vn -0.2731 0.9620 0.0000
-vn 0.2731 0.9620 0.0000
-vn 0.3867 0.9222 0.0000
-vn -0.0000 -0.0000 -1.0000
-vn 0.3124 -0.9499 -0.0000
-vn -0.3867 0.9222 0.0000
-vn -0.3124 -0.9499 0.0000
-# 244 vertex normals
-
-vt 0.4672 0.7287 0.0000
-vt 0.4672 0.6812 0.0000
-vt 0.5381 0.6812 0.0000
-vt 0.5637 0.7287 0.0000
-vt 0.4511 0.6743 0.0000
-vt 0.4498 0.6669 0.0000
-vt 0.5101 0.6669 0.0000
-vt 0.5101 0.6758 0.0000
-vt 0.4531 0.6758 0.0000
-vt 0.6996 0.8663 0.0000
-vt 0.6083 0.8663 0.0000
-vt 0.6083 0.8881 0.0000
-vt 0.6996 0.8881 0.0000
-vt 0.6083 0.9203 0.0000
-vt 0.6996 0.9203 0.0000
-vt 0.6348 0.6259 0.0000
-vt 0.6348 0.6557 0.0000
-vt 0.5033 0.6557 0.0000
-vt 0.5033 0.6259 0.0000
-vt 0.4860 0.7374 0.0000
-vt 0.4587 0.8045 0.0000
-vt 0.4433 0.8046 0.0000
-vt 0.7663 0.6259 0.0000
-vt 0.7905 0.6258 0.0000
-vt 0.7905 0.6557 0.0000
-vt 0.7664 0.6557 0.0000
-vt 0.5578 0.5104 0.0000
-vt 0.6319 0.5104 0.0000
-vt 0.6319 0.6024 0.0000
-vt 0.5578 0.6024 0.0000
-vt 0.4411 0.6748 0.0000
-vt 0.4531 0.7357 0.0000
-vt 0.4411 0.7357 0.0000
-vt 0.5654 0.8042 0.0000
-vt 0.5654 0.7371 0.0000
-vt 0.5169 0.8663 0.0000
-vt 0.5169 0.8881 0.0000
-vt 0.5169 0.9203 0.0000
-vt 0.7344 0.2540 0.0000
-vt 0.7344 0.2807 0.0000
-vt 0.7215 0.2807 0.0000
-vt 0.7215 0.2540 0.0000
-vt 0.7532 0.2524 0.0000
-vt 0.7532 0.2800 0.0000
-vt 0.7370 0.2800 0.0000
-vt 0.7370 0.2524 0.0000
-vt 0.8440 0.5063 0.0000
-vt 0.8440 0.5248 0.0000
-vt 0.8307 0.5248 0.0000
-vt 0.8307 0.5063 0.0000
-vt 0.7344 0.3486 0.0000
-vt 0.7215 0.3486 0.0000
-vt 0.7215 0.3237 0.0000
-vt 0.7344 0.3237 0.0000
-vt 0.7532 0.3506 0.0000
-vt 0.7370 0.3506 0.0000
-vt 0.7370 0.3238 0.0000
-vt 0.7532 0.3238 0.0000
-vt 0.8440 0.5570 0.0000
-vt 0.8307 0.5570 0.0000
-vt 0.8364 0.5997 0.0000
-vt 0.7950 0.5997 0.0000
-vt 0.8096 0.5854 0.0000
-vt 0.8364 0.5608 0.0000
-vt 0.8663 0.5452 0.0000
-vt 0.8798 0.5570 0.0000
-vt 0.8093 0.5451 0.0000
-vt 0.7959 0.5570 0.0000
-vt 0.8620 0.5854 0.0000
-vt 0.8784 0.5997 0.0000
-vt 0.6756 0.2660 0.0000
-vt 0.6505 0.2660 0.0000
-vt 0.6505 0.4622 0.0000
-vt 0.6756 0.4622 0.0000
-vt 0.6058 0.3002 0.0000
-vt 0.6440 0.3002 0.0000
-vt 0.6440 0.4741 0.0000
-vt 0.6058 0.4741 0.0000
-vt 0.6280 0.0055 0.0000
-vt 0.6545 0.0069 0.0000
-vt 0.6548 0.0671 0.0000
-vt 0.6284 0.0865 0.0000
-vt 0.6000 0.2239 0.0000
-vt 0.6163 0.2239 0.0000
-vt 0.6163 0.2472 0.0000
-vt 0.6000 0.2472 0.0000
-vt 0.6822 0.1033 0.0000
-vt 0.6903 0.1033 0.0000
-vt 0.6903 0.1767 0.0000
-vt 0.6822 0.1767 0.0000
-vt 0.5852 0.2472 0.0000
-vt 0.5852 0.2239 0.0000
-vt 0.6098 0.1405 0.0000
-vt 0.6145 0.1405 0.0000
-vt 0.6140 0.1724 0.0000
-vt 0.6093 0.1724 0.0000
-vt 0.6552 0.1246 0.0000
-vt 0.6681 0.1246 0.0000
-vt 0.6659 0.1454 0.0000
-vt 0.6571 0.0825 0.0000
-vt 0.6723 0.0885 0.0000
-vt 0.6279 0.1193 0.0000
-vt 0.6279 0.1037 0.0000
-vt 0.6681 0.2453 0.0000
-vt 0.6552 0.2453 0.0000
-vt 0.6668 0.2246 0.0000
-vt 0.6507 0.1850 0.0000
-vt 0.6636 0.1850 0.0000
-vt 0.6018 0.0674 0.0000
-vt 0.6015 0.0077 0.0000
-vt 0.6903 0.2501 0.0000
-vt 0.6822 0.2501 0.0000
-vt 0.6135 0.2044 0.0000
-vt 0.6089 0.2043 0.0000
-vt 0.5834 0.0885 0.0000
-vt 0.5987 0.0825 0.0000
-vt 0.6955 0.1208 0.0000
-vt 0.6955 0.0105 0.0000
-vt 0.7028 0.0105 0.0000
-vt 0.7028 0.1208 0.0000
-vt 0.7028 0.1808 0.0000
-vt 0.6955 0.1808 0.0000
-vt 0.7028 0.2409 0.0000
-vt 0.6955 0.2409 0.0000
-vt 0.7028 0.3501 0.0000
-vt 0.6955 0.3501 0.0000
-vt 0.6375 0.2580 0.0000
-vt 0.6331 0.2581 0.0000
-vt 0.6322 0.2120 0.0000
-vt 0.6366 0.2119 0.0000
-vt 0.6312 0.1659 0.0000
-vt 0.6356 0.1658 0.0000
-vt 0.5834 0.0179 0.0000
-vt 0.5987 0.0169 0.0000
-vt 0.6903 0.3459 0.0000
-vt 0.6822 0.3459 0.0000
-vt 0.6822 0.0075 0.0000
-vt 0.6903 0.0075 0.0000
-vt 0.6571 0.0163 0.0000
-vt 0.6723 0.0179 0.0000
-vt 0.6242 0.1418 0.0000
-vt 0.6307 0.1417 0.0000
-vt 0.6247 0.1661 0.0000
-vt 0.6256 0.2121 0.0000
-vt 0.6265 0.2583 0.0000
-vt 0.6335 0.2823 0.0000
-vt 0.6270 0.2824 0.0000
-vt 0.6047 0.1405 0.0000
-vt 0.6042 0.1724 0.0000
-vt 0.6038 0.2043 0.0000
-vt 0.6365 0.1297 0.0000
-vt 0.6367 0.1416 0.0000
-vt 0.6305 0.1298 0.0000
-vt 0.6240 0.1300 0.0000
-vt 0.6681 0.1144 0.0000
-vt 0.6552 0.1144 0.0000
-vt 0.6037 0.2097 0.0000
-vt 0.6088 0.2097 0.0000
-vt 0.6135 0.2098 0.0000
-vt 0.6145 0.1351 0.0000
-vt 0.6099 0.1351 0.0000
-vt 0.6048 0.1351 0.0000
-vt 0.6552 0.2555 0.0000
-vt 0.6681 0.2555 0.0000
-vt 0.6272 0.2943 0.0000
-vt 0.6337 0.2942 0.0000
-vt 0.6395 0.2822 0.0000
-vt 0.6397 0.2940 0.0000
-vt 0.1601 0.2593 0.0000
-vt 0.1601 0.0045 0.0000
-vt 0.2454 0.0045 0.0000
-vt 0.2454 0.2590 0.0000
-vt 0.2838 0.5470 0.0000
-vt 0.2838 0.2690 0.0000
-vt 0.1765 0.2690 0.0000
-vt 0.1765 0.5470 0.0000
-vt 0.1150 0.3564 0.0000
-vt 0.1150 0.0538 0.0000
-vt 0.0116 0.0538 0.0000
-vt 0.0116 0.3569 0.0000
-vt 0.0100 0.6667 0.0000
-vt 0.0100 0.3673 0.0000
-vt 0.1291 0.3673 0.0000
-vt 0.1291 0.6667 0.0000
-vt 0.9942 0.1083 0.0000
-vt 0.9942 0.2099 0.0000
-vt 0.9659 0.2099 0.0000
-vt 0.9607 0.1083 0.0000
-vt 0.9942 0.0068 0.0000
-vt 0.9659 0.0068 0.0000
-vt 0.3004 0.5798 0.0000
-vt 0.2911 0.5701 0.0000
-vt 0.2911 0.6124 0.0000
-vt 0.3004 0.6124 0.0000
-vt 0.3004 0.6450 0.0000
-vt 0.2911 0.6547 0.0000
-vt 0.3334 0.6547 0.0000
-vt 0.3334 0.6450 0.0000
-vt 0.3663 0.6450 0.0000
-vt 0.3757 0.6547 0.0000
-vt 0.3757 0.6124 0.0000
-vt 0.3663 0.6124 0.0000
-vt 0.3663 0.5798 0.0000
-vt 0.3757 0.5701 0.0000
-vt 0.3334 0.5701 0.0000
-vt 0.3334 0.5798 0.0000
-vt 0.2876 0.5671 0.0000
-vt 0.2747 0.5537 0.0000
-vt 0.3334 0.5537 0.0000
-vt 0.3334 0.5671 0.0000
-vt 0.3793 0.5671 0.0000
-vt 0.3922 0.5537 0.0000
-vt 0.3922 0.6125 0.0000
-vt 0.3793 0.6125 0.0000
-vt 0.3793 0.6578 0.0000
-vt 0.3922 0.6712 0.0000
-vt 0.3334 0.6712 0.0000
-vt 0.3334 0.6578 0.0000
-vt 0.2876 0.6578 0.0000
-vt 0.2747 0.6712 0.0000
-vt 0.2747 0.6125 0.0000
-vt 0.2876 0.6125 0.0000
-vt 0.9513 0.1060 0.0000
-vt 0.9513 0.0044 0.0000
-vt 0.9230 0.0044 0.0000
-vt 0.9178 0.1060 0.0000
-vt 0.9097 0.1060 0.0000
-vt 0.9097 0.0044 0.0000
-vt 0.8814 0.0044 0.0000
-vt 0.8762 0.1060 0.0000
-vt 0.8814 0.2076 0.0000
-vt 0.9097 0.2076 0.0000
-vt 0.9230 0.2075 0.0000
-vt 0.9513 0.2075 0.0000
-vt 0.8658 0.1132 0.0000
-vt 0.8487 0.1132 0.0000
-vt 0.8445 0.0044 0.0000
-vt 0.8755 0.0044 0.0000
-vt 0.8445 0.2221 0.0000
-vt 0.8755 0.2221 0.0000
-vt 0.7801 0.1104 0.0000
-vt 0.7912 0.0058 0.0000
-vt 0.7576 0.0058 0.0000
-vt 0.7611 0.1104 0.0000
-vt 0.7912 0.2151 0.0000
-vt 0.7576 0.2374 0.0000
-vt 0.7362 0.1124 0.0000
-vt 0.7464 0.0064 0.0000
-vt 0.7139 0.0064 0.0000
-vt 0.7182 0.1124 0.0000
-vt 0.7139 0.2409 0.0000
-vt 0.7464 0.2409 0.0000
-vt 0.8231 0.1080 0.0000
-vt 0.8044 0.1080 0.0000
-vt 0.7986 0.0056 0.0000
-vt 0.8316 0.0056 0.0000
-vt 0.8316 0.2103 0.0000
-vt 0.7986 0.2321 0.0000
-vt 0.3996 0.1076 0.0000
-vt 0.3999 0.1680 0.0000
-vt 0.3755 0.1681 0.0000
-vt 0.3751 0.0799 0.0000
-vt 0.4002 0.2285 0.0000
-vt 0.3758 0.2286 0.0000
-vt 0.4005 0.2888 0.0000
-vt 0.3761 0.2890 0.0000
-vt 0.4008 0.3494 0.0000
-vt 0.3764 0.3495 0.0000
-vt 0.3512 0.1683 0.0000
-vt 0.3507 0.0641 0.0000
-vt 0.3515 0.2287 0.0000
-vt 0.3518 0.2891 0.0000
-vt 0.3521 0.3496 0.0000
-vt 0.3268 0.1684 0.0000
-vt 0.3264 0.0801 0.0000
-vt 0.3271 0.2288 0.0000
-vt 0.3274 0.2892 0.0000
-vt 0.3277 0.3497 0.0000
-vt 0.3025 0.1685 0.0000
-vt 0.3022 0.1081 0.0000
-vt 0.3028 0.2289 0.0000
-vt 0.3031 0.2893 0.0000
-vt 0.3033 0.3498 0.0000
-vt 0.1505 0.9738 0.0000
-vt 0.0042 0.6813 0.0000
-vt 0.2968 0.6813 0.0000
-vt 0.9446 0.3902 0.0000
-vt 0.9268 0.3902 0.0000
-vt 0.9268 0.3744 0.0000
-vt 0.9446 0.3744 0.0000
-vt 0.8974 0.3747 0.0000
-vt 0.8974 0.4922 0.0000
-vt 0.9065 0.4922 0.0000
-vt 0.9065 0.3747 0.0000
-vt 0.9924 0.3882 0.0000
-vt 0.9924 0.5080 0.0000
-vt 0.9766 0.5080 0.0000
-vt 0.9766 0.3882 0.0000
-vt 0.9160 0.3747 0.0000
-vt 0.9160 0.4922 0.0000
-vt 0.9924 0.5202 0.0000
-vt 0.9766 0.5245 0.0000
-vt 0.9160 0.5041 0.0000
-vt 0.8974 0.5041 0.0000
-vt 0.9268 0.4879 0.0000
-vt 0.9446 0.4879 0.0000
-vt 0.9446 0.5038 0.0000
-vt 0.9268 0.5038 0.0000
-vt 0.8789 0.3882 0.0000
-vt 0.8789 0.5080 0.0000
-vt 0.8630 0.5080 0.0000
-vt 0.8630 0.3882 0.0000
-vt 0.8789 0.5245 0.0000
-vt 0.8630 0.5202 0.0000
-vt 0.9268 0.4391 0.0000
-vt 0.9446 0.4391 0.0000
-vt 0.9277 0.5235 0.0000
-vt 0.9277 0.5442 0.0000
-vt 0.9356 0.4391 0.0000
-vt 0.9356 0.3902 0.0000
-vt 0.9356 0.4879 0.0000
-vt 0.4150 0.4926 0.0000
-vt 0.3619 0.5102 0.0000
-vt 0.3617 0.3568 0.0000
-vt 0.4148 0.3567 0.0000
-vt 0.3087 0.4928 0.0000
-vt 0.3085 0.3569 0.0000
-# 327 texture coords
-
-o turret
-g turret
-f 1/1/1 2/2/1 3/3/1
-f 3/3/1 4/4/1 1/1/1
-f 5/5/2 6/6/2 7/7/2
-f 5/5/2 7/7/2 8/8/2
-f 5/5/2 8/8/2 9/9/2
-f 10/10/3 11/11/3 12/12/3
-f 12/12/3 13/13/3 10/10/3
-f 12/12/4 14/14/4 9/15/4
-f 9/15/4 13/13/4 12/12/4
-f 15/16/5 7/17/5 6/18/5
-f 6/18/5 16/19/5 15/16/5
-f 3/20/6 16/21/6 4/22/6
-f 4/23/7 16/24/7 6/25/7
-f 6/25/7 17/26/7 4/23/7
-f 10/27/8 18/28/8 19/29/8
-f 19/29/8 11/30/8 10/27/8
-f 17/31/8 5/5/8 9/9/8
-f 17/31/8 9/9/8 14/32/8
-f 17/31/8 14/32/8 20/33/8
-f 4/23/9 17/26/9 20/17/9
-f 20/17/9 1/16/9 4/23/9
-f 15/34/10 16/21/10 3/20/10
-f 3/20/10 21/35/10 15/34/10
-f 10/36/11 13/37/11 22/12/11
-f 22/12/11 18/11/11 10/36/11
-f 13/37/12 9/38/12 8/14/12
-f 8/14/12 22/12/12 13/37/12
-f 5/39/13 23/40/13 24/41/13
-f 24/41/13 6/42/13 5/39/13
-f 17/43/14 25/44/14 23/45/14
-f 23/45/14 5/46/14 17/43/14
-f 6/47/15 24/48/15 25/49/15
-f 25/49/15 17/50/15 6/47/15
-f 26/51/16 27/52/16 28/53/16
-f 28/53/16 29/54/16 26/51/16
-f 30/55/17 31/56/17 32/57/17
-f 32/57/17 33/58/17 30/55/17
-f 34/59/18 35/60/18 25/49/18
-f 25/49/18 24/48/18 34/59/18
-f 36/61/19 26/62/19 29/63/19
-f 29/63/19 23/64/19 36/61/19
-f 28/65/20 27/66/20 34/59/20
-f 34/59/20 24/48/20 28/65/20
-f 24/41/21 23/40/21 29/54/21
-f 29/54/21 28/53/21 24/41/21
-f 33/67/22 25/49/22 35/60/22
-f 35/60/22 30/68/22 33/67/22
-f 32/69/23 31/70/23 36/61/23
-f 36/61/23 23/64/23 32/69/23
-f 23/45/24 25/44/24 33/58/24
-f 33/58/24 32/57/24 23/45/24
-f 37/3/25 38/2/25 39/1/25
-f 39/1/25 40/4/25 37/3/25
-f 41/5/26 42/9/26 8/8/26
-f 41/5/26 8/8/26 7/7/26
-f 41/5/26 7/7/26 43/6/26
-f 44/12/27 45/11/27 46/10/27
-f 46/10/27 47/13/27 44/12/27
-f 42/15/28 48/14/28 44/12/28
-f 44/12/28 47/13/28 42/15/28
-f 43/18/5 7/17/5 15/16/5
-f 15/16/5 49/19/5 43/18/5
-f 37/20/29 40/22/29 49/21/29
-f 40/23/30 50/26/30 43/25/30
-f 43/25/30 49/24/30 40/23/30
-f 19/29/31 18/28/31 46/27/31
-f 46/27/31 45/30/31 19/29/31
-f 50/31/31 51/33/31 48/32/31
-f 50/31/31 48/32/31 42/9/31
-f 50/31/31 42/9/31 41/5/31
-f 51/17/32 50/26/32 40/23/32
-f 40/23/32 39/16/32 51/17/32
-f 15/34/33 21/35/33 37/20/33
-f 37/20/33 49/21/33 15/34/33
-f 22/12/34 47/37/34 46/36/34
-f 46/36/34 18/11/34 22/12/34
-f 8/14/12 42/38/12 47/37/12
-f 47/37/12 22/12/12 8/14/12
-f 52/41/35 53/40/35 41/39/35
-f 41/39/35 43/42/35 52/41/35
-f 53/45/36 54/44/36 50/43/36
-f 50/43/36 41/46/36 53/45/36
-f 54/49/37 52/48/37 43/47/37
-f 43/47/37 50/50/37 54/49/37
-f 55/53/38 56/52/38 57/51/38
-f 57/51/38 58/54/38 55/53/38
-f 59/57/39 60/56/39 61/55/39
-f 61/55/39 62/58/39 59/57/39
-f 54/49/40 63/60/40 64/59/40
-f 64/59/40 52/48/40 54/49/40
-f 58/63/41 57/62/41 65/61/41
-f 65/61/41 53/64/41 58/63/41
-f 55/65/42 52/48/42 64/59/42
-f 64/59/42 56/66/42 55/65/42
-f 52/41/43 55/53/43 58/54/43
-f 58/54/43 53/40/43 52/41/43
-f 63/60/44 54/49/44 62/67/44
-f 62/67/44 61/68/44 63/60/44
-f 59/69/45 53/64/45 65/61/45
-f 65/61/45 60/70/45 59/69/45
-f 53/45/46 59/57/46 62/58/46
-f 62/58/46 54/44/46 53/45/46
-f 66/3/47 2/2/47 1/1/47
-f 1/1/47 67/4/47 66/3/47
-f 68/5/48 69/9/48 70/8/48
-f 68/5/48 70/8/48 71/7/48
-f 68/5/48 71/7/48 72/6/48
-f 12/12/49 11/11/49 73/10/49
-f 73/10/49 74/13/49 12/12/49
-f 69/15/50 14/14/50 12/12/50
-f 12/12/50 74/13/50 69/15/50
-f 72/18/51 71/17/51 75/16/51
-f 75/16/51 76/19/51 72/18/51
-f 66/20/52 67/22/52 76/21/52
-f 67/23/53 77/26/53 72/25/53
-f 72/25/53 76/24/53 67/23/53
-f 19/29/54 78/28/54 73/27/54
-f 73/27/54 11/30/54 19/29/54
-f 77/31/54 20/33/54 14/32/54
-f 77/31/54 14/32/54 69/9/54
-f 77/31/54 69/9/54 68/5/54
-f 20/17/9 77/26/9 67/23/9
-f 67/23/9 1/16/9 20/17/9
-f 75/34/55 79/35/55 66/20/55
-f 66/20/55 76/21/55 75/34/55
-f 80/12/56 74/37/57 73/36/57
-f 73/36/57 78/11/56 80/12/56
-f 70/14/58 69/38/58 74/37/58
-f 74/37/58 80/12/58 70/14/58
-f 81/41/59 82/40/59 68/39/59
-f 68/39/59 72/42/59 81/41/59
-f 82/45/60 83/44/60 77/43/60
-f 77/43/60 68/46/60 82/45/60
-f 83/49/61 81/48/61 72/47/61
-f 72/47/61 77/50/61 83/49/61
-f 84/53/62 85/52/62 86/51/62
-f 86/51/62 87/54/62 84/53/62
-f 88/57/63 89/56/63 90/55/63
-f 90/55/63 91/58/63 88/57/63
-f 83/49/64 92/60/64 93/59/64
-f 93/59/64 81/48/64 83/49/64
-f 87/63/65 86/62/65 94/61/65
-f 94/61/65 82/64/65 87/63/65
-f 84/65/66 81/48/66 93/59/66
-f 93/59/66 85/66/66 84/65/66
-f 81/41/67 84/53/67 87/54/67
-f 87/54/67 82/40/67 81/41/67
-f 92/60/68 83/49/68 91/67/68
-f 91/67/68 90/68/68 92/60/68
-f 88/69/69 82/64/69 94/61/69
-f 94/61/69 89/70/69 88/69/69
-f 82/45/70 88/57/70 91/58/70
-f 91/58/70 83/44/70 82/45/70
-f 39/1/71 38/2/71 95/3/71
-f 95/3/71 96/4/71 39/1/71
-f 97/5/72 98/6/72 71/7/72
-f 97/5/72 71/7/72 70/8/72
-f 97/5/72 70/8/72 99/9/72
-f 100/10/73 45/11/73 44/12/73
-f 44/12/73 101/13/73 100/10/73
-f 44/12/74 48/14/74 99/15/74
-f 99/15/74 101/13/74 44/12/74
-f 75/16/51 71/17/51 98/18/51
-f 98/18/51 102/19/51 75/16/51
-f 95/20/75 102/21/75 96/22/75
-f 96/23/76 102/24/76 98/25/76
-f 98/25/76 103/26/76 96/23/76
-f 100/27/77 78/28/77 19/29/77
-f 19/29/77 45/30/77 100/27/77
-f 103/31/77 97/5/77 99/9/77
-f 103/31/77 99/9/77 48/32/77
-f 103/31/77 48/32/77 51/33/77
-f 96/23/32 103/26/32 51/17/32
-f 51/17/32 39/16/32 96/23/32
-f 75/34/78 102/21/78 95/20/78
-f 95/20/78 79/35/78 75/34/78
-f 100/36/79 101/37/79 80/12/80
-f 80/12/80 78/11/80 100/36/79
-f 101/37/58 99/38/58 70/14/58
-f 70/14/58 80/12/58 101/37/58
-f 97/39/81 104/40/81 105/41/81
-f 105/41/81 98/42/81 97/39/81
-f 103/43/82 106/44/82 104/45/82
-f 104/45/82 97/46/82 103/43/82
-f 98/47/83 105/48/83 106/49/83
-f 106/49/83 103/50/83 98/47/83
-f 107/51/84 108/52/84 109/53/84
-f 109/53/84 110/54/84 107/51/84
-f 111/55/85 112/56/85 113/57/85
-f 113/57/85 114/58/85 111/55/85
-f 115/59/86 116/60/86 106/49/86
-f 106/49/86 105/48/86 115/59/86
-f 117/61/87 107/62/87 110/63/87
-f 110/63/87 104/64/87 117/61/87
-f 109/65/88 108/66/88 115/59/88
-f 115/59/88 105/48/88 109/65/88
-f 105/41/89 104/40/89 110/54/89
-f 110/54/89 109/53/89 105/41/89
-f 114/67/90 106/49/90 116/60/90
-f 116/60/90 111/68/90 114/67/90
-f 113/69/91 112/70/91 117/61/91
-f 117/61/91 104/64/91 113/69/91
-f 104/45/92 106/44/92 114/58/92
-f 114/58/92 113/57/92 104/45/92
-f 118/71/58 119/72/58 120/73/58
-f 120/73/58 121/74/58 118/71/58
-f 119/75/93 122/76/93 123/77/93
-f 123/77/93 120/78/93 119/75/93
-f 122/72/51 124/71/51 125/74/51
-f 125/74/51 123/73/51 122/72/51
-f 126/71/93 127/72/93 128/73/93
-f 128/73/93 129/74/93 126/71/93
-f 127/75/51 130/76/51 131/77/51
-f 131/77/51 128/78/51 127/75/51
-f 130/72/94 132/71/94 133/74/94
-f 133/74/94 131/73/94 130/72/94
-f 134/71/51 135/72/51 136/73/51
-f 136/73/51 137/74/51 134/71/51
-f 135/75/94 138/76/94 139/77/94
-f 139/77/94 136/78/94 135/75/94
-f 138/72/58 140/71/58 141/74/58
-f 141/74/58 139/73/58 138/72/58
-f 142/71/94 143/72/94 144/73/94
-f 144/73/94 145/74/94 142/71/94
-f 143/75/58 146/76/58 147/77/58
-f 147/77/58 144/78/58 143/75/58
-f 146/72/93 148/71/93 149/74/93
-f 149/74/93 147/73/93 146/72/93
-f 150/79/95 151/80/95 152/81/95
-f 152/81/95 153/82/95 150/79/95
-f 154/83/96 155/84/96 156/85/96
-f 156/85/96 157/86/96 154/83/96
-f 158/87/97 159/88/97 160/89/97
-f 160/89/97 161/90/97 158/87/97
-f 162/86/51 163/91/51 164/92/51
-f 164/92/51 165/83/51 162/86/51
-f 166/93/98 167/94/98 168/95/98
-f 168/95/98 169/96/98 166/93/98
-f 170/97/99 171/98/99 172/99/99
-f 173/100/99 158/101/99 161/102/99
-f 161/102/99 174/103/99 173/100/99
-f 175/104/100 176/105/100 177/106/100
-f 177/106/99 176/105/99 178/107/99
-f 178/107/99 179/108/99 177/106/99
-f 150/79/101 153/82/101 180/109/101
-f 180/109/101 181/110/101 150/79/101
-f 161/90/102 160/89/102 182/111/102
-f 182/111/102 183/112/102 161/90/102
-f 169/96/103 168/95/103 184/113/103
-f 184/113/103 185/114/103 169/96/103
-f 174/103/100 161/102/100 183/115/100
-f 183/115/100 186/116/100 174/103/100
-f 172/99/104 179/108/104 178/107/104
-f 178/107/104 170/97/104 172/99/104
-f 152/117/105 151/118/105 187/119/105
-f 187/119/105 173/120/105 152/117/105
-f 152/117/106 173/120/106 174/121/106
-f 174/121/106 153/122/106 152/117/106
-f 153/122/107 174/121/107 186/123/107
-f 186/123/107 180/124/107 153/122/107
-f 180/124/108 186/123/108 188/125/108
-f 188/125/108 181/126/108 180/124/108
-f 181/127/109 188/128/109 189/129/109
-f 189/129/109 150/130/109 181/127/109
-f 150/130/110 189/129/110 187/131/110
-f 187/131/110 151/132/110 150/130/110
-f 190/133/111 188/134/111 186/116/111
-f 186/116/111 183/115/111 190/133/111
-f 182/111/112 191/135/112 190/136/112
-f 190/136/112 183/112/112 182/111/112
-f 192/137/113 193/138/113 159/88/113
-f 159/88/113 158/87/113 192/137/113
-f 173/100/114 187/139/114 192/140/114
-f 192/140/114 158/101/114 173/100/114
-f 194/92/115 154/83/115 157/86/115
-f 157/86/115 195/91/115 194/92/115
-f 171/141/116 192/142/116 187/131/116
-f 187/131/116 172/143/116 171/141/116
-f 172/143/117 187/131/117 189/129/117
-f 189/129/117 179/144/117 172/143/117
-f 179/144/118 189/129/118 188/128/118
-f 188/128/118 177/145/118 179/144/118
-f 177/145/119 188/128/119 190/146/119
-f 190/146/119 175/147/119 177/145/119
-f 196/85/120 162/86/120 165/83/120
-f 165/83/120 197/84/120 196/85/120
-f 176/148/98 166/93/98 169/96/98
-f 169/96/98 178/149/98 176/148/98
-f 178/149/103 169/96/103 185/114/103
-f 185/114/103 170/150/103 178/149/103
-f 156/151/54 193/152/54 192/142/54
-f 192/142/54 157/153/54 156/151/54
-f 157/153/8 192/142/8 171/141/8
-f 171/141/8 195/154/8 157/153/8
-f 195/155/104 171/98/104 170/97/104
-f 170/97/104 194/156/104 195/155/104
-f 194/157/121 170/150/121 185/114/121
-f 185/114/121 154/158/121 194/157/121
-f 154/158/121 185/114/121 184/113/121
-f 184/113/121 155/159/121 154/158/121
-f 164/160/122 167/94/122 166/93/122
-f 166/93/122 165/161/122 164/160/122
-f 165/161/123 166/93/123 176/148/123
-f 176/148/123 197/162/123 165/161/123
-f 197/163/124 176/105/124 175/104/124
-f 175/104/124 196/164/124 197/163/124
-f 196/165/54 175/147/54 190/146/54
-f 190/146/54 162/166/54 196/165/54
-f 162/166/54 190/146/54 191/167/54
-f 191/167/54 163/168/54 162/166/54
-f 198/79/125 199/80/125 200/81/125
-f 200/81/125 201/82/125 198/79/125
-f 202/83/126 203/84/126 204/85/126
-f 204/85/126 205/86/126 202/83/126
-f 206/87/127 207/88/127 208/89/127
-f 208/89/127 209/90/127 206/87/127
-f 210/86/104 211/91/104 212/92/104
-f 212/92/104 213/83/104 210/86/104
-f 214/93/128 215/94/128 216/95/128
-f 216/95/128 217/96/128 214/93/128
-f 218/97/58 219/98/58 220/99/58
-f 221/100/129 206/101/129 209/102/129
-f 209/102/129 222/103/129 221/100/129
-f 223/104/129 224/105/129 225/106/129
-f 225/106/58 224/105/58 226/107/58
-f 226/107/58 227/108/58 225/106/58
-f 198/79/130 201/82/130 228/109/130
-f 228/109/130 229/110/130 198/79/130
-f 209/90/131 208/89/131 230/111/131
-f 230/111/131 231/112/131 209/90/131
-f 217/96/132 216/95/132 232/113/132
-f 232/113/132 233/114/132 217/96/132
-f 222/103/58 209/102/58 231/115/58
-f 231/115/58 234/116/58 222/103/58
-f 220/99/5 227/108/5 226/107/5
-f 226/107/5 218/97/5 220/99/5
-f 200/117/133 199/118/133 235/119/133
-f 235/119/133 221/120/133 200/117/133
-f 200/117/134 221/120/134 222/121/134
-f 222/121/134 201/122/134 200/117/134
-f 201/122/135 222/121/135 234/123/135
-f 234/123/135 228/124/135 201/122/135
-f 228/124/136 234/123/136 236/125/136
-f 236/125/136 229/126/136 228/124/136
-f 229/127/137 236/128/137 237/129/137
-f 237/129/137 198/130/137 229/127/137
-f 198/130/138 237/129/138 235/131/138
-f 235/131/138 199/132/138 198/130/138
-f 238/133/139 236/134/139 234/116/139
-f 234/116/139 231/115/139 238/133/139
-f 230/111/140 239/135/140 238/136/140
-f 238/136/140 231/112/140 230/111/140
-f 240/137/141 241/138/141 207/88/141
-f 207/88/141 206/87/141 240/137/141
-f 221/100/142 235/139/142 240/140/142
-f 240/140/142 206/101/142 221/100/142
-f 242/92/143 202/83/143 205/86/143
-f 205/86/143 243/91/143 242/92/143
-f 219/141/144 240/142/144 235/131/144
-f 235/131/144 220/143/144 219/141/144
-f 220/143/145 235/131/145 237/129/145
-f 237/129/145 227/144/145 220/143/145
-f 227/144/146 237/129/146 236/128/146
-f 236/128/146 225/145/146 227/144/146
-f 225/145/147 236/128/147 238/146/147
-f 238/146/147 223/147/147 225/145/147
-f 244/85/148 210/86/148 213/83/148
-f 213/83/148 245/84/148 244/85/148
-f 224/148/128 214/93/128 217/96/128
-f 217/96/128 226/149/128 224/148/128
-f 226/149/149 217/96/149 233/114/149
-f 233/114/149 218/150/149 226/149/149
-f 204/151/8 241/152/8 240/142/8
-f 240/142/8 205/153/8 204/151/8
-f 205/153/8 240/142/8 219/141/8
-f 219/141/8 243/154/8 205/153/8
-f 243/155/58 219/98/58 218/97/58
-f 218/97/58 242/156/58 243/155/58
-f 242/157/121 218/150/121 233/114/121
-f 233/114/121 202/158/121 242/157/121
-f 202/158/122 233/114/122 232/113/122
-f 232/113/122 203/159/122 202/158/122
-f 212/160/121 215/94/121 214/93/121
-f 214/93/121 213/161/121 212/160/121
-f 213/161/150 214/93/150 224/148/150
-f 224/148/150 245/162/150 213/161/150
-f 245/163/115 224/105/115 223/104/115
-f 223/104/115 244/164/115 245/163/115
-f 244/165/54 223/147/54 238/146/54
-f 238/146/54 210/166/54 244/165/54
-f 210/166/54 238/146/54 239/167/54
-f 239/167/54 211/168/54 210/166/54
-f 246/79/151 247/80/151 248/81/151
-f 248/81/151 249/82/151 246/79/151
-f 250/83/152 251/84/152 252/85/152
-f 252/85/152 253/86/152 250/83/152
-f 254/87/131 255/88/131 256/89/131
-f 256/89/131 257/90/131 254/87/131
-f 258/86/93 259/91/93 260/92/93
-f 260/92/93 261/83/93 258/86/93
-f 262/93/149 263/94/149 264/95/149
-f 264/95/149 265/96/149 262/93/149
-f 266/97/51 267/98/51 268/99/51
-f 269/100/12 254/101/12 257/102/12
-f 257/102/12 270/103/12 269/100/12
-f 271/104/153 272/105/153 273/106/153
-f 273/106/12 272/105/12 274/107/12
-f 274/107/12 275/108/12 273/106/12
-f 246/79/154 249/82/154 276/109/154
-f 276/109/154 277/110/154 246/79/154
-f 257/90/127 256/89/127 278/111/127
-f 278/111/127 279/112/127 257/90/127
-f 265/96/128 264/95/128 280/113/128
-f 280/113/128 281/114/128 265/96/128
-f 270/103/12 257/102/12 279/115/12
-f 279/115/12 282/116/12 270/103/12
-f 268/99/51 275/108/51 274/107/51
-f 274/107/51 266/97/51 268/99/51
-f 248/117/155 247/118/155 283/119/155
-f 283/119/155 269/120/155 248/117/155
-f 248/117/156 269/120/156 270/121/156
-f 270/121/156 249/122/156 248/117/156
-f 249/122/157 270/121/157 282/123/157
-f 282/123/157 276/124/157 249/122/157
-f 276/124/158 282/123/158 284/125/158
-f 284/125/158 277/126/158 276/124/158
-f 277/127/159 284/128/159 285/129/159
-f 285/129/159 246/130/159 277/127/159
-f 246/130/160 285/129/160 283/131/160
-f 283/131/160 247/132/160 246/130/160
-f 286/133/161 284/134/161 282/116/161
-f 282/116/161 279/115/161 286/133/161
-f 278/111/162 287/135/162 286/136/162
-f 286/136/162 279/112/162 278/111/162
-f 288/137/163 289/138/163 255/88/163
-f 255/88/163 254/87/163 288/137/163
-f 269/100/164 283/139/164 288/140/164
-f 288/140/164 254/101/164 269/100/164
-f 290/92/165 250/83/165 253/86/165
-f 253/86/165 291/91/165 290/92/165
-f 267/141/166 288/142/166 283/131/166
-f 283/131/166 268/143/166 267/141/166
-f 268/143/160 283/131/160 285/129/160
-f 285/129/160 275/144/160 268/143/160
-f 275/144/167 285/129/167 284/128/167
-f 284/128/167 273/145/167 275/144/167
-f 273/145/168 284/128/168 286/146/168
-f 286/146/168 271/147/168 273/145/168
-f 292/85/126 258/86/126 261/83/126
-f 261/83/126 293/84/126 292/85/126
-f 272/148/149 262/93/149 265/96/149
-f 265/96/149 274/149/149 272/148/149
-f 274/149/128 265/96/128 281/114/128
-f 281/114/128 266/150/128 274/149/128
-f 252/151/54 289/152/54 288/142/54
-f 288/142/54 253/153/54 252/151/54
-f 253/153/54 288/142/54 267/141/54
-f 267/141/54 291/154/54 253/153/54
-f 291/155/51 267/98/51 266/97/51
-f 266/97/51 290/156/51 291/155/51
-f 290/157/123 266/150/123 281/114/123
-f 281/114/123 250/158/123 290/157/123
-f 250/158/121 281/114/121 280/113/121
-f 280/113/121 251/159/121 250/158/121
-f 260/160/121 263/94/121 262/93/121
-f 262/93/121 261/161/121 260/160/121
-f 261/161/121 262/93/121 272/148/121
-f 272/148/121 293/162/121 261/161/121
-f 293/163/169 272/105/169 271/104/169
-f 271/104/169 292/164/169 293/163/169
-f 292/165/54 271/147/54 286/146/54
-f 286/146/54 258/166/54 292/165/54
-f 258/166/54 286/146/54 287/167/54
-f 287/167/54 259/168/54 258/166/54
-f 95/169/51 294/170/51 295/171/51
-f 295/171/51 296/172/51 95/169/51
-f 296/173/94 295/174/94 297/175/94
-f 297/175/94 298/176/94 296/173/94
-f 298/177/58 297/178/58 299/179/58
-f 299/179/58 37/180/58 298/177/58
-f 37/181/170 299/182/170 294/183/170
-f 294/183/170 95/184/170 37/181/170
-f 300/185/51 301/186/51 302/187/51
-f 302/187/51 303/188/51 300/185/51
-f 304/185/100 305/189/100 306/190/100
-f 306/190/100 307/188/100 304/185/100
-f 308/185/58 309/189/58 310/190/58
-f 310/190/58 311/188/58 308/185/58
-f 312/185/93 313/186/93 314/187/93
-f 314/187/93 315/188/93 312/185/93
-f 316/191/171 302/192/171 315/193/171
-f 315/193/171 317/194/171 316/191/171
-f 318/195/172 314/196/172 311/197/172
-f 311/197/172 319/198/172 318/195/172
-f 320/199/173 310/200/173 307/201/173
-f 307/201/173 321/202/173 320/199/173
-f 322/203/174 306/204/174 303/205/174
-f 303/205/174 323/206/174 322/203/174
-f 324/207/54 301/208/54 300/209/54
-f 300/209/54 325/210/54 324/207/54
-f 326/211/8 305/212/8 304/213/8
-f 304/213/8 327/214/8 326/211/8
-f 328/215/77 309/216/77 308/217/77
-f 308/217/77 329/218/77 328/215/77
-f 330/219/77 313/220/77 312/221/77
-f 312/221/77 331/222/77 330/219/77
-f 308/185/58 311/188/58 314/187/58
-f 314/187/58 313/186/58 308/185/58
-f 312/185/93 315/188/93 302/190/93
-f 302/190/93 301/189/93 312/185/93
-f 318/195/175 317/194/175 315/193/175
-f 315/193/175 314/196/175 318/195/175
-f 320/199/176 319/198/176 311/197/176
-f 311/197/176 310/200/176 320/199/176
-f 322/203/177 321/202/177 307/201/177
-f 307/201/177 306/204/177 322/203/177
-f 330/219/54 329/218/54 308/217/54
-f 308/217/54 313/220/54 330/219/54
-f 324/207/31 331/222/31 312/221/31
-f 312/221/31 301/208/31 324/207/31
-f 300/185/51 303/188/51 306/190/51
-f 306/190/51 305/189/51 300/185/51
-f 304/185/94 307/188/94 310/187/94
-f 310/187/94 309/186/94 304/185/94
-f 316/191/178 323/206/178 303/205/178
-f 303/205/178 302/192/178 316/191/178
-f 326/211/77 325/210/77 300/209/77
-f 300/209/77 305/212/77 326/211/77
-f 328/215/77 327/214/77 304/213/77
-f 304/213/77 309/216/77 328/215/77
-f 332/185/51 333/186/51 334/187/51
-f 334/187/51 335/188/51 332/185/51
-f 336/223/94 337/224/94 338/225/94
-f 338/225/94 339/226/94 336/223/94
-f 340/227/58 341/228/58 342/229/58
-f 342/229/58 343/230/58 340/227/58
-f 344/185/93 345/186/93 346/187/93
-f 346/187/93 347/188/93 344/185/93
-f 348/191/171 334/192/171 347/193/171
-f 347/193/171 349/194/171 348/191/171
-f 350/195/172 346/196/172 343/197/172
-f 343/197/172 351/198/172 350/195/172
-f 352/199/173 342/200/173 339/201/173
-f 339/201/173 353/202/173 352/199/173
-f 354/203/174 338/204/174 335/205/174
-f 335/205/174 355/206/174 354/203/174
-f 356/207/54 333/208/54 332/209/54
-f 332/209/54 357/210/54 356/207/54
-f 358/211/8 337/212/8 336/213/8
-f 336/213/8 359/214/8 358/211/8
-f 360/215/54 341/216/54 340/217/54
-f 340/217/54 361/218/54 360/215/54
-f 362/219/77 345/220/77 344/221/77
-f 344/221/77 363/222/77 362/219/77
-f 340/227/58 343/230/58 346/231/58
-f 346/231/58 345/232/58 340/227/58
-f 344/185/93 347/188/93 334/190/93
-f 334/190/93 333/189/93 344/185/93
-f 350/195/175 349/194/175 347/193/175
-f 347/193/175 346/196/175 350/195/175
-f 352/199/176 351/198/176 343/197/176
-f 343/197/176 342/200/176 352/199/176
-f 354/203/177 353/202/177 339/201/177
-f 339/201/177 338/204/177 354/203/177
-f 362/219/54 361/218/54 340/217/54
-f 340/217/54 345/220/54 362/219/54
-f 356/207/31 363/222/31 344/221/31
-f 344/221/31 333/208/31 356/207/31
-f 332/185/51 335/188/51 338/190/51
-f 338/190/51 337/189/51 332/185/51
-f 336/223/94 339/226/94 342/233/94
-f 342/233/94 341/234/94 336/223/94
-f 348/191/178 355/206/178 335/205/178
-f 335/205/178 334/192/178 348/191/178
-f 358/211/77 357/210/77 332/209/77
-f 332/209/77 337/212/77 358/211/77
-f 360/215/54 359/214/54 336/213/54
-f 336/213/54 341/216/54 360/215/54
-f 364/235/179 365/236/179 366/237/179
-f 366/237/179 367/238/179 364/235/179
-f 368/239/180 365/236/180 364/235/180
-f 364/235/180 369/240/180 368/239/180
-f 364/241/181 367/242/181 370/243/181
-f 370/243/181 371/244/181 364/241/181
-f 369/245/182 364/241/182 371/244/182
-f 371/244/182 372/246/182 369/245/182
-f 371/247/183 370/248/183 373/249/183
-f 373/249/183 374/250/183 371/247/183
-f 375/251/184 372/252/184 371/247/184
-f 371/247/184 374/250/184 375/251/184
-f 365/253/185 374/254/185 373/255/185
-f 373/255/185 366/256/185 365/253/185
-f 368/257/186 375/258/186 374/254/186
-f 374/254/186 365/253/186 368/257/186
-f 376/235/187 377/238/187 378/237/187
-f 378/237/187 379/236/187 376/235/187
-f 380/239/188 381/240/188 376/235/188
-f 376/235/188 379/236/188 380/239/188
-f 376/241/189 382/244/189 383/243/189
-f 383/243/189 377/242/189 376/241/189
-f 381/245/190 384/246/190 382/244/190
-f 382/244/190 376/241/190 381/245/190
-f 382/247/191 385/250/191 386/249/191
-f 386/249/191 383/248/191 382/247/191
-f 387/251/192 385/250/192 382/247/192
-f 382/247/192 384/252/192 387/251/192
-f 379/253/193 378/256/193 386/255/193
-f 386/255/193 385/254/193 379/253/193
-f 380/257/194 379/253/194 385/254/194
-f 385/254/194 387/258/194 380/257/194
-f 388/235/187 389/238/187 390/237/187
-f 390/237/187 391/236/187 388/235/187
-f 392/239/188 393/240/188 388/235/188
-f 388/235/188 391/236/188 392/239/188
-f 388/241/189 394/244/189 395/243/189
-f 395/243/189 389/242/189 388/241/189
-f 393/245/195 396/246/195 394/244/195
-f 394/244/195 388/241/195 393/245/195
-f 394/247/191 397/250/191 398/249/191
-f 398/249/191 395/248/191 394/247/191
-f 399/251/196 397/250/196 394/247/196
-f 394/247/196 396/252/196 399/251/196
-f 391/253/193 390/256/193 398/255/193
-f 398/255/193 397/254/193 391/253/193
-f 392/257/197 391/253/197 397/254/197
-f 397/254/197 399/258/197 392/257/197
-f 400/235/198 401/238/198 402/237/198
-f 402/237/198 403/236/198 400/235/198
-f 404/239/199 405/240/199 400/235/199
-f 400/235/199 403/236/199 404/239/199
-f 400/241/200 406/244/200 407/243/200
-f 407/243/200 401/242/200 400/241/200
-f 405/245/201 408/246/201 406/244/201
-f 406/244/201 400/241/201 405/245/201
-f 406/247/202 409/250/202 410/249/202
-f 410/249/202 407/248/202 406/247/202
-f 411/251/203 409/250/203 406/247/203
-f 406/247/203 408/252/203 411/251/203
-f 403/253/185 402/256/185 410/255/185
-f 410/255/185 409/254/185 403/253/185
-f 404/257/204 403/253/204 409/254/204
-f 409/254/204 411/258/204 404/257/204
-f 412/235/205 413/236/205 414/237/205
-f 414/237/205 415/238/205 412/235/205
-f 416/239/206 413/236/206 412/235/206
-f 412/235/206 417/240/206 416/239/206
-f 412/241/207 415/242/207 418/243/207
-f 418/243/207 419/244/207 412/241/207
-f 417/245/208 412/241/208 419/244/208
-f 419/244/208 420/246/208 417/245/208
-f 419/247/209 418/248/209 421/249/209
-f 421/249/209 422/250/209 419/247/209
-f 423/251/210 420/252/210 419/247/210
-f 419/247/210 422/250/210 423/251/210
-f 413/253/193 422/254/193 421/255/193
-f 421/255/193 414/256/193 413/253/193
-f 416/257/211 423/258/211 422/254/211
-f 422/254/211 413/253/211 416/257/211
-f 424/235/205 425/236/205 426/237/205
-f 426/237/205 427/238/205 424/235/205
-f 428/239/206 425/236/206 424/235/206
-f 424/235/206 429/240/206 428/239/206
-f 424/241/207 427/242/207 430/243/207
-f 430/243/207 431/244/207 424/241/207
-f 429/245/212 424/241/212 431/244/212
-f 431/244/212 432/246/212 429/245/212
-f 431/247/209 430/248/209 433/249/209
-f 433/249/209 434/250/209 431/247/209
-f 435/251/213 432/252/213 431/247/213
-f 431/247/213 434/250/213 435/251/213
-f 425/253/193 434/254/193 433/255/193
-f 433/255/193 426/256/193 425/253/193
-f 428/257/214 435/258/214 434/254/214
-f 434/254/214 425/253/214 428/257/214
-f 436/235/198 437/238/198 438/237/198
-f 438/237/198 439/236/198 436/235/198
-f 440/239/199 441/240/199 436/235/199
-f 436/235/199 439/236/199 440/239/199
-f 436/241/200 442/244/200 443/243/200
-f 443/243/200 437/242/200 436/241/200
-f 441/245/215 444/246/215 442/244/215
-f 442/244/215 436/241/215 441/245/215
-f 442/247/202 445/250/202 446/249/202
-f 446/249/202 443/248/202 442/247/202
-f 447/251/216 445/250/216 442/247/216
-f 442/247/216 444/252/216 447/251/216
-f 439/253/185 438/256/185 446/255/185
-f 446/255/185 445/254/185 439/253/185
-f 440/257/217 439/253/217 445/254/217
-f 445/254/217 447/258/217 440/257/217
-f 448/235/179 449/236/179 450/237/179
-f 450/237/179 451/238/179 448/235/179
-f 452/239/180 449/236/180 448/235/180
-f 448/235/180 453/240/180 452/239/180
-f 448/241/181 451/242/181 454/243/181
-f 454/243/181 455/244/181 448/241/181
-f 453/245/218 448/241/218 455/244/218
-f 455/244/218 456/246/218 453/245/218
-f 455/247/183 454/248/183 457/249/183
-f 457/249/183 458/250/183 455/247/183
-f 459/251/219 456/252/219 455/247/219
-f 455/247/219 458/250/219 459/251/219
-f 449/253/185 458/254/185 457/255/185
-f 457/255/185 450/256/185 449/253/185
-f 452/257/220 459/258/220 458/254/220
-f 458/254/220 449/253/220 452/257/220
-f 460/259/221 461/260/222 462/261/223
-f 462/261/223 463/262/224 460/259/221
-f 461/260/222 464/263/225 465/264/225
-f 465/264/225 462/261/223 461/260/222
-f 464/263/225 466/265/226 467/266/226
-f 467/266/226 465/264/225 464/263/225
-f 466/265/226 468/267/227 469/268/227
-f 469/268/227 467/266/226 466/265/226
-f 463/262/224 462/261/223 470/269/228
-f 470/269/228 471/270/229 463/262/224
-f 462/261/223 465/264/225 472/271/225
-f 472/271/225 470/269/228 462/261/223
-f 465/264/225 467/266/226 473/272/226
-f 473/272/226 472/271/225 465/264/225
-f 467/266/226 469/268/227 474/273/227
-f 474/273/227 473/272/226 467/266/226
-f 471/270/229 470/269/228 475/274/230
-f 475/274/230 476/275/231 471/270/229
-f 470/269/228 472/271/225 477/276/225
-f 477/276/225 475/274/230 470/269/228
-f 472/271/225 473/272/226 478/277/226
-f 478/277/226 477/276/225 472/271/225
-f 473/272/226 474/273/227 479/278/227
-f 479/278/227 478/277/226 473/272/226
-f 476/275/231 475/274/230 480/279/232
-f 480/279/232 481/280/233 476/275/231
-f 475/274/230 477/276/225 482/281/225
-f 482/281/225 480/279/232 475/274/230
-f 477/276/225 478/277/226 483/282/226
-f 483/282/226 482/281/225 477/276/225
-f 478/277/226 479/278/227 484/283/227
-f 484/283/227 483/282/226 478/277/226
-f 485/284/234 486/285/234 487/286/234
-f 485/284/235 487/285/235 488/286/235
-f 485/284/236 488/285/236 489/286/236
-f 485/284/237 489/285/237 486/286/237
-f 490/287/238 491/288/238 492/289/238
-f 492/289/238 493/290/238 490/287/238
-f 494/291/58 495/292/58 496/293/58
-f 496/293/58 497/294/58 494/291/58
-f 498/295/93 499/296/93 495/297/93
-f 495/297/93 494/298/93 498/295/93
-f 500/299/153 501/300/153 499/292/153
-f 499/292/153 498/291/153 500/299/153
-f 492/301/93 491/302/93 495/297/93
-f 495/297/93 499/296/93 492/301/93
-f 493/303/153 492/304/153 499/292/153
-f 499/292/153 501/300/153 493/303/153
-f 502/305/239 503/306/239 504/307/239
-f 504/307/239 505/308/239 502/305/239
-f 506/294/153 507/293/153 508/292/153
-f 508/292/153 509/291/153 506/294/153
-f 510/291/129 511/292/129 512/300/129
-f 512/300/129 513/299/129 510/291/129
-f 509/309/93 508/310/93 511/311/93
-f 511/311/93 510/312/93 509/309/93
-f 505/304/129 504/303/129 512/300/129
-f 512/300/129 511/292/129 505/304/129
-f 502/313/93 505/314/93 511/311/93
-f 511/311/93 508/310/93 502/313/93
-f 502/305/240 514/315/77 515/316/77
-f 515/316/77 503/306/240 502/305/240
-f 508/310/93 516/317/241 514/318/241
-f 514/318/241 502/313/93 508/310/93
-f 516/315/242 517/319/242 496/320/242
-f 496/320/242 495/288/242 516/315/242
-f 491/288/243 490/287/243 515/316/77
-f 515/316/77 514/315/77 491/288/243
-f 495/297/170 491/302/170 514/318/241
-f 514/318/241 516/317/241 495/297/170
-f 508/305/244 507/321/244 517/319/244
-f 517/319/244 516/315/244 508/305/244
-f 496/322/170 517/323/170 518/324/170
-f 518/324/170 497/325/170 496/322/170
-f 517/323/93 507/326/93 506/327/93
-f 506/327/93 518/324/93 517/323/93
-# 782 faces
-
-�PNG
- - - " &
( ""((133;: '#
&$ %+,'(!(/;"8)=7###%&('('&(()%#(&(+(&+++-/0.0..010'%0)&1-,0/030.333568686689955868;86:;;<?@=AB?GH?HHAEEHKNQRYYC$B&F(D)H&H'I)L,G+M0C<U T.P. Z [! S3V8X6Y8R6Q1U8X7[;[;L4#@>=[<"`"b$e(
h&k)l,d<
`>`?h?s+r-y0`?!@?@G@^@MF!C@>UK$^D2\S(n@bAeEfHiCkHiIsAsLxRfF'kL2e[-nS>yV%uU9i`/lb1uj5}q9CCCDGHEIIHFEHGHLIEJKKFOPMNPGPQMQQNWXNYYQNKPNPUQMRSSUVXVXYYVRXWX]YTZ[[]_`^``a]X{[A`_`gb]bcceghfhike`nicjkkmopmpprlgxrlzvr�H�M�U�Z�[ �c�|�d$�x=�_�i�q�g�q�{*�{!�_C�fJ�kQ�}@�nR�uY�|u�{`�|_�}a�w����)��7��"��$��6��A��F��J��{��M��P��j��S��M��WÉ#ɨ2ʬ@ò]˹aпd��h��l��n��q��v��v������ -�'�eQ#F�Q��M<�B�!�R8�U -i�8#&��ɦ�em^9���=h`�"h䗙�/(��ڬ�/۳����7������|N�)ɒ��;�H��SŪ�|>���S�ƶ�-�Chj��FhJЊ6��A�Z��{�BSZ����BC=������Q�s7�ɤ*)j���*Sja��5�Z\a)��j-����6j�+*$�#M��B��d)J����w������8��\�0�_~��t�>�-���D�nq�[8����R����[��O������ �O>�&���Dn�×:��9����#�|�`�/5w:;[;;;�7l -��맀�
�� -;��W���/�C�ņ<f -N݅ -��e]w0 - -���ws�p�K/@��2�Kc���6e�E`*�` -`5� -`0#c)�����&z�+ -�s* -`�j�C@�V�W -�9k�F -�3�5�)���� -Lc�Rv���ڝ�b -�� -w�. -�7') -��b - -��X�A0�2�) -ଵ - -`t-@�p��* -�!����� -�><pB-@��j��c -Ь�I0�u��j:�?��Y�qB��uߏ�K��H�p1 - -��Ĥ��m�GC�t�0i��g�H7� -@�T�Z -�$��W -�8����ykzpɂ;6�* -�\��UO-�� -@{��) -@���P���6!S - - -&� -��� -@ �(�)pv@�]�i, � -@?��NP0��R -������) - - - -�3�-;wZ;���� -�[�8�+ -��t|3�P�k����uP��7õ`��b�T,�ff��R�\.�A����jP]V�z}-DɿY���+�J4�u�� B�`e�ތ�t�a=\�D�փ��D�3���h�T�eof��| -"�P�4Q�ri����V_[�y�w!�{����x `�p9���_�*מ� - �3Y���v� 1P -��ѧ -��)�/?���GpN�/ ����m�P<ɏ�: -0�]�a, -���j��_'P�H��!��E����yT�vu��;a����$�F#|}-��P�bu2@���@�P��r�y��gv�P<7�! -��`�>9/y�i`?��� -@S����= w�v6��9p�:p>���xR}�9���.Az��� -@��_�{� {�]Z:\I��]�!�AG`����L���@�ƌ�b�S��� �b��ʱ��JA�����0S�ÿ�F�l��f��#w�����9�2`�}ƭ8^�?�h���J����AԤ^� -?:��K�d -<~9 -b���`u��B5d3 -��`8�x�? -��2���KG���ʺ����
�r� -@�VSl��� -� ��iO_|���]��#���*?� {@��J d�a�Me쬴 0� -C�\CkK3X�}rE�k�ȦQB��!&���C�X0�=t����v���۩���Mqq:���%�����2�'�?Wa�__�JM5�<$����.�T2s3�Gٞ��ApCbµ$`"�t�`�����B�0^�/�����{^�|�����z#���Բ9)��BÇ��!@_� -V/ -d���\�9�Ȍ&��*ٖЙ����~3|0w9`INc�\��I����NI3 -Xz5���\B��*�l���������.�2�9^F -�Gw@U����l�P�D�;�\eJ0 -ϯ�@�Bp�4������
(�S_� -0�,b{[����3x����֟{g(���Y -�z�&� ��zÇE�,�髁`� �g� -�7<�!�!w)��U�𭎃{�I@�g�U�Mk�+Z -#�~�OO� -x� -��&CR"��ʳ���|�ݷ/2�/mL ;)[9p��� -ࣾz�4Ɠ��� -d�6����CI]�8>����Ujp��p������4#�*J1P���>�0Y{����v?�r�q_��S�j�</�lx��|�'�k~�fL5�Y�g���;����vA���x�s� -��$���?���k���>��-&]�������T}��6k*��W1p�
�9���L�Nm�s�ְ��?d<��2G2�ȮK�ut���ɵ]Ùh ^���Ύ��q�z#��� -���� �.H��� -X��Gi -����Vм@�)�r^� $� -��G���ـ�ܰ�vn�&�r��dW���P7� -`E -xeaao�u -{�cL�eO�ir$c����3��L�*[L��6Ɯ�R�����#��Q�&����DQ&��t'����ڐMs:�-&yB9:yv̞�j�Q�bl��BwD�����E�۸Č+�j/���X^�����̈́�&���6�Y��������4&h-�Ӽ���ţq�Z����J%�P��F��h4� -)X���˗^�x�G?������}k��V9`����G���6��P�R�����W���qp%">�/ -� - ���
�����M��`���hp��Ac3�2À���� -#c -��p�Z
a�OҲ����N@�p=��_[�_� -j([�5C!�0�vL�'���ߦ2pA�)-3�]�>'��! ����b��g��O�|y~�T���)�˥�R�<Y��B�E���u'N���_�kb����qX����$.Uq�g�W.�� -a>�i�$��'�����1�@x�7n0���gz��r�[˾�X -ߑ�_�h� -�'�y{����ɭP�}�M��~�p5��@�P;�A0P�������mD�pc#NVy�_�z����E`�뜃2�}���)��'a���n�R� _ ��YoZ��4���D)\��2XO.^�q�;��| �r�G}��/.>�����R�����`���c"��Xȟ��QB'>��%�����ÀD�V���Մ0 -x�X���&��(��k����קq�3u�ZԈ�p�}o�� -v p����Dڬ���3Z�Oh�e�x�@�&��"K��a*����L��g -��Ր�/�� -�@ -�Ǣ._֩�f�ο��B^'�I��$�B��36�_�E�����������,����� -0p,��? -���ǽѠG -0jw*Ň��L�'w?��� �_�uǕ��W�Lw�.�������dݣܒ�˾z7�F�� -�ȑ~���p�Q�U|=��
0�O��c -���qz�4����U@FC���g���'�*�z=��y� -ʻ���$&�g�Dɍ#�+d��� �Y�A��W��b����Д��Y�����Z&����,����Xsyd��O�77]��Q0Ұ��_��_x7�!� �Y�G
��{
Gf ������O���e�s��r�,����,���6����J�b�ʘF�������D<6U�}�_���r3�lr۰षj� -�O���#���;~�u��;|��z���9T@�c����GY��q�|�(>�M�����f|8+���w�������BqH-����Y��n"�1�x����e��}&@\�M�\ -��n7@��2�&��X -~������h�i:�U誻i�J�
8�~)�+8�b��"��9�Ҟ�K�Oh�gDw� ~k��*ƞI����kmA���э���Gz�M&��ؠ����-�J5L���B p�v -K��������s� 5#¶|�Bc�]�>�v� -hw:(l��:m� Γ����F���S[7A�� -@t&tR��a87��'��8�Zf7�'�I� -y9ss�η��m؇ =��Qn��UIr��g"� -��� -�3l�z`@��"������_�ñ�����Eq���f��o�'�X� -(,noC -�������Q�6���������
�$:���/�>@ގ�$J�8��Q�)��Է�&�f|[�����(�����כ� -��k� -w63�3��o���G#��j�\�s -��"_�f��aX�����π��7{�Q����E����g%��`���S��̠��]t���m�C�܇���=�����8� -㠢�����&]k���N -���ى|N'�B�FB�0����Ĝ}�����`J�X�3^,j�����Ѥ�{�"���F%�]�0�_ȟ,�v���؟�U�Y���+<M�k��O� -�Pn�ߪ� -��tR^�Md�l�
c��i*�;�t�v���ӟ���p|%~.�mŲ -��!6��1 - -�/e��"@� -����T -��Z - �H� - - -� -@F�D0�M���
�S -��zl��h���㫗� - -��;v��� -�������?���^y�Q� - -�PR!@`��� -�:
-#��� ��>��Xϟ���%�+>��?��2��1�`|n�ǁ�S - -�M -�T�`Bd -`a�� -�����:k3 - o` ���q�D�cR��ұc`�PX -���o���D��z)�M��jkE�!Ƣ>���ܥK�?�ٻ2>~�*JŢ� -��\kvAv�d�D(N������@@�^,�a��0��c{���F�G�E - Zl���|�����j�-���uX���>s18F�ޤ5m4���n��b�荬](��{eoO���pyΟ��7,�gnٟ[E�e|`�"V�,�`� -��Y�2�v�<�W^��"|�n�0� -|r$E�|�F �,v��~6��@G�u���� yR�>��h�IBl�6��Õ�7W8�G`=�xx٪S��#l$��~tT��8����8n�
�ō�@g� -`�:�y�8�B�XX���N�ϯ��"�oc2�U+e�ƞPQ$P�?��Fr�wݫ�'0]�J -J�b�,���-F�x^G���J��V - F����O��,#�7����� -�=`��Π.hom^{�쮾�;p�8(!Ёҧ��*���NV�`%�!ޟ?mG�㘇��w��Qy�Ri�.9�G��B~$���88� -��ryr�� -�܅@[�llT���8�Ca�2���. -�_�|��˘ ^x�M�'8y3�~�0Q��g'�r��DVi)�cW�"̩����Sza�X��ZxAxn��+8>��옗9��t�c���r�7,-�''J3嗗^��Dž���ť����/�ˋ��z��Ju����Q�RH�W�}���I�\~yeiqa,�w��r)!�*Ұ%--�e���SqX²N+��j}e}��N"y�E&���y0��sl@�Ȋ -$�͔2탊 �h2�@��4t.[[�
"����+ �W�Y��J:�W=�b�$]��Ӈ�k�BH{C|֗�_Ø�OQٹ~rە�G~��A�l��%k�c_5�����7������u�|s�N��N뼴"����W�|*��Vj�J~�����cv�e_Evʎ !����ܼ�M�(�C�����:O�Xf�88�����̦�ScWX~�R�}}�o�� -`0ˍ��
� -S��
�)Lտb������- -������t0��ioz�q kM�\�
�/� !(�bW|HpF�\�?���4 -W1b��p� -,�� -� �c*�ek�n��j#�?,uy(�GI�k�䎿�+n��-�P��ӵm{@��;`���o2��k���<����,#�hS� O.x$�5��pρ@y���l��|R��b%`���z���k6 -��c��P -#zy&?��ߴK��0Z��gߋ�f�ϼ{�m�웮נ�9��%5r6`��#�����H; - -���0�����A -��z=\qg��2����W��b%`���z����Q�C����Ȍ���OC���ؚ%�L�.� -�� -@E -�X�@���;\?Қ֯��n�����er|��9�Y<_�X�<` -��D#�������7 �7��$���hh|o�)o�����ϸݬF0�*�o�Xm�3{R��a��1,a��L�Fm̎����'��a?e�_q�U��#clc���X�>��D���v̧���!K�j#����Ϋ��^����Z�V -�?Ƭt=�0l&a�l<�Í��T����h�=yY��}� -<�C�Li��eV�����o�|������ϣ��5�[D��yD�+�0��r���o��������!���Gݘ��[��'�&_Ek8�f�l)h -�y�c�M���1`�A0�/�C�ې:w�) -���e��{~ܵ*a+�����)��(\�U`��e|J�@��K�_p�ߝw -^��!����<J��r��7w0'<jެ7������(*4���6D��f��a��ڏ��k�� -��u'R��Nܼ��I�|
�+Ef�y�`G���ž�Ě8����rLW�k��ՑT����I�X�ךw�no�̽�4cd�dc��9����ڣ�u�J�����8R���a�?�3����� ��b� -l�v�0-�d��O(U|�p�ܔ�Fph����C���r�0�@����n8��M7i��V:�0 -|��.����i@nڿ0>Ǘ�@��Q R�c����46YA�/ -Iԍ|��t�z>��I79�v�ä����(Bl>~|��m�)�
�mx��Ŀ>�X^� Y���T�H��G��'P�O��ݯP�g�8�z�-$+��q�V cN�x�~p�=���������#��pGB�|�0�?:xB�DA���^
%��������_w�I�A��>�>��`��?���R������*��u��0��@���X -2�kp�c�������~[�������j��ap�֭���0jŢ�b�h�"�G_J����d5d�!��//%8�ʬ�z���9����9��$���w��p��s2���=Y -��@O�kn�9��
�0|���ZMx'k�������9���#=�����nm,3 ���(<�7�`�2]1;�њ����s���8�g�_� -PB����ǐۓ�M_�25�3 �
���cS�?C�|��X��4@pl�v�`$k0 -Y�ig��+�Ɗ<7���Y�A�!R� -�`l�| -�
Ry\������>F�����D�+�L��4�`� -=$ f��9{�F% -*!� -�F`�l��=;(4����S� -Q7�nP?��}e��bU4w���* ���?;b<�2�6i������E��?v��F0� -��'�kA���x� -��e -O�G_�R�Ńz�%|�\�l�h�'��0%l���+��b\�Ue5�� -`WE�R�&\�D�Qxq��#�'��q���B��|��a��~���^�� -�?�B2%O4z�uU��� -�����l������٥!0�8 -�հ+�(�G�؏9���cp� >(Ŭ��C�k^Z�V� -NJ�C���W��[S�@����`/�0����c���s�">H}�\��)q!-h
� -�<?H
?ؙ�q��u0r�I���@b����� O����o9Hn%��`
�n�qR~�t���R���]��U��D���O�bэ*�4���0DK��p3�|��p&��Dm�2 -r�� -`��ՔR���� -�����'8J�T3���75�ӥH�0 -p�$Jp$��I2��s��`G��S��`=$Nq�5h�2��$�M}i?�ä�?�E��o�KIT� -����0���/�;�m��a! ��{�b#� -�ưv -VQ+^��{�c�y���c$���>O���5&G��I�Q�}��o����~��}�m�� -���Gc -��77I�����ހ�����0�Pz9ᅦ=\' =0tVC�dإ�֚�[i Y��, -�!*���T�̯(��T�,.��_���|+��\�:�zE?���[�:��c��O�E슩E�Z�.z�ޢW^T�2������| �ܨVy�R�0SV|���JG��L�N��D�h5��2"3(����� -��uqм����3�/��BVVn�_^����Ju-�ףG���f��Gk~�T(�q4K �X��*���S���`w�
�!��"��nc�
X@ -@���v -��ق���z#�o`��3Z�:;�V -�TxW���� -����'[/qF`��ύC���Z��_���<X��v/4Q�.��E8�b���`̱�)T�yc��<���m�,�2�&���������)�f�!��2@���K�]��cC
LV���w�/�.�Ш��n:�� -�pi���y�`:_^��;��B��i -� -`F`���;(�����Ā�����SC��=BI���wW�?��D��ޜλO�~0�X�س -
��v��`; - -:��4eb�+�?=ej�6�Ѱ -��:���28�� qv�m4�`#c -f`gow�Gl��&�b��=�����u��ޮ��)*|fv`�U�H��E����m -��X
�����Ko�aO wv���{������֝�$�[[�,�$X��`wa���Y���[;�-
R�#��=��u�z����V��~���E��9D�4�c -���>!GM�LL�yO=��S|ސ����Ԛ���^_�"���4�ZB`��$
;d��}C��s|�aJԻ�\�H<K�gK�m ->�� -��@��#z�P�8<�Ζ@o���M -��w�~J��S� ��p����j]� -�3��^`.V֛)-"_�f��\��V]��^uYn�4Q�<1��ç�r���T�)� -�����˿>9���0��h_*��)4oQ� �.z~9���Fֺ?�g�W��#�Qfv�t�ª� r�)�&��8� -����݇�4Xƒ� -d�)�հ�|9J0MJ5�C����>lt������,EA�Wf�ݻAZ(�Q5H`�Տ���e��}F11~��}r�=�9i��7�v2�u���-�bCH��#�FoDq���Qn�S<8l�h=d$nEɓXFDՒ�u�X]���ʺQYdTv�!�)�u�,(Jh���E{)G�&��pJ -�N -�UɂIp0,y���u� �yi�0�'^}1U?�Ņ�U -]�(�JቫWN�\��}Ff��>:� G�:\��ɸ -GK�^��V_�3�u�9�h�
x݀��K0�|��{uV�����[����M殂�Cj�Ň�㷏ף�1�F�����N��(��4�� :_�%K���>џ��A��d� �������մ�1*!����f+a07Wi�|�D�M�t���E�3����d6�P��H��z6�ᘰ-���7wX�g�Q�߁wG�Jً�B����3�U�l�� -��_ ٧��v���i -�Bs���+y.�-1ʤ��ga����B g���n�~muR��o&`nι;�fZ훎73d -��l.�vM����p�@H"�����~���g*8���Hi�v�߳�P - �%yP�0��-ڧ�_�,�X��Q��&����b�H��y6*@���`��Q�Z��m�ڬ�'��b�Pk?��
PRu;I�C@�x`?- -��oR%�m; ��px�DXh�lȮ�zb K��9�~� -����i��ka w�����@H! ��n�m��8�@��b��y{~f��
��x���r��?J'z1 -����*����e�D�ra�����.�a -�x0b��ܵb-�ހ�7����R���^)6 � -� r߰sA� -�t�8&���*D;��
�A
��� -X�σ���]�Q�Q�Iq��� -�n���)�Fj -|���D�;Ϡ� -`�� �Q߀���ѐ�Y�� 0g#�["�՝<�hǤ�$�ϵ�R,��A��aKD3��4 -��Y��ƍ�j[d��-�Z�X�T�+Up�Z,x��+�9DGK]}��cҏ[�U�'U�a�F��0 - E|P�fϰ%KA��|y�A�ۛ�v]a�x1�Ӈ �E������v��x���ÜX\�:�?m -���/�5���Q��ˆ�� -��~�ɀB��`��!ԇ=7�:FVLn���VE�����Lb�"dV�I�̎�0Z�ޢR� -��
z�(����0�p�q+�k��1NY�7��|rɟ��/\��2Y�7?y�����(�����V�0�~����`ا�/G�׳��=B @o��,�z�(
-�I8xK��,�������o��n�D��? -���8������0�c��X���n���J"6�d���tD�~���UFB!�/"��7�Ԉ�K� L�+�I��� -i�<����1�-v�@n*�S-2(��t�q��?� -�ق �@��{ʨ!NG�K��C�����hH �3� -��B\\� -�I��)jWeeC
�Ư��0�14�,E O-����� -2F,��!��Ey -���2 -_�0�-����"�e�^{M�UK}� 5S[���fh -�
Pz�݄ �-DO���]~B�`%�j -�3T.?ϣiKYd 2��Ӂ����ݹ�9�͏q���p�`5�������Uy;�;�O�����:k��4 -�,���=`<�}7�>5m���6�l�>�E��Gh0K����\��35N��y�_b��n��|��^��_ovr\ -���.����P�����������̇�b��wF�o�����}uP!�b�� � -_w:�G'��m�
� -��mؒ���F��<�����$�mF ���3:����k�*�0 -]���l��a -`�]�! �M�~;�`��30�*��� - -��5�d�8��؟� -`h � -@1�� - -�>_���{ӌ��x Yњ�̰��e�)��f�|ե2��pۓU{�N��X��&��ry��wHUKa=X���!���'�G����x��-{����2`�+��pF8 - 0 -�p�8U�̔�/����������-�c��|�T'���b�~]�*8 -�ެ�8����px�߰�;��E{��/�'p?��*�!(�`ki�M�A�����v�Uj!��2��j��w�V��j9i���� -�� -�TR���\L�)g��Ι��"��f��>�pK�w�Yßi6U�\�#���ST�W\��ĸ?=Ug����u�j�p�Ja �bc\"F��"���#p^���.�vA�W^jon����D����>)��� -i�����66�ƺ}��dLd���&�E2|��lm�m��8�] �(*�����v���X�* -�O����L1�(������^������Ǘ�G|]V�*l�����a8�X��gX -�3X'Pp���Gz'X�Ag�M��=�ڔ�_�9%Í�0�̂��|ܸq�� -�@�O��┞2�g -E�/%Q -�����&�Z��w��f�,�S��_��(PG� -(J�ȹޕ+EW�_�J�M
�rɋ�'���s����uH����3W������v� -�df� -�"@ -�q�>� -�h+�K� -���Hv -��m� -���[���./-���<C�o��:��7�v�X��2 -@f -�� -�� -`3���� -'�����SG��ٹ8Ko����) -��T�Z�[��R���;O��ϻ(�����s��~��p�DP��}�bm�\-��`���r�?���]1�.���@*��gG�u��)�c���L� -���W�-�qJ���V��p�F%�Sy���%�X�FX���U��#�<��
o#�@+��?�Ԙw'���Yh�!4��n��;���;B7嶂��*���� -hG��;;]�ر}�O9^1苖)$ -3�hX�8y�H���*����� - -�[����,s%I6L4οy - -�Ԗ��Q `�����[i��E���`��R��2EL!�bgLp�`=�w�P̵�Rަ��mc�9����6��
.����A��
0�S��]-!��F�� -��
-`8n���f�������̈́히 -��f�NLL�g������><43P� �3����H�̷����ՙ@ -��1��34(�6���jbt�b"1����%�M�|������k� -���ry-7��<�j���k��a�W}6R�Q ǗUMB�Ps�Tn��Q�FZ^^.�˚a��Z��e��ݻ�p�j�Do�ڑ��>˵����p&�o��% -��� -`���Up�SМR -@0Q -z^���������*���+M����/�1z�y�B��f'>�0� -`mU -���7��#\�Wá�������0�K�UZ�H� ��q�L��bR�}������� I��>��p&Hg�Ў�����gi��ẩ����#��o�v|7yu�+��7t�dF�#6� G5��Wl�5�v��cK��:g���ط��t�?��$���p�|�d_�����q�u�,��92�6�ϭ�4�Hӄ�q�s֥��g�l5潨�]��� -��( -(u5���m������F�Ѐ�����+�z�y����}��!������8���*�����)�
{hȰ�Z�r���<UQ��?"��>���r�� &�5���Q�(q�I�~3}:���Q��V��TP5��8ҰB9�\iͩ���ޯ@|a��x���� -*�p����7�\�"*�ԑ.,��/`O���$S��"��9�~�[�x�%x[y���/[¶YS���������8J��K�V+r�WZ$��hn�+L>���80p��j�?���e1����c[�,�n<���" -��������$�����sa�E�)��4&��tg�O��n;�6Dԣ�Pm;�&$ki�.�O~�FnK�`��Nq{OR<U�v���Xꮩ�{Gn���'nE����k�3eQR;*S$g��O�/��"
H{�N�q���9��ئT�# -���n+���wE -����:������~g�: �q���z��W��t10@�0�0�C�����:{-Nm -@ ��t�
��-<��� ��(PR�o����m`!��(�b -�z�S�6��R -�h4��qI[į�0K�t��E��MD��`�;X� -n� -�"QaaYU�25 �����cuv��3�['�/����?� -�v -O
�py�-O�˜u���Y�@M!I-�67&�������n�T�w� -�$_���@�����ߔ�^�Ѱ��&���+ڈ���r��Ml[r�z����$�U�?W��'��Ͻ�'v���6��?�P�J��Ee�Ue��d9���[�-o)���������"�_T -B����f� -��pH��� -'q�l�S��"���Gc{{��Q�mK��L^x���Wtڕ;+����Ԗ�l���[��nwG��C� -�/{)��a� -��Q�D��Jjdk<�8[N�5Dy$�y�m �%��$�
����" -�$pM�,G�7�u�k]� -�@:�L�K����^���c<����Z(��4�����WZ�SR����4:�y|�$yA[�ω)�9�[�a���'f����\��P:1�QG��������e5^�80�鏡�?�y�����������d-��3h� ����# -�4��O�be����ή���ann�����|sE�;�������q�øА���MDA8�� E�_�h\��0��&�Xb�lj>H��9�5#K�wH�`���m�2묩=
���T`���I�g���g;�s���2�;Y�� -�F�g�P�F3��o�R - -@C�*�/0�E��d�|L'QѼ�f�n� -��\�ШC(W8�b�ݾS -`ů��Їl]b���oX��k<d�����f�#�V믛�ګ��PKek��ˋj��� I�q�c��QZ�k8���U�Ϛ�uV��k��,� -�H��'-X���-��%��B�)6��G���&���kc�W�M;�s��O! -Qͣ�!:hk�����eo��J�Y��x�yS�z�������k�������Z���uK�� ђ�5NG� -��c -��f�+8��|������S
"`�aN��!�{�����d�at�/�~�N�U��a��7�>�t]��k�jX��kw�{�_f� �,����U`TV?o{�eA.�`U��K�9�9~��K��/7����;�\Lb -_P�~KѠ_� -�0t]h0��(]�j���҆~[�V�YH���L��p-�y���k�h��@J�<���M�P�ע��8�<������b��ן�}��}N[�8}��b�|�˂���Br_��4�vl)g�.�ju9J -�yV%�����X\FN -7#��$v|!�i(�uo�W/V��f�y%R�'u/�eõ4ZW�$(�M�iT�����1����i&bS -G�g�� -�a� -��V]d���[���P�.���p�rd_��)���yj�ߵ�卅���<�� -�O��+�f� -�H�m�מ -[�b -� �*�Y�P�'���2s� -xs�Zz�Q -@Հ -ڨ�p��
���~���( -����������zF�v���%�@މ����h[>��I��=zt!�@�H�~6b�L m;>���������moxK����;���Ȯ� -��KrKsL��-tUD��R������+�fXN�����_���rd��5�H:� -��y -x�X@Ϧ�3�@f� - -�d;e��G]�>.�i`���f_ -˪d�\n2�y7U�ص���~�Zh��Z֟�6R��՟��[����lV5�D�7�T�s�����}���嗛��?���U�a5|���a�aX]{���!� ����f3��Z�
�x���7�Z}�"�Vg?(��I@�n�zJF��%.UՉ�n�����qު�#t�f��Z���>Y�����oJ* -�)s-�Ѳ�Kt�����\9^s�+ҋ- -e����l�+������6,U�~����2W��ke�)Ӡ�����w�X��]u��(H -s��.D�j��� -�ke?���b�����H -����� -�����9���4D��k���).�m�M"�:�<u��m��aTE��S�0���!2x�2e���MU_6�B!"���C�:��1�rI6����#��$~�\���\ -�-D -v�-��eS -�� -@ -D���R8Z���<��V+w�zq|��o�%2�
(���2�wL����iƚ����d�6�?�y��y=ۨ�,o���䤋�A���%M����-�����nè����̟����e7�� -n��� �*���ek>m�vG�á -`�$���8C - ���k�~.�� -��m`*����j�b -��r�Q�Zw�P���k�L �J���xu�-W��@:O�%ʉ?��\�L�O� -%����?��Ꟁ�8Z�}�9Bh�T>8�Fz�h!�7X(ܘ��>�0) -�Q�wS�� -�c��8ۭ��z��q~� x��]�\n�B�U*��Rg�+� -@�����ilԠ(@� -����5�$�����ٜ�ܭ՞*���TE -�TZ-�����������±YA�OE�]�}�]�\\/�6 �?�Y��%0�L��?��74L��@�E^��Z7c���_�S������\��6����l�����|��=p�R�@�}����:y����E -�]"����Vc}��1㭕VCՐ~�e��z�)`�9����k�i�� -8�b_�(�c�����yלv{�ގ���)n�5`;T���WHB� -vE�� -�J_��u��N^��^$�UWC���76�1�?�ٶ�}��[P�_��T���!H���['��/5.HFs���,�}�c%��o��Dq_�E��BA�@�bɆ�.���l��fV���60� �Q[^���m���A��hJh�� \��m5Vv�]) -E�(� ��+ ����~jpT� �WV�sƒ��Ś6". -Y��T'�&� -j8Z��8y�&>|��aGC�xo�ԝA��Y�tXR��I+��F��)���� - �P���?FV�J����(���
J�6P�<�u���;��Y���
���f���%����*��JKk�Гף�q�u���F�$ۭ��(5��6�-ﶗ������iH0J�wT20�E -
�0$j��&��6���U�~�kw�n ��'Q���BkH�O���G�~�������G����Bܥ6�*�H���L�WfO4�'�g�� K�c�1'���q��f'�X���?$�q-U�������' �b�sL��j�5%�&<��0���LH�-ygӓ�8��V -옹��e��P*�25�٦���c��h��~P.���6��6�I��9B����4�<wgq�� -m���a�Ks�Y�^[�F���M�9����w�tcRҿG, -s?�����&�B���z�=�o�Hړ�Y��%�i��З+�����ݲ&��m���C���ȋ��̐���y�2'�~Y�i����f4\�Z�%㮮z,-k:6��j�������g��J��6���j -� -��)��ߣ��S����{�V
(�V=_�q�?�:X���|���444�.�c%����n1�����ʊ������&4|ʭˑ���q�S�a�Iǩ�P�|�������f�$*�7Y��ze� �
I)��GX(��9,�����%�$q - -�,+�"�Ճ�ꎕ��ʪj�ȷ�٨��`S6q����p7���z>�� -C���U�M�����ш�⺪����<m�(M��. -PE �yK��ʎ�T��Q� -'�)��ٵ�����u�qT?�]�3w�ۖ�0� ��U�� -qM"�����l�+��YS�WO��F�hJ��U(t?�u���Dؗ�,D�lS���ߨŠ]�����
��������ӓ�nD�
��KX������������D��w��CM~���)kps���Guk>�W�Ź�h]���-{� -�d�K��%��� @���+Q���v�J7�0��m �-�j�� - ��~�D��X��h�ݧm� ��N-��S躷��t�;��S�a-z�h����*L����A'�N�=й%�U�+��}���a�1P -Yх�z�V��b�[E6��6HL�/�@>�_&;x�y�� Ye�{UN|X:��B3�?����hP�M�o���$/��e���.�[/�IJ�2o�X8�Y�f����DI�C��Ѣ���XzJ -�ؑ_n��Q3�W���㹈 -��Ւځ*S�k@ ��Q� ���ov�M��������7��U�U@��4N��֔_'3ˤ -��}O\T��c -�Z� -�@��Z�w�ZA - H�5u������R_7g> -G�74���|�� -r�-�EQ+@�)�I�u�{|�ž�����,]�o�mx�� -�-V[���&���_U�y��x�~r9" -�i�~�E6!�< -��*,h�{Q��� �U -��S�?ٹ�؎��%CX�S�.��e���F"�+rӂ�hW`_ujJ*�k,Y�22�����{�/U -��_�C�\ -8U�jP��\ۙAJ��V��0�}e�Hf¨�j�lO�,���twm�`��������V�g�Y���`�;.�gWaD��DQyIϒ���y�hxН\�L��K9:o��o���,R�Tm�:2Lb�8ar��?���%��1���,Q�^�W��cA6)K�j_e&E�gK*����^e������z�F,�����ƼiV�,;z�Z�U����ICٜ���4.�|�j�����k���MY��e-⽥a��Hl]��|/�t2ֆ� -VJl��T�~��m�\K3�m� -��lV~��Z����#P���}�O -�H�r����o -���/-��9�,�Z�@M$�\�嶹Z�i?o���,p��ٙ��";�E�Z�]e���oO��?�?��^��Z��6�e�6��V˼{|��Iit�UUCj��;������"v�^�Ӥ3��s�W�<5�N�Ԉ���ε��� ˇիb -�y�7p����2�~��e��.���F�%���eeL�]]��c��O�_���]��}56�rή2��蟃����P����@��9�js(�E�N�~*��&�kj���5��:���a<J+"�}G � �N��58�c\V۲t������i�u)�S����R -�-{p��j��KE�a���z���k���/� ��s<�H�b��8H^��C -�RK��65�%X�De�B�*�������ey^�ͨa?�c��]^�R�{fKjU6��/�7fo��r�����m�$�M-E�8��h+�)���� -�!;c�3!��Dl�M�I��ɨ�Cϯn�����g� -����t1���Q�5k���;M���ӊw3 -qd�+��._ar��B��Ì8�6ߺ���H -bdb��j�Ɀ�����MN��\euunq'o����xtz����-�j�4 -uw@w��:�5l]�+b -�9!�h;a)����k�������a�;) -��$ub-_�c��k�%��⍀�R;��G8p��b)���Z{��/�P���:5����z��=6$���n�6 -`fV5K�j/`1��L�z:��)�����[������kn�m8<qrk� -��W�Nh:��(�k��h�Y�-���mW���Ҩ�c~D�L·*����H�@+���[���eQ�]��Y -��kq�~ۭ#
��R𢡞N驞-&��O^�dK} m�, ��:���-Zr�ޭU�U��TE��!N�� G��d�[?��wF����������h���P3��� �S�P�0SD�P����-T�Hb Nda�cFe�[��W��I�����8?[ �ϙF���k��O4��en9�� -PYX"�o*;@��$��W���|�_����������E��G��Taƥ�ƚ�w"��br��jR��e:%yh=��Z��l?���k����c�����nٞ��-�����[�x��f_ -?m��.EIC�HV5�%_,y�j�ch���Y-�~�s�9��s�'3?1���ݼ9?_�X_���o��!�h,/�J{��`����a�1⠝6"��|��l�-@ݥ۳n圹a�/S���'�e&���m���[�Vl�0��?# -�A��22BR�8���S��A.���DF��B-�I��_� -��zV���Ɔ�B�UϏ�f��m(i��t+Jk�������gq�i�*�?��*��7p]�����)���\� -�K�N�{�kK�xZ�h������y�� - -�ԭ -p���F��Fͽ�{ -�h�O�-s�'���?�r�+��'O���0VY� -�88T���.��}����^< -Ա���� -`�B �s���u��^�� -�9�� -��K ����u���±�%\�`}��P���﵂���H5��ľyS������&����m���0.W��j���8��cJ�,��@�E�A�*�a9��(m ->'/�}.Ld��Hn� T�pSt���$��@%�LLj�*��( -�hY -:�#C����M��\�Ҫ�q���d5�Ѧ@��W����;�4U�9���v7npY�(Q��A��`�X]@^�SԷT�Væة�F�ܸ�S5��s�cy���W��t�#ݮ��({hZ~�� -hZ����S; -4,�=����r�( -���{fn?��Z������w�����W�r�@[n�ϩ��V,O��r[�4����75��4�����������J��h��Z���s{��J���X1@@> t -���2~�Q�� -�J/ fq���I��$��%�>���� A'��)�=[�O}?Y�P�/rKΔ|� 2ы�# -���oz']����$����?������f�����3��Ͼ}�?�����������>�O�v���P�H.�����|0�3��`"ʇ��w�?PS-,��W���y�s��(�pA�Mیk#| -�q� -�b���z���I�b��ᦢ�
a�mU?�Pޯ��7�z��_���� �����������]I���0fN�dw����9��������8�*I�T����AS��ݤ�Ѱٌ�q��+����sL�ؤ��{�\�@gc -������9`'M�u��Ђ]+�{�
�����c�5�8q��t�df�}�ǭ1A4�N����q�O��n�-eU��`� -���=piCM3�7� JA�ig����6���^a9�����A_�:KX����D���q��_'�l�m�=���=ٔ���d9}a.�0�T¸3�������qz�����5���1�w� 8[`vټ���.ۺ��ď�`f�@�&7N����I��ŭ��5�1����+;�w�]<Up��������<�ԋ�� -���ސ��H�c����8�:fS(`qqV�J4�3h@ ���F���� -�ٸ�ʐ��ҭ���%��
�I�/몽��C���P՛9K -'�]���]�����
v��>�*�Ln�C���!Y%�� NlIz5�7[�+T빢 -�P�# -`S�[��rܟڪU�9�O�fʿ� -}]�@"�\ - -����������@PZ�` -@�q�?��1�l������D��喣�����՛�G�[0b+R/t�3��]9��G��k��U}ʬ.�7��G[����Χ��4���*���01}�՞�M�%ڊ��m��s�� -psu��Kn�%�q�L�yi��8��5�`�+����֫����ʤ��z�\��6�\��/��@� -p�������@ - -D�dMd��O>9k�!�
����y�7Ga``��I� - -@���52�P�ˉ�S= -HC�n� -vi ��W
ܠY|y۠�MI߳@�f - - -@D5�y� �F���P8�� - -���. -`��6�x# -@e?��ފެ?ђ�s� -s���M�+B�3���Hϕ� ���������9�,∻�������$' -�� -���\-�����@���� -@.��z��G'1 - -����( -��vaYs/����ߤ p��6��R�j�npQ@ۅ��f'��� -���# -� -�b��WЌ����f��ܝw��y��O@�okJ_`_���
W�v�>�m�����p���N -`��MV��H�w����R\PO�E5�s����/H�G��:$٦���@���x!6/�F)�@�)M��9{r�� - - -�KŶ��_��U����[�� -� -�����N[�̍ӣ�"[Z�ގ<��g�,s��4����'-a��t@����Qy�?��� -��
ߤD8� -�a�;W��>j}��p��v)ε��.��e�4��.�$\lT�fA<�Xʅs�y���owU�������K����ʲKZ�Q -��\_����Q �+���N}�/�����H`���O}��=V_ -U�-H3�i�n!�D�g� -�n�јq -�� -@1���i� -�������$�b -@� ̛��엍��]v:=G - F��0|�X��7c -~&(�'�6H�lfg�^�d��@�j��Ir��BD�P��7��4�\��Ϝ -�*�Mz�F0��� -*�e�<���" -@C��%s�����Q^�O�6��]_Lb -שּׁ��0��r_T����:E��G��\�}�Po "t\�.��E�� -�V�i?���\��B���@��
}w���\�r -�0K>��}��r����cm�K�֓���"�\�^�5�-�lJ�U�fy����tV��2�[�08L��O���� -;�˅�i�0�!��s� -�]�3qU�'0 �*Š�&7$*��Q=F薂 1~��'u8\�
�즿��@M��s�� �0�vB�4�ܜL�^J��R:�|�:`��'<0�NJ$M?v��;�PS=����khį�����}X��||�s��lS���F>Up^Ȼo���TSu�ÿ�3��I"�J�������R -\M�h����B�����4����v �� -�Su66�Jޭ����J=V��QQ�*�� ��``�W��q0�������\L�<f���'8�i��bm.�����v���YӍo����|SԂk�#0{��k���LĂ�\��{
�\��Kb�8M�a����hk�����`�� �Ɇ�f
-����`~���p&�l -`��f��W -��F -�]����=�8�_e0 -��HR+�c�����Y3��@�p[�W� -R�kw�~���j�_�˓������!k����Y�����!gY][
l���NP�9>/���ʓ�ɭ��Y����CН�>jm˳�<��Y��ݷ=|[���|��`��v��\儚�U6#�� -p�ߕ� -@�b -��Yﮋ�x� -����i�ӣ�F�ɍ�^�ٞ* -�(�h��L��&��"_��9%i>�خ���W���(�3.=7��'�����\�_�������}�R>g��%��4����o���q����$���r���3�[��<�W�.X��&�(,�����gf����Ǡ�!�@7��h�1��J�5��*�Ye~B~��d����!��Ç\�S��8G_XrP;��L&��A�ֿ���C��i� ܭ�����i� 9ld��������ݗ~AM~�3� -P��{\*�+��P����1 -��#���� )�(S�%5Wp��h�9���#����q^ -r����P�-�.j���ҚT#�C}��2Kashq�$����I���MÍ
x>�JW�1`���i��� -��\��~�X
d)(�&�t�vU��T���iHo�Z��o���/��3pA@� -������8�%%��ᛳ�� e�;���� h�I�{�mʓU�����_��z�J/V�Ӏ����ǫIdɄ�Ϙ���T��S!a�ZO�$oS� -@��>N�3#�^ge�^����~o�U -�@~�;� - -��(�L -@D��j�.H`R��Q)���b -:Pd�\�ʎ
D��i -�̸�(��@'W>��A9�ļa�ej�+]��u ��������G��8*�֯ݫ -즽�J��
zӓ��` -�vwz9��S���;p度=��-q��i -@# -� -ȓq�V]<�����q��!v��$���T����\��m��� -�$�~���������M]�^��V� -��u-?�ٖb -���z� ��ur�V�^�|���P��LC� ����X*��10��_o�^BQ�-<�WV�;[*�.�ۡ\#�KM*؝� -���8
������k(��5�{�C%@��M�^�Ϩr��.;�*h��) -��T;Q_! -zok݈-�q����2c -#��T# -���[j�VEBa�B�Y.͕ -/о>;[C�+M�wd�]�V.5���9O'+�`�@Mr�<��a8�i6������1*�|��p��P��z�sS����Ƿ�b;���ɓ'�5��Vw�O��[ENVCntmu!Rs?��jU�#�J�/QX�o���ٞ#ƀ�5���3*�ΑI���\/�
-p*@?4X0 -��7��Cp���M�7T��</-&��A����V9�P��2���b`��6փ���=/��M�E]>Ot]� -l�
h�fK7�6 -�]ϸ�7�Յ����+>�bI���A�<��@��M�Ϯ�#��'�� ��?=�]<���B'������y| - -Y��`9^v�����.��=@�����?��S`����uDjAA@����S�sX�Qu�W�P�ȉ -`6�u�jE�֘�%Za#�i��$FI�B/���'yK���X�D��"3<KƘh�]H� ����ׯ{_�$�K��'�Z����W�z�I���������?{""����~(��@蜇+ �*��$d�a�����r*P -�b� �7�M�[��4hy���̋�+�%���9�����e��^K�����]Ƴ�Y��]�
*':b�*ʅ -�XQ�TMk)��YS�ڜ.��������ō�8��1���n�)�����*
��0�2��5��:��� -v��ԃ�6a -�R�a�{��xq�D,eQ�7�$�� -@�:�'���o���_Z���{� -P��+�|?�Y�/�W�~�?�� -���' -�&W�o� m���6ɨg]���B��UK�
s��MU��aW%O"
����^QQ��� �{` �*�Dž�9/�� -x��:/�ɰ�P��\�$b�vh���e�W -�k�V���qc( -�
��Z��T?=�N��0 ��w*A�^[L�ND�@�D{�c����68b����%~�����W�(�]}��3m?��?�^���a -�}w��_eaJ�i -��4�0 o[�^��*})P+���� !4��-���Sb�n -@6����R - -D�����6�w���Yn�Y/:�{ێ�������_'�������؋f���� jM2oO��Uw�?H�h�
m����M�I�-�;%�M��d��|?ܵ�6#(� -@�fǏ� �s�q�.�*�_Y��U�[z�A�Vm�RޔT�Ւ�EY���GG����=,2�믕n}
ba�W�ďQ(�ǿx"F,� -�q��Y#P��4�Rb�o}��~3;���p� -��S(sb -�0�o;}wg -^n<���V�p��\x�u'*�-�j.�t��w7��#�Ç�i��! -@�VJ��z��L)�T�B�1y���T��o�����P3!�@ -��x����|����N?O�*�mP��^�!>�+κ^t�`����f��@��t��,'��#y��k&)aP?;� �5d�k���H�$��( -��n6�� L
� ->�ƩU�
mN�Ox�Ј�x��Cx�� WRA��[�'�Z`Q��) -�#f�b -�����������W�e�i~��_ -�zA����������P��'?�~�$:DZ`[�]�
�8R -����J���k�'O��|��� kȅ�m���.��������G�C�t�c -��ۊ�F�(�_m�����5��Y*3��v%0|����}C�L#et�śI� ˶Z2�I�bU�@�0�?�4�� -aD�5�N���q�&I���DwD��+A���_0c��4���٠.yO���L��� -/���c�YRm�^���k��[O�-� -�C >�w��y �\��L��r�WiZT]��F�K˙]�G3q���bQ:8K�s���!�N.��DK�������H+-S*]R^Z�⊋�t�Z,G?=�W�1j�"K�o+)��h
�$�a�p��]���8�Cs�ky�i> -k$����ޫ�Gwܐm��V�� p-�Wj���v^4�5����Rͪ�/S���6��N�¨����C$�(rf��}-X���i��5��V()����d,)�^h�~� -��QpN@3|Y`��Q1hJP��z5�t�����q�$��gU��9�8���8c:yk���-۲*˯�C�n
4@����+Vh�NP_ -�b�4a - -`msss/�S� -�� -�F+��P -�0�� -W?s -���אg�@
� V���ʡQ|qt;��!��
�N��}�r��ŊF\�]�cз�+��$9���!� -(߱�`��C`*@�y�Ra�V�t^\T��P8S�/}�Du�viu�>^�"͏���/W�4�&��I�u@]Nq�A j�8�D -�4( -��{��ĝ8�2���`)����
�ڲa�{�ҕC����,�Õ4�bN���P�M{ؤ�����+�V�<x�ƳM�r��L�����r}���@^v�z�ɏ�$��op��g=�ԥP�#�5�c��X=mJ` -�� -�`Yk���#Aa���i�5`�m���~fC��sm'�v�4��q - [\X(�s����T�t�A})F�)�x���҈>-���� -a0��ln�a�2L�͂ -lھ� �o3U��k}i��h -�w���J��vW�V -�yyX@�>�����m�0(����1 -- -� ���>�ϔ*�3��ȑ�Ǐ��-T���3 - -@�bs#��t�tzr
� -�
�5�Y0i -@bտ���%'�;��ݷ 8�w�Cٿ�j����ϲ�B��0" �l���5ҿ���D� �DZ�*C�o{�A 1�8 { -�o�!4��ɾKS]R�t��艴�� -@�R�gǡ]"b�
��� �/�?l 8��� -�C\�V�����b�M��j,ʞ$�D��ZC0
�=��#��Jz�:'��Z��P��%? -�^i0�ʒ����� -�oh�ԓ`
��t���`t>č{?�~�V{�y�dŠ�ㅦ@DgH�I� ��
m~���8�?� -&��2�D�K��9SY&�zV ��~?>���� �g���,��B��.�&�n��g�Q�,��^?�2F�������r*@���=�I'��ˬm& -D���"Z����H���)��m�w��5s�X[T�9wUG��*�u�D��i�*�Ґ搱^��ĵ�o:3�Q����l/ J�����~�����a���ݻi�����A~�];M������t -�J�8��t?_�1���&��֭�60�h����3�8F;�+'�-Z�@h�gr֤آjXն�A.�(HQvՊ���E$)�'��\vÄf����NFO>�J�lLv߫ -Bx���������h��k��@���T�_�Հ�`
"1RQ���_��p�'�_X1 p�6������5��݁d������e[b�i��=������a��Y�-ف"u�%\v(S���v~M����f� -̈́yj_��dג���\�D�GwxAaa�i�, �¹8�J��n���K��}�V��j��w�ds�m���/�M���2 -�R���* -�A(������7k�ͥ�xu��Oe����c�C�tq��\�j�7�(���m^�1���0���m������g��g�0���]A\i7��<88:ҝ�m'�~�{Y�,�M�����;:�_?��1�s�ͨ6YI�������gq�}��U�V& -��|�8����/ -p������/;��]�~7�
�}��'ށơ}����h1g�O��W�l����B -R����*����UIO܉v -�* -@��f�P2�*�[_K�h�ց��X��~6b�<��@=����*
����86va:�� -�(/����ŋ���/I0=C�M4�nJ'��A,�/�(餺a{�s�o#h-*P��_�&�4�� -�f��M�W�v�ֹ�U�މѸ�-/M�T�թݤnD -���!Z �~��P���[T�] - -��6{=�`k�B$��������=(UL��.��0�\#� -�p2:0då�dǟ?9��_� -�1��*p�D -��9�����yB� -HK�,���'_Q�Xk
��XhN����r�4e���)��� -@L�2�F+�n�#�� �������
��~������� ��/���Rؖ�g�a�R��`��]}�3�\. -�����U -��w�B�Ec���!�/�GŠh� -y�����"�0�'����jO�Bd�\P -�8�P - -u�C �t�5�TUB�z� -�j��"�k0��\��҅R�^��_����t+�� -�����k�� -u��^�IY_�b4�@�s��8
`+���X) -�眈����4�;����k?|, kW� -����Z�o4�a*_V��$KNQDQf��_��aw�� - -t*U�ZT���x�$Xoc -�O -`�l�m���=�"�q�ѽ|�}�8�l��_���g�������
-� �:" g_P� -��g -@p� - -���-�á:8) - -��>( -��`�1 -���!8G�` -܂�:+�9J4�a�>�3 - - -@�5p�` -f��)��C*�.�f�����4ܢ����1���8���yM�0d*_��F� -@��d -`M9��U�.[[-��c��{�p���I>�k��e�f+�;�J{[�N���Ae�#���w���l���^3w�IGhp}_��5���U�pwբ�B�8K�v�5��ݨ�b�����S�+U[R�>{���ciiyU����z3R�[.�A�����p$h�� - -���h��1 -Rz�K�iMqP -��{� &iJA�r�uo8w�_�ys5ވ6���Mw��`
�j0�����Y.����ud�i�?�8(�����1)����%{�>B���L�� -��U��W9-��1���n��3�'d3hl����:7a}m�ڜ�L#�VhOπzB�����۷���t�2�`�2��-�M?��Y����b -��ku��q�nE��-�
�k�CtU��CG��e�"( -m~M�L�� - ��'
`�_� -�Hb� - -�Y0 -@��A� -��Z��) s�J�` -:�r�K��T RMg�\J�V��J�~��vု9\t[լC�B�s��3�T"�O�6LkX]@} @Sa�<��bA�3���� -|���Wr�H��/0ۯ|+�B�i -�<��i�?\��y��J��������{��Ry��ǃ��@�{{���������m�mi�ӊ����][�,������8�:k�>0 -��+AM;�8��j�T���Z[��^���u2���=���Q
�*oWj�Wtg�3@x�'����$*;����h\"=���K��S
��e�QQ��X�XN:e�-���I�tA��&R5��d�9��4��>��sY� �u���K�C`9!��sNc -�l�t>-�c�r(ĖG -Z����sDžP؟�K۹�q�N"z��u�` -i3/� t��Y�rYx��-�
���@����M8`�Nc -@"2n� �Z�j����[�B�@�<�x
(�C��z��e�9������.�0;?��@�;|դ -1�f��l뵳V��'��}r��+ -���g� -��� -��%jX_J�c`�.���=��
�QF���g�ţ���0��9���M�+n ����( -@z�ʀD��c -���i��Gj$�\O?s`�� -�� -��$��@��`�) -�
1 -\��M:�Q�O�=Ý�2�@�+�?�X�ww����_`�� -����/��]�n퀌X�����������ï�� -�v���P��J��?n�z��.Mڇ*a�錥h�$�kX�f�/�%��������2�+&+��ʎE1���?��|�ȁ�ԁaW��Ԏ*�S��e�/��l���!���ِ�8�>��������^�xA���\ -��1V �f�#@ -�3��\47U2�:�@jA�@uW� -�Qd ���R -O*��Ot~D�(�BR�&6'���A,�F4*F")9?,`lb(�R��4N�������"2:�����ט����$�����ُ��ܖ��9K3HWajXn�B���ʖ��X�Ԥ�5i���ǣ±����)���ڬ��X��! -`3��X�Gp�倃�gu+�cZ[��@���;��l*$n��� -�-)�%��S8c.��i�H -@���ۖ�[�P��:�Kv��� �_0�1 -�b -�n1 - -k&ʓ\��>���+ܗZ���3��L}��&�Jib&X�j��*��'"mlB��Th��{u��շ��A:�$Bu��d����F��x�I�Լv L�����x!,��B��,Nۇ)��������z�=�'�^h&T��oY/7\�U�"Wy���N�lɭ_�P�T������i����+�� -08����)��ws@ -��M�P��t���� -�`�,���:h�C7��ʔus��`�ʄ8j�4�H����a��
�#җR���TM��H�H��O��>�}*
Q��'��F�o�O�Z�ge!BC����g&��#U ���"�m��g���(
��(�����%�(��O}��2��H�����x��[�±�h-��1 -@��e -�F$��dX���(�����w~�Ae�yC{!6�R]�c���%�}�R0��MI9(��ơ�!��QL��LH#��>8H1�$<J�l&{{���_}�H��Z�%���[��a/�ȠIҿ�^|)�G�Pxd�f����-\�0�S�o_� -�ΨJǰ��g� - �]+���N}@���b -�q -� -"5�����y�d���� -������M�0̴!iK�̟�0�e�i�Lբ+��ؘ�ʀ -��Q9M�R����: �/��Sf����$L��$6_�< -��t.x�F��q��/�SI�rb��C�=�o��7�{E�rN��+p��:�e�!k�x -/D�S3�߾6�tE��c���%$���V��fu�U�2`'��kq#C%���=�BP�d�?���'-id[� �4I���U�������Зb�} -P����z��іi -n/�����!s>L%�D�Yk�N+�W�`�aT�b�vB9����1�^P�����0�c�������r\��+!|Ys��`�$�jH�$����[�[UT@�)�u���JqԊ����gx�Q@ -�� -��7��8.�+� -A��u��2W����wp�d�2vW�$Y��_d��dU����c\%�Z%��R�2.e��gf�Kq}.*�_�j� -���P���i�斈:BC�ln�X -H��S��`n��ȿVKl:�`vZ -�C`]�J�����r���9���C^ � -N���+�%1
�C�X\�F��x*��D�+�u)�����t�rQ�� ;�m`�{^����Ɂ�tQ0��] ->��}�V�2���ߤ�vӄ��Q.��Þ�'�r�2�;&:`�}��?����<�3>������\��<�$���8�q���`J�8�Yb���R,S�T���Tz��h��̴�T��/I}\Z�c���%) -R�s�f��gYzm=I�����0;���Hs)K����)V�����z�xu��V��I��%�n3�qs��o��&�aķ�v3˺��<jn@�;���+W�{w���존��s�:g۳��`��<�̥R�]H�>K�.~�j�$ -�E}
W -���9FO�˲+gG����ri�t��*�Ű���(��F�2ϻ� -dx�@Z��[��d�l=���.Ͱ܊~��
g�~aV4!
>K�p��>DR$����35����fW5F��פY�&�U��o���l��dkk��1O�Z���!��8ਘ[�������������������k+y��3G^�;�6��U��b -�ΛwP4�r/_� -�v�Y7��|�y������@09j?aG��g'IsF|cWL0�� -8k�(�t��8�*M����FIȰ?��&�5�׆ ���ĸ�+ �$iN�V�*,]�֒4�k����L���:�����@�08 -���]�l0?nR���Q�?��F���å$��%ת
��pyۑU��6�_��avg����=��/e�%[y3�Q�R -�z��n��ɶ�2��|+����e�����8R�� -NN���kt(k`j���$
p����ǐA�ӏ�~�m;������{=k7-�B_�SK�!D�0���~nt�}=��~��wQ/��^F~h�$١#�ɱ̷\�{��;���A��bG�[Z:~wd�2qۆ��m���t7�./�˼s���v��� -B���2?�������o����56� �C��[��:1�Zm�Y�фW���,#��e���v�~
S':P�&� -<��cR����������E�~�*�9����� -=�@L6~� R����o�Ɖx�A�0�ؐ9�+W�,ig6^���C����RM1h;�/��.�m�.��J�P��:��r�v��dR�(_�RR�'���J�t�ߚQ[~�;R+�Z�$i�)��ͮ -�S���:G�y�`{��Q -O��t�2o�l|��p�42�c��&i �pQ�2���Ø���Ni�v ��%��^�(�H��v���v��3���^3@�]*D��s�`fZ��`����F�$c -�4���A��l&�&���1��d�΄�1AJ��Va�l?�^) -@��yw_��z�Y��@�UN���Z��e>|�/�aw2%�ش}�p�0�����������^�c��j`�����[/�zt�P�O�O�s���alB -7Bw��M�ƌ������ -�rōb���& -D��m,ff���@)s��g&�R - -���:�:�.Mr��E��� �_����2:P�4h��9;Wt�hi<A=�f���� 䌪n��L��_�G"�b -�ڹ��>� -:�8m�A�2w�@������̇#�����Q�{m��o��N���v-��5���n��l�ӆ -@�7%!����IPY���v;�7���;���A_t*.O;�1l�4*�vD7D��9S� -1��o7K���<����q��8W�e(�0g�˴���N��.2"���Ji�v=.��y�'qSr/\ -�'V��@��l�ȫ����!��5@�a�� -�G�G���!E&��] -��~�m�m��Ҕ�=��f�!
t�7�$��O��~�E_�}_�'��n���7o�w��D��N�O�-t���̻��<?zu�J��P��IeT��f�:�ݮ����]z{�{d�紽��n��9EQ�K\�J�?�/��OU�y��_���g~!��~�����WT���z�h��:]m�g~�l9-�k��Dul�F?��+57\�ۯ"�}���f�P\�ڴͶ�v�hD�� -�r`|�ݫn�ב<*4�Z -@_�,�]Bl��2+J�M=�C�� -�e@E ����� ˈ�\K����f�?M`�������8�RZI\�e>���!6� -��`����6��%J@�ZZo�z�D���֙�."@偟B�ZN����T�̞ 5�6�v+��j� -��.�7h�!PĔg -���;�Y��R.x��geE`�!��"HJ -h�@j��^�����U=~�ִ�ŽQ��E���f -��R�l}�=S����R*1�;Jݸ�PO� -;(tyz 7\=�2�e��vp�R -"@�խ̞��|����{Ng���Ǜ��T��ăP.�Z�UN��%�^�@��O� -嘧�B}��ҩ��0� -�8 �xd��:���Nǿ�^<퓇�[P�@1���h�l�4ĺ -�w�H�f0��Ж�9J������T�c -�Q�y����@`�K�iAz��5q���wr��Ӷ[+=��Ҙ�/�' -¤�7�2�I�Z*���ɳ�=���u�b[ڲ*��|Nj�$]l��`�}�(4�T�M�l˷����̱̺�G��,��Rz�(�x��$��YS�4W�ţJb1 -��I����+��(KC�߬�"&�� �����1H���0��L��N��1=qx��P�VȔa�I�/Oϝ�(4�MB�ݸ�AeR��� -@.کrm@��÷ -�����NV���w�)��a�SW��?f^)�%��|�@��k@�sܮ_��u|ۦ��ROV��%f�M�j���`I�`�_e�kӇ� b��~Ǵ�D�0-���,�\
�&+�Z��� -0�'�{������- -@�?���w <����1��+ep� -�p�z�`������1�Q1�S)�@�4��c -��jEc�j���Y��&�3��ıM�/T��K�s�R>�-��0������sXP���ӥ��py~�������ryn~n�*_���������6�>[r�����6T(Rk�\1?80t�:���=��9!n[7/�O��v�;�Gя���W�܄�c -��h�ٿ � -�c>���k|w�T�=� -���2 -�)�����O���������r��ǚo$�5Z���N �N��E�(b�R�8K ��09�(X�¤껈��Ҽ��!1��p П��NI�`L��#,l���r�E�{�����q��z�0�D�s��c�q?o?�W����� -��g+�l-#�Ѕ{��!n�R���r�� -A� �B5���#�TW8)U?㋀,���Uؕ�K�C�$n/���G���{���>�m�7��0�<���̳ɳ��$ A&
��d� -���a�4V2
�h_\�v� \' -���@��9��)�!;s
&��%u��R9�P%�d�-e��Z�r�eumWx�f3A��Ł��BU<ki�pjD}��@Vb��4������U�����#7��[[q��~��gg�F<��K��s+}�[c -��Wퟬ��'f�%��@+�0N -� -��1�n -� ~�&��B�B����\]W�� -L U~�F��_1����LӉ�>�����kQ��E��
tF��m�'�iL@p�.s��/`�>!��ڜ�W�Γw�"���q�S�}�; �����!�x�� - -�1 -�p�_Y��� -�}��a��(�6�ʻ�|!����-���IK��hKł��@��F2�>G[^,�G�bf�T� -E�p�X{�ڣ��9����X�>����WR�7;�a+��x̿T�����-�9V:8͊����ŁW*�y�X���ІN����pc ->�~�R�x9�Vj�/Qt7j -�� -�� ���_�><�`�9�9�x�W"�_���RX��O�P����f������ -�IM����Ā5�ya��[w8�5\,�L#�����L3'c -dF�E�<]�T -.����+ g�<"?�8�6�K��,���V� A�g�g�L�`!���KEk3 -�
��_.�u�
��� -��c
l�}�.�^`*0��'�. - ���ۧ:`$PA���� - ��lzjp���#.��|$��ޢ(���s��x��YoG���� ZYbB�LJ�W8=0d�ND��8�{��������IZ���v �SX~qm���>��ߦ�@� ���\�����#b -@&j"쿩 -@���*�� -���_� � -l��B��:��j��S -~Q4�5>�oЄ!:�(�z@�>Dh�M��d -��@~���t�� ��?4�k(�W:� -�nI����ݸQS�ze(�} -6Lhi��ĝ��y0 -�r6�1��qo_ -b����}��g)�C���������� - -���}� -@�_ - �JvXC�o�Aq���b�&����V��wȖ�I�G��p��Y��O�dk -`?�� -&���6�� - �����?{���_;����+�D@���"�*������Ǡ -��x0�b�� -ΙV��r�ru��5"�co�c� -%x�_״�O��jy^��������P|{����� -�z
�x�>0 -"�h�����#D��h B�6b -�����O -�<����a��((���܂�2_�p�a�L9�$X��� �'�� o�Lj���J���~��%u%\��,�����8@�8�s5�᧲�z���4܃�'SrX
����9�4��05�~������R� -�l�t��,wd -�; ��8��4�R - -��A�����o�*z0���6�v��Μ<�
��S -�|^~�!>^ -�F`K'�ٽ( -����XH�L��x�ɏ�G�����N���� -�8W���''''����� -�}t5�ƿw�O`q�ϝ`)@/@0S
�#� -H -5 -��%{d{ �~ -�̛X�k��� -@��}c�!* ��hr��ehy;��}�� -F�J� n�Q'i)�V\��SI�K��sc -G` -�����;��u(�t�� ��y��#�� -�ۿ5`{��<�k�C6��nvߩ��3�W���J�~1��g���z -@!c3��8�l�v�Bq��m�� -Y@����4��/V/�i��� -�D�>
��������_\���_~���b -�_}�2��!��O'�߀�2>��`D
bRc���.Rb��-�n�.�&zTm<��O9��ֿ>L�0���1�ʍ`�U�p���+dRV�O��0O�D�o� -�
�
�4Ǭ��`i�a@?wz�,��r=�6 JG(�#��K�ʩc�HG����?�bxDU���8�2 -`*�[ -�� - -�z��hx02��lH��¾,?�����I~��o�J�>(;5�+d��� -� -�Z�w�j�֨��? -(a���(�%�9�Eh�E�X -�m��0�$I����_��j�M�D����� ;َ�u"����$ -�0�@��v�n�ڍG햺�H8���OI܊I#�N:�o�{{�F#n�l -J��xQ{��s��C~�Ҏ�%��#v-7�I���H[�g - �G�Qi�X -rQ6p�N��c -�S�]Y�S -�21�W�w'�:@�f@"؛X -34���2'"�o%��a�M�+W�-(+qxP|��$x -�O� -��]�_%�?] -#Ö�a�i��+k�%VL���W�K�iJA�����O��bKl�.Wd�`�@�$+MK܃?y?��/.8<̥畂%v=8.+A
�,�s�q\d�@=8w�V>O���_��Ԁr�"�i�ם��� -6>���E)��Z -2��lhE O@��J -��!|X@3R,.QX@l��*��!�5��_֨�Q_��V�#�Y���/UP��K -߲�3���* -` -^c��x�y�� �~��W���! -� -^�z{���.U�i -��`�pC����o�p�GϜ2 -{�X���D - - ������Z�8 -�n��8��Y#�~@�,7ة��
,�[��R����rA�X� -�U���~���P��ڨ��`P�(��9�_�� -��gV���TU�����94P� ���;����� -�l+��+�����-��(���l�%���h -�Q�`��� - -@ -n���Fn߷�l@�ڻ�h��\�jq��}���Z�� -�y7l��QST�j�N�Wѯ���8O��ϗ�lu�{�֍����_��9��t5j���˥�9���������|�|�¯�e�?���r��L��e��{Wԡ/��msHv��=J*ݠTD?��61���l�#ѭ��/�iυcm�� -S�Z���6We��ĵ���±�� -6W�J�a+ -�o�`,l����x{�-L��z})��dHڒ���yk/@�s&k/�C@��y��w���\��@.��˒!y[-���[�@gp�혲�g���t�m��b}�Y!�#Ux���3U �����sU�eG -�� 9�T?�+��a`�Wl�3$��r�I��K������2q��+x%%XdwaHx^>7V,�� 7<�<zr��� �}��~�m'���ǁ���1��A���l(r<\q�l�D�.����{%��SXߘ=q��1��R -&�+��`r�0��u+Ԍ�{n"�%1�DB����6�7J�&Z1T+�E�Z�%q�=1g7o��w�4�5x����^�ډ�X#@��h��@������2��� �j@������v��"����D.+�s1��B\���a�K;{ƞ"@U��M��v -�T�ڲߛ���ǒfM���ww�<y�����_>{�_:nƀ�(��dO!����@�Y�,�D������{���C�
Xh��>x���{�~P� - -o�%go��%%�N�1k�tOF��Z�ʪ����ݧ�����>�j�8���@^ -�JA�t�1���U(�7��5�@[���³�P��:
p*��"� ->�W�g1�`�c��^۹R����"��
�U�Y}1 - -��� -@H����`,d�=�V4�F+Jj!�+�RC��_
�1�&�b⤬rL� �h6�="�SX[��Qs�Gae~��f�`�ZX��63�e -� -&��'��yq��i��w
9 ���0[�"�6P�[��1 - -�z^JR�~��D<н$�sd���ho9�.��5�SE��V�q
���|ځ�*CT1<�cSV o���pۭ�� -�۸=��?0Pp``�g�]�g�A\�q1 -���� -`J*��� -8���p]5���(���W�x�;:DI\��(@<��_q=l֛��`��\n���)7!�< -�z�6$������F�x�1�i�2 -�e -��V - -�ބ�o��� � -L -d -�Op� -�� - ��6i��61���=b -1�2 -p���Y�`v�"p�����������<h��]~�����_�� -�|�5Xh�c�=x��@��� �Xg�����5 -|�� -�_�w�� -��&������ �߃?`�#���bX���叨#ذ�I�(%�j���?8���%2{���p��\~�ĉ -`��*,QO�5�Hp�f�1��������� -f�lo -���m �+b -���3������JsPY���=�U���a��V��t�.�����1�T��~��~4���������X�Y9|�ܹ���kp2�� U��> -� -�Pg= -:J�C�Ż�=���o]iݿ��R�4B�SL �)L��'n��W�X����6�?<~���:�$��3@$f��Go�9qb�Cޤ��ҟC%��a��"K�����B��z��)�����A��H?9��N!��JI,W< m�p��$��(�u)��,��1 -z�X���?(+�V�h�����'�i)p��`_�F����������C^Q�#��1*�o��"�Waۂ"�z-}ud�uX�4��{9 - -���}����G`V�k���Ͳ� - -EZ���0��3�,94�ٳ�ì��� -�����'�2ϳ��.��L���V^�( -.K��Wh�� -��V�(���S��Y[��M�"���G�S]���q7�����<!�q+��p�v��-;0� -�j��0 -����l��m@�������������l��<.�(� -X�$O�jp��: -g�?����c@ -�ol�.\'������0 - -2%�°sV��͞�O` ��D��O}���$���(b~!�
�a}�x���"7��qu�(
6��F��m��HpX @�����wnSl�^ �67�*4p�\�~���~
@�sGF���0 - -�k���}��) -��}!���Q�`�l:��//i��^nrL�w��HX�H@=���u�|b�U`�[��aꑗ8��8�������2@>ԩVv�_�g}��s -`f�[����[�n�0�-�Th¿��ݔ�8�~ua�6� -��� ;N��@��y���Z�_�������|�!]ҟ
`%@�l`�1ƕb�y�cK<c -��f��S��2^ -`������3EFD@�<d�y��6�r�W�`é����^�" -`���2�`F!G�O -�� _� _����i�>�zy.7P���Ȉ��D�Gon�B�2�<��Y/\5P�@⊇S10gc -�e -�� -4l8U��/��j��� -��!ANzR�[�V��d -@� -�
v�}5R�r�E����k�籬�خX��j�zA` -إp@@�[ -@+���Eƫ�s��]� � - x��u�� ���#�B�X3��.ѭ{�c)�;�=��^���l?�/[6@�R -�� � -|���g���gP -��ذ@J$o�n?���������\e0��LG��s����uLu�~1���w������s -0'`�* �W��a�@��=��ݞ -�BϺe��;N��r@��ݥ�VÒnc�L$��_� -��ڰ9 -�����i��E��;Q.�x9<�?g�$�O�x�� -�� -X5�%��K@h�Y�� -�4@,�΄��;���w��J�B2<�=liL%�>,��&��;�Hp%vA�@S��+o�}6fa�ؼJp�_߾u��"[�!�[@���:�D-,�� -Ng$��B�>+��j�~�ģ��u�?��X� -��!�ey&+���^ -O�+͞q�imh���p��X�+ -Gt�1�=���Mgz1 -�c<؎ge6���?� -� -^ X�&.��[�~{1 -���t�\cJ�[C�W�M�o�q��(:���� -�� -�J�m@Pw�ޖC��:�Y��:Qa�@���NA��N��O� -���g��Y0���g�5�Z@e$ɀ"�x��ǘ�C�#NXhØ��v縏-!�1�9�( -��X!�kUf�kʚeT4���b��#���DH�h��TY���T -^�'���$�� -��/ ��4a�S��!al�;���֑�ps�V�����%�0���8y����.� �#� -�bp�O{��T�>��L��a��+ �!��pRpq��zF`�g�� -�i��# �ŝtC -�@&`חFWX�Y�]�� ,������1�} 8H�@�?��̥���J�Y� ���x�[6�h7�S2 -~D
-���/�0�;` -T�*�k��ms+j�}�b��!!G֖�19z�f�!�D����p
CpE�qU��P ������'��Qݝ}@t���� -}o�F0`I�cΚ����t��D?�W��J����0���b��J�&��JR���fXe��z�CEX�p�z -x�OA -@���� -\� ����B -M� -@� -` -�_Q��{���?��<��2{-('l���$�n�<�1� �����{��ҺK\J -�56���~�) -B�b�Ka�_�q*��
�_�$U�͠,%
�e�@h r��ތ����^�<c -�2�b��2��XU��T�s�8`m��o�"� -�s�����C//T��+0��Y�Z^6Ld�� 7�eRp�)G�c -���<�^��VE�v���Q�����i���e! -_��~��9X���x�ϊ�(,�ٱ!Wv`��Zl�~���� -�g�q -m�(@nĺ�Wo$
���I� -��߭p��DT79� -���l�C*��ܓ�uwt\��@�� -�Q�.`g�6����}��gȼ�)\��դ�B -z -R��{a�C���J�/��:X�� - -:\RyQp1���@VYT-�6`��3�{�Ys��p1 -p����O1ܞ�p��r5 ��&��jq����m��( �% -���(`C �%��&�1%��A�1@s:�� ���^@~��0��H�O�y��l� - j��GI
��aS�5'��Ǖ%�(6R����Wh�Y��$��
`�č鹹�\�'�,�lG������V�h%XZ\�(�N�,�᧫k;� -��������>�46��?^�s':��˵�u -�� -) -'�po��z� ��SO���7�4�r�@E���ЬWVh�!!�G�w��j��I���ʧHҌ�j(R -���;�o���̝;P -�p�t�W�v�G�(����A��'0�P2p�ړ��V�7Q+n%���6|��_�Wn���K���KX
��3�
xK^;;1�aw�m�߃��p�f��֏��?���� N� -PŏZߐ�j�e�<h`��`;Iv�{�AٵE|�� ��n�o�c���ĭ(��a�0���6�^2_K��Zܺ'2�C�}����� -�ܴͫ�ų�#�%��qo��Cj� -S/��G+\��= -g'�Z�ȟ7�c�Ճ)�I��;�Blm}�*��)��?T -���ȉg|A��*P��A5 -?�f-�z��W��<�I��������V��x�J��[;�թ�Ƒb����%��DXk��s����i�0-p�a��J�4�qK�m� G -²�5�x�����u\�, �n����|;����~��Nn��J�_�V9X���Z��5�Z�Z� -��2�\Ad@����tb9q\a - - -#*��p]0߅��{)B��>;��ȏ��uI - -�;pk��}؆�v�&$A�{�]���¸x�ߵ�@6��0ɷ�8��r���s�D�(�o��o�n��z����=�é���l@�wA@bm^"�Ꮶ -d]��p>�N�����o� -�<2������M�\x7��@��}RȩY� 4 -C8���P�����Mh�� ��~.5 -l0L -� -��$�z� ���H�2��c�̓.�a�=��!.w���5�*x -ε��D3�����@ -a��br�;(� -�6��I���%aA���BT˦ -}����v���I\�somA4���F�Q��E - -����:���|�vD�r5p)���H�7/����A�� -�����������V 0e -`sfvƞP�g ſ1 -�wY_���JU���p� -ඡr�f� �R�V�����(����J�L -�t�*���S:��7"�GQZ��kx�5>�t�I���������_\l%Q0�㨁��� ,x�~#8�E���^��k'�n�ӉO���᭣G%9�Կ����D��i�l�w�� -0cT�&V^��"��0h�����I�)�Э4� ��@�3Nu:D�R������,����x����)��M -��?����@���d�Ùܙ�C6@nV��Ns������AFf�ۋ%�y�J��<�:ޥ���]��g���r��h��sX��_8�+�im=�\h��U�l�ST�吓JjX��ek�TnL7����� -Cv��ѐ�u��y;}E96.�
<��$k
�b�=Dn�l�N�����.�z� -���)T -v�^�a�l�#i�ow�q#Tc�*�B����-�6)���7Nڝ�^�Zmǭ�$����
���2��.y!�����}�^����$��T�&n���j�y�RD�1 -?�"w�r{���~�p�¾Ω�tp��� �����@e��l@�h�/�Ҏ�����M�֫����c���;����ȁ -<�BmP���P��G����!8�܄]�/4@���J8��q\�� -`�H �Jyf�)7�����.�M_�h -�X�Ǎj�2�~�y�k< :`���{E'$i)@7@S�2�� - -� -㟥��T - -�;Wȍ,.ZG -�� -@��S��텼EJg�q���N{&�'���a�+a`�A���ka��OV�Xoc0��[ �g!� �(���+�X��:�P/�9 - -@��d2��G�j -���S�>3SF -��f�YW���Vu =���`r�U��% k4�#�Y�R5b�!j�� -4U@�FU��� -@����j�L'@��/bc �&>�Pz���e^����wk������ߓ�L[�ih -��(yp��O)����}od���?�l3,&¢:m_⑥I��[L����/r -��qpwq�z�� -���!l?� -t�6}1�_� -@��'��ZUq -�O�Oa�O���i"5a�t���K,�����`1`� -��>�ĖL�%�Y�r�I���:@d -��ϮP
��$O8gc -�?���A��` -|��D'���( - -p��'�0�\ -���6��Z�N�z�V��� -�qp�f����Ö�fܕl%�������� -�(�.NE�@~v��ht��?'ɳ��_X�q�.?8<i���}���H�N����A l�gT[j��p��W>04mt������$i7���N{;i�~�$�c�'���^�h&����`�m*l0 �hO�jq!�S�N*��ߓ��� -�|�,���[�_�1�.�7g�f��H�̓w�z�b -����}���ŷ` -��y6�/�ϕ��/������4�;-�9�)�,qG�za~�CJ�K��U�7?��犅\~z�4}A�w�_��BH�vLU��t�l>5 -��j�I���n����f� -��� -��&�}(N�z�Hӏ~�.@�/��w�8Iq�D��-�b -�� -�$���wcUm-f��pt�Pk!8����YЩ������!p��+�5`{u�����5m�RT��8T_�-ƀ��#����5�Ei��&BP��=�}����!�9��7���'��֘i��1PR'|���3��A^'"����_�+�)���0C�p|
� -�)����B3"� � -��� a,�.�R -�h�������j���'��3�_�_���*�o�b - �� - -��^%�� -�<�nE0�����-K��p�Dd[ - e -`��;��Ir.���p<�8ӏ�X`Ho -3��U -@7��R -�B���t�4����y�9&��s�SO����V�G�(�v�vu����q*��O�_⮵~; AI�@f"��?�{�����gtZm -'' -�����(�� -*p�����k�� -��.(T:`kL����`xB�t�L� -@0e���Ot -��+U�F�Q
qC� ��5t��0�@f���J��4�����o��("w_潵��{�>!�G -�]'J~�T*��ͯ|��^%kl� -�� (��~�%���D
�|ѯ���ԋ���qů�p�Ap�������c.�+�[����1N��~T�}t�*��6_i��ǵ -��j�G0.>��J���ӈ�k���x��Z壧Q�_�����F+���q-[
-XQ� -����\�>ȏ���'6���"ڭ�X�%+S -���� -�2�zKǰ��b���K7�8K��Ϻ�A��t� -�->�K������D�߉~x�kp -�#��{~m��j��̿?a� -����V@}�K��-�z;2`%d� -�uzN�g�oo�K�3�i� -�r�=���|(b���������!�/L��j�za -�W] - -u`��IPfX���|f��Nc�)T |��cM[���p���+�_�H�0����d��z -ܘu��3�o� - ���ը�!��i[�?f]D� -� -@U� -����<빀���M�EW�e�c(T/pD���%8��E�u����2 -�G��C�J
�BT�Z��_�h0��;�Y�\K��e -� -��ĥJK���U��~��[0n}�1f�y��L����I��S+�R��A�t�X�3}(L�w�*��#�a\)����b�W�aˠ���<~��@e� So����tՍ�c�i�
&ܑ��??&e -�H��U�+`��O ��E��-� -�Q����7}���m�0rab�|��1w��,A �
+>��#$��'�����1w��_�."��: -�|�"���<NJd�ŁQ�Ʒ8N������p|�j�+���x�,���|'q����1�Q0�q
�qT�X�� ��0Q`�A�J"�H��B
~bN�ŵV[�l�G?�OT�S;^h���΄������n����=)O�g���;� -��<�;��۪����p�H�͠���!+hm; ���\s��o= -��� -�}��h�������~-D���n=����~��Z�
+?8���^��/��;�E����8:���OW��܃����NOO[�� /�u?��N��]ź�#ϫ����q�uT�=h��1_-�WҊ��E�����A��w���;ma'�U�wb��>���@�EW��6 -P�m�)��.�kw�Q���B�j�DžQ�S��O���f��MIu�#{?�Op� ���!��~'/�i�p����q^>{�*�-�� v� -7n��r|��7�ςjP�%o<ϑ����1�����_
��A|��cf��h�>`��{h�p��)���?� ��c�֍�\w����z -�b��u� -�Ͱ@�� -l/v��?�&�N�da|�����V" -�P0����SSK�SS��� �`cu��B -�,��|7ta=� -ﴞ� -D�]f�� -��gNr#㿿���&.WNՃ���|o2]Y�h��vC�ɠ;T��Z�9�N��~v��0�8���r\~thͥ[O�5�z� -�ю@5�@wX��Pe9e� -�u�)���Ո�h�5�@��'�T��7��j4�#%��0\�V7���AX,2�x��2�|*�?�����r5�ǥ������@w8�o�^����~\���A۹q�u��VK�ɬv��\���j4ߪ����@�Pj��!���k56� -�KUM�G���SS���������K;�e-eQ�+�v86_�G/��>sp��<�u��q -P(�,A,Z�S>@ -l�{�9)(������I������`�%�X#�� -p�p#������ᇁ(ɓq>?�@�˞W-�?�B��%�����.`>��٪�=+٨ta<c$���/��� �&B����O��V���R<�g���V�1����������M�opx5(W�S�$�<fY+,>0�TVb�ؽJ�R�f�d@r2T��$��_�C�K�,� -v���2|)���� -�,�zu#.���9�^e)�Ϣj�{�'j춘 -8ߘ���f� -�@����3�JJY�'As=j->bԈ�������H�[G2^:e9� �uN�q֟��I����B�/�X�\ݨW_<S��k,�Q�����M�>����n̿`���.nb� -/� -��� -!��+�Z��s��oZOD꾰x}A!��X���6�<�>�+��琡� -��!�8�7t�T�R�Z�mH5 -�[��v��ӝ�������ivR0d�`pAB:�����4Sz%�����^Ґ: -X -��R�np|�H���^���]�
MK++wk�i͵�?=w8�rkk�w���Q -. -�wIc��W-�����>��R��k��#Os]�B����o2ع�lBq���8n�ƭ�p�-�}�jާ�h��~��Ƶ�?�})sp�v�
�����?i#o�S�0�"l�8���8�>�}�"n���#S� -��j����?��q;��C3dg���
��B���/���S� -�,Pؠ�c@��$�1����ݴ�8 -�Xҟ(>��O�!�z��s9�L�U������Z����z�p��9��ry��z� (��H���0.U@u�1葮Tu�# Wel�++��@ -0:y�����W�N����(+�� �
�
6JFRt -w��;F�!� -�_�Ŕ>�� - -r��jP��"� ��*����A�W����)p�Sa|��{ͨ���� x���sWFrH�K�Wv���}�/�! -���M6�� 0m�%�6s;(���D��*8�>đ���,�!��/�"�>;H -y��4XB���9�*������"������a\y��("������xޟ�GL��v$�e����Ġ���;
H�
�j������qS=
-'���qf���V*H�ur��:���~�.1v��8����B�� A�a���n���q�.��!0��fj���ٻ-g -@�n��zۯ���� -�e�Õ("�yyˉ��R���V�R%D�?�!nEoʻ�3_��q�@�%r -Q�J�@#�'����FK��I�� `�-�s�t - -�B��?y��I~�����j�6x���J�!�%���/4>�*`����/-��+E]�[k������zp�0�xydد�Wl�]��c��L�+�@�H�}@o -Ѕ"[���p�'axqԝ8���V���ϞDa��V3z�k�4�a�ֶoDž\n�Px�fn�e� -�@f�{�����S���q>r� ��)311q�έ�kW�]�vu��D���;c���Q���]��v/���}�F -֢{E�]v���2�~ɺ���/b�~�§_!)e�ڨ~����n��7�q�7��/5zp{�y�p9� �!@����}���G��?D�\���,,��6[�a�0n�Տ�K?e˿b߱M"M�1�y6�
���TøV����0���@S,��0r�{�dQ����L2���9������{X -��|p����܍Ba��l�,�W�����c�I�U�9�a�����//��jy����*
���u���c>�(�y�+���ݕ�Ͽw����pP(0��`%�$3� -��l�5�P>�w
�o��K��x8�ѱn�N��p� -0��}�{z�׃k0���vl\A� -�j������&�$�/;�8� -���8�Y�q��P��I%�>g�i�\��e�H�S��+|��U�x"��<�FA� -}�@� ������ -���X9 -���W�~� - w�Q
�|�8H��Ob'�e8 - -��˼�Y - -�V�plɲ� -�E�'~�@�6VpH���� ��e -p��'��+� -�?�,�@�� -��&}>���������x��"@ -`,����;t -������h�<���q��鄐Gl���,0� -��~+��c@�@s��O@Ƅסl^� �� -8��F<�)�5��0���E;j��f�-y���}}E�v;�[�^��g[A~l4a�����ɋm�yl -P���r3|=k�DѷA��²������-�� -7�ui� ���||Ē�U�� -��9�Ϟ��� -��O%�J�Z!�݂��lB�q����|~҇��Z��qD�"6�W*+���ym-��2�kQ�o5��.����/` -�$^%G|6���_a;N�����ry���b�:�Nƕ� *�6���e��|+�a�buS��\@8($Z4 -�/h� -�Ɔ��k�_��'��$�ư�A�Z"U��_ߠ�N -0Ls - -��C�#��:���[���R%\ᓃA ��i=3'�:� -�%�O����7������9>S -_��p�)��Ҙ;�ė�H�
ѝ��ۙ��9� -�����?];m�Q�n���Z�ft��i�����1��p�}�Z�DaoE�?�"jEp����w-H@. R�����7@�+�w� �&� -��[Y�/oM��?�+k+++�h -R߲����ܧ����fR��CL -d
����n1B1�Q�H -�ոb�E@dfd��7 ���w}�O��9��O�'�_��5��sY��|V���� �����K} -�?xy�=�
���!?�B�+���|��H�ڇï+�<9 Ϻ�V����Ɓ��j��a����B.�8]������*x.�ۃ�ry��Ϗ�!��B������"C,M8B��[5 -�;����-��j��-�S����䘠����� -@b�;�q_/^?��7ü) -��0�?ʚ��x9 -�� -��L��}㷕v� -�S@���Ɇ� -0\����n���p�M�=S��0 -cr� - �X :�NA>(�G�}�ȏ� -� -��a��*QT��,@ -�n��T%;�G)�8�0��(�F��@.7r�#��͍'Ay��맅��rރ��he -##�e -@�6�������Q����y
Z�K%��;�؆IR�Њk��yV��[j=��o���F��v�as��,��U���O�/���;���qL�0��U�� D|��� -�^�h1j���O���{;GG -�ڻ�"}�7��G����"���<@�V��� <x�M>(f
7����F�{a��ݵ�T -��#��#��r�����1�|��&Sm -�*��4�O�KD��ǩݩ����[;>E⛨��0�� - -kO?z���b$���߰�h�; -���� - ���p -�q��I$`C����|\�<���.��p`a�1��`z�Sf -,��-�c ��x�Aèx\Y��|}�Å���݅��jb|�� -��`�N(L� -�2"�R�!����˂<-���D壈����R\�q���q�B�f�$��q���)Q�2��AT����H�ʫ ���3E���2�[p�L -K�}��y�0j��ܕ� -�?����������6XX����т�P��� -�X��b�l�`a��}v -�`��ѓ�z��dׁBX���q��u��y�1���n,ht����'���[��6�w��������6z&�n�s����*�/L� {���������g��. ���.�3@����ԟŃ,/H���L -�� - -r����9�4�O @ -����4���8��0 -�\�����)�*,L�LJ -g`L���]}� -�D� -�3p ���'�\��U - -@�uZ0B��� -|�����t0֙����?Q�|�?Soq�0 �#�_)S -gr! d*Xo�y�
-"�ŭ����`�Au���8����N�[��~9b -�{QHH�>H�G%*' �4X(�T&B������*^��s -�bq���e[�Ƚ],�Rц6�����&I��p"�T��̲>�@�7�_Y�R.� -�� q -�
w���� -S|��/?�ҌԀ�}�>�w盛�)EL�Yx�d��3�� -h�J x��O��W��� -���W��,��M���%�+NT8h@9�*,�Rv�pH�0UUϏ�G -\��PP��]g�{]�:E|�8 -�Q -����Z��c�<<�4ܯL��"���~��@8,^~�6���ְ����EJ���ŕB~����+�J���~���J�_)��]B��u�hB��d�/U�JiVc�_@K<����K�]�>�]u���"*����4�u$��1��Ԟy -���oP���w�.(p�b{@x+�( - -��+4���V5ఙtڬ�j�ȉ#�U�z=��S}k��n�9��r�_�,��5p� ^Y����3a1�o�a�k�Bfh���fq���(������s4���+%8X��瞗�
�D���]��� �-�o�R��� -�i�u�\DK� -h��� -���<�-�@�W�*!���8֫�f��m�lT��΄��RŮ"@ �P�%��Dz�P0�2(ݦ� -f%���Eh?�`(8���>����Q�i���)��q�n/D��2OT���g&s -������ss3��hwn�a���
U��|җ��;��%� �g! }�=� -�u -�0(\�i��5�H� - -�W�Y�)ϫV�A�(��\���+k!5���Z�y�����Z��t -�c1w�SEO�QD�Wq�U��M��r��� -)|'y*\���#��J-bE").���439a@�����FU -:YѪ��J^�~vnD�-p�@���.&' 7R�Ox�� -�� 1����mu|E,d� -�+��� �:�O� -�vQ%@V�6s -��> ��
C����\2~�C�����z -�At,9�;��Q!h����A d�;^yI����$u�BZ���T�v�2h�a�|�
\�*��'�C�NH����l��<��6�U�DN
l�q3;a����0Z������@(g��`[��pE�@g -�M�� -���O�Soj��-�� -�s - -~�t�mq=l@��Z��p.�@� -P�*eC�R�'���΄WE�.
VE�[�W'�@s6�������^ �t 8À�F_pX� K_������%���V�?.�+���Ju5̔���I~%h�n�A� -��Y( -����u -������|NA��X6�@�*�c}���[�D�@lK���B�T��Cap���� -j�F����{F -SF͜ -�u -��k$���D�����@ - -��jD%�)x�q� g�`��J��߄2�M���h��!O�|S�M��
��:]�� ��
\{婺4C|�k
�vwA� -7�0.�Za�V2�E� -�N��O!�as�,X.��e@���C�11�; -x�� - -@����6��NK�� -�M�@�D���H���/��;�kw*%o��G����#��[w��w8��F-���;�Z�4�QB8$h�TZ+~P�[�[����_Y��~6_*ο���������o��<-4j��gZ)��>~\��NJc%�����'8*�$�q�u��3����W~pw;q��|�����X.��p���ͱ<n��F@ō/p�����V���,�K�U�e���$p[_� -7;^� -�H����( �,} �Ahy��i� -�8| �% - -�Y) -�'!�:����>�L����X��D�5�K���Ad�Np�-� -��k�1�A4*��!�]�rP0h����a^ XH}G������ -��� -���|�M�YE���8 -gpd ��4,�0�[M�n�ڦd���O�z3S��q -�q -|t��]p��� ����wn� -� -+w��p1��Cبm -� ���(�>�� - -p�(��������ß?~03m�n�ś�@l��vf�� -�4��o��%?�ª��W>�'���A�j�� -�~�= -��7r -@���J�-�L�ُ0�@�}� Z���@��q�Ni� -�A[��d�$?��qu[�?2%I����K�P�N�m�(�1S>�gq@8����p.����8�$``�*��x�dnnZ�xgvn{�p1;s�) -a -�q -j~�� -�q -�hT�Z��� -�����,��8�G�����|tt��� -��� ���GFn��)�r�G�E��<��~��rX
d���/�qr����d�z� �ƇA̮Jsc�-#c����'��߭�f��^�{y -�����~x����L�� -�,���@��.XD��9 -�in������gk��hk&q -�� - -�lTа>���bQ�%���2 -����&�o,�=�]u�p�d'[ -p� -�������) -� �_ - =����=�U|��h~��hn�2��>:r
�AM��51Q���� -�rw�� -i��W���$�;<?���H!��od��7:�5:�� �d� ni��!hX�@�������9� -��s@���X���9(�,-�i��� -�S �s��l��h�wpp��}���D�?Y�@�� -[b!~� � -���� -��} -���Q?@ -0/g��mVn�Sv^.��`�����x�� >|A��gp���3�n�K���N����ޔ -�� -�Y$��B����p -��I����謸�At�S(-h��hp��+ -��.`�G��!Y���9�W���B -��b������Z����+�ɑ2�)������}�t��.�
\� -������W'!��+��@^���4�x�G�� -x#>�`W��� -@|�-�V -�"���r�͟��t�&v�� -�� -X�m�9 -�ܳ�!� _�r�� -�*��p -y�4�k��2�Ҫ�ⓥ�o���XbaCE -��� -���rB�Ә �p -�[(l��T�3�?�ܑ*
�r - ��%��\p�<�J���@�d�Xv� -sK -�>y�O����� -��QT>�����Fȭ�C(�p��� ����������٩���ٓ�|��^�g�KR9��a�ˣ��O�D#�ي�����g�!o�oG�/[ѣ�utt��=�<}�|����>���: -�e~s�����y���J�� �.G˗�{dR��b,n[�-��}�^��[���>v -��g�����J
�������"�GJ�i.ԐM��8�w�{����+;J��A���� - -�������?�_]p�� -˞���́W -a�µx��|�&��^.��X�y�?>>r!�罸�{t����٠9�= -C�g~� �*j�\����M6�Y�]��h�7��q��� -K)�i(� -~@ �����J��q�Ò���?=88(]��O�.����VVo��| -�V�}���岹�*��x;pp�|y`6��Rt�H�; ��{c�9�/�;RD<��5����?�����G��� -@)��l����l�PC�9x -.��� -��R�����}����� 28Z�<�C'g��
-L@-���q�ɀ����I�������0a6�s����� -��m��~Xs{$� -n)s!�`!����o����答��z�s�{��>`�z��@���I1��/���Z��C��%�
�3��{�a;�
g�;��lߣ:����X���u��R�?t�����W���T��Q@
+xנT��ʻ0)8Z�<��� -«���.Xm�_S}1/��V>���e-�)�ܸ�b;�y�$&?�ڹ T����: -���
0 OH�5� � G�
��n�}����˃u�H�K -lN�^ -�A������\m�>����o�0;2E�8���d"�1 -�������7{V�q�����<}� -�j�pоPp�|y -p��6>��>oI6�ҙ��!f�O٩�v]���ln�+) - -�+6pJPt�M�� -ֱ���d��gm��
�*a����-�2��P��4-_��;�P *8��� -���kA�E��Og��tCV -0�`!0p��]��ص( -���.�@Q�_ɚ��\��(�ߵ�bp�|�� -�s -d�ox��~]8#��+v��3N -����ۤ�A�I���ظ����,v��(�=�*P��<P���}�Z�J��p$?a�0x\� -A���_��"�}�ZRSN�$�,�3|�P)j�@��3~��p7`�A7���ا�s1=�!h6�-6 -���`� -x
0�_`� -�|������� @���n"
-)�j���>�2��J�$" -�*���5����'�A��ư@9�������� -�v�waA|u�Qt���=,Z3�jj$ -$y0�㝦 $/�_$� - -��w� -+P�ss -�+�χ%��n}v�7�#����[ �}' -�������'�8C�/P�}�' -m��fyS>4@&\\z���\� -Ŧ]p������+�#P�? -�d�c{�!e�=6E��$��#v�����W���L�;���v5 -Є -�<��?� -��Do��ai����i;�+�|��� ��#(�����e�s�cv���s~�Wȳ�/� eI����=q(OT����q�=���Cx��^�t���S�s:nVC/��kH�73'�Uޱ�)O$������r{8�_~ -Y-�q9�P����S���-�Y��(��[��J -L��}�����Z -·������mЌ-�xa_�п�-,% -����n�?}�� -�KY -�2����G���56��϶H����M�6χ��`��u -Hl� -��{.�NΖ��E����;��Fl' ���Y��CY��}VaFh - -��
��ை�p��|IC����c�K��㾐 -�R��oKM��{� -�@L���C��P@���q8� ~e��V�G��g�)4�1tmxD��&Z6�v��q���Ϙ}/l��� - �E3� -��A -�9���i�RYY�e���$ -W_S�ؒ�J�ӥR)ϱ}J��<����v�q97}u>7}9w5Ǒw�DZ�k����������80m��XCܳp�9X�9_��\Z�ǹ�����8���w�8�B�4]�^��5P����?�~[[Ÿ�_ğry||d�ܲw�wF/����H�A�jX�`����'0W#,����5���ٰ0��=M�Y�*�?��h>@��o� -�Wz��Ky�ο?~��g�o�O8V�L�d�O�� -��B(M9�si�1 -o�S=Z�t�g��6o�o���awl�l�0��gh�u�����ܧ"<�t���6��=��V�m?�~����y�<K?\��N�T��~n�ӊ�E�j��3�Y.��2?�ہ��::�͓�=u�C8R�D0h�w���o)ɔ�W9
\z����"@��.�G��ݻ���eI��@��- -�Y -�}q�7`{�o�տ���~��ӫ�ey��:��1G^f�>� -��$���a�}�u�]����rm8��Ϗ���h��O���� -�(#Y�WY;��?�|�ó���YP���8�?(��Y[���v������P -��Y���k|���UNȪCp��� -|��O�\e?T��RP -C��A��ǫ��/�=Է��=
�y�lv�O������O>�-��#�K�� - -n�7�m�Hz���b} -������ ?y �����Y<� -h -?�P-�B��V�屍)A��p��z�ֻ���S���H@]@l��YF5'�K��bq����+ףG8]AX���2~�7�Ϟ=����l�W�/a��@�����_>q�)_"����K�ג-K�H�J� jl��ir)�ҍS�{H~{���=b����\�P�� - �����[J|�` x������Xγ�ܛ�9���� -���G@e]tC�Z@�V� -�Z����i��ǭvp������ - -h -���z�� -=�� -��Յ9���;��@�Λ-�Ak����pO��~�E���9`� -��� 0J�~�ry��}� -���Uk� -��a���;�8.�-Ϋ�^�@�^�+������O����!��߄��<�C��{ -��BG�<V<jU���c-��
$Y�(��k���� �cqO� -�� -��Ja�I�Ӟ�D��x����0&kU��r�`ei^�ZǸܮ�O8R�L(y:� -r�9�G�p�:I�8 -����J -�!k��������?J^�]��<���0��2��%0B�r�A��H�'�L�\4�u� -^�����Biy�����n���D3� -�2��s3�b��5�j"�~�Gae|$�w��Y�]:>�O�D|�����m��:ף/!W��1\��) ���[�J4� :�ß��v�}�w��1����=b�5�5�E, -b�z�P�$���K(9��Y����Шo{y�0F� ��~���U�:ۖP+|�j@: -�/~}������x����� -X� -<�ez�� -�N��K��.���նb�_l! -��@�ۮ��o����gʡ�J���<j���|T
��G����zx��"i_������Ց1
�G%n����K��b�� -��=���T� -�'�<b{C5jz��B�o�����鍪0< �_�CM\�x�PZe,��Z�p�|�0.H�iH%�.��$�"]H3�`ww��<�f -` �1�a�+����p��m� -�a�g��f|�ѹ�a��yk�Edk8pv�<R��j`� -G���6��XX37p�����h�,����P��L������MV��"�o�U�,�{����Հ`,�yD��}ۀ�l��V���y��}̈́F9�W@�T~#f�X� -�ٕ���A1`�?2�_� |p������u�`��n�s���P -�oKm�4[�^��f��|P�r��dr�|����#M��M�-)� Eb���r��H$8 -����@�m���$�Ƕw�.�(y+j��;�=�3�FD�<�����^)���u�Iǁ������{�X��CP�Q�U��_��� h����ve���q��]xV
�l��g��4��-��7�V�bx�����ߤ��h�h���B�e�)_*T&F���9 -�
:��=0�=���U�@@ - �A�( - -(�U�� -���=�����kG��!��Ջ/��� -! - -��wY
H�7����� -X\)��P�M���t���v>-���~����Q"h��:;9d�e�d?v�$`"������ -5�x�o0i�X��~s����: - -�@��'�꽰���1<9�k��A - -L���f^ %�a)�1-H�4 -��~{\����5&(o`��w�m'�x�yUmk<�SL$H2��S� -4^�� -%�����J�r�+]�峗��q�e��hg2#�Hy -�DY?X�ע��Sf�?��g���=�$�F�� -�q��~W!K���� -�J - 8���a~���⳻��w�(�����G�٪a�1������>8�SP����ɤ�]����UW t -�8?x�� -��; -@��1Xp1 -���_������ 2�l�B��Gi�%�,Jk� -� -�q
@�������@�8�O������l��~!�'�^�6@�Q���C�8H(��xg�ѾU����R�R��{Ոw�X��H$7Xp� - -� -�� < -���5���a��>��W& -�rd�*�� -�� ���c#s -�� s -p��11 \�'�&��f3� -@���]����+��1]�覬9`������B+�h>�||5yd�W��w�ǯe�~������ -����@�{,�L�LwI@F�F���Pe�<f_V` -�3f�tӈ��������L�xy����_R -#0��|�Uг�����]��.����& -����� -wM�UHHLn��\b����Jc�^`�/�?������]d�Lf�ڄm���I���B�89.��N�[��=z@J&'gjr -&��w��IX - -�o@���V�T; -"� -p�ª�?j?Z���d�r7a��łA�
B��?�ű�좟��\�p�7�y�l��Y���4`�*{K�"�o�c-7r���<���A�O`=�?�9 -���s -�����Ѝ� -�w�<�T -ο�Ė�v�=$`���tc?�/��6k� �>؏r!o�[��K)( -`��`⃐2�{ -A��D ��ė�1�j�#h�t -�q'� -b�1����kt -���Z�yb���� ۗ�q�p��{08�~�?� -�!� -�6>>m -���� - �`�9 -�h�'z��|u��Y ->&%
�/�S_b�����F���F���ukÆA�ج����菧�%�;�� ֻ����& -���ƹ��^�rn�������j:7��G���%�O�q&Y��~ -%�kT|�T��5~���8_�� -��|s�4X�j?� -�Y���n(� -�P=�W#��{�g���_f�<6^>�5!����п�|���r� -��7����>d̐�� -v��{K8k���"�� -@9��ڨBf�0W -��Ar�Km{j�v;�he��Z�4pR��쫺��k�Z�̃'��(0 - --��!�;�p -(�g�Y:�;� -Aˊ����� -�G�T�>��|í}�Y0�V� -͖��% ��T8�� -� ��hd@j�v�s��k�Y��Y��PO� -� -@`Q@�b���FuQ\���>t� -�X9sr���a�� -�"PNW����+PR,�g�`�b -C�]0���2 -����d@ -@��Ab0�kS���I�X -����p��8�7j5{Պ�ڦ��F�c �-� -%��ja~�T�\/�*��������\6��F���L8�� -) -�#�ڽ�7�Ì�;/��%�A�:"��}0��-ؙo���Z
֫���R� -��v�^��\!�
v�V�� -�i�k��&�ۯU:���~� -�T�#��_S��cK���{տt9�ip���� -����D�e�� -�9 - -�X�[���1����/��|G���[��V��y3��`�V9�f Q�%A@��|��pt�{G��!!h�I0�����<EE8 -ҁ���v -u{�']WVJ����o�+��p�6���1 - -���n�l��H�}���;xG��� -AE�y�?����
����P�����鿅�x�DT -�:��p|��v������G�*�$櫞JmDE�����-N��{e�S* -���p��sh�+=L����J�O� -�;*K�@��Av:���Ç�G������ӿ��)�?��Q��V<�x�G��җ�E -�'�^£�7�Y`ң�o��h�ӹ�B�c�zo���G��s�����(Z����>��ہ���:[�>p���3rq -�.�1��7�tL � -��>8g5�> �V����`- -���N� -��cu�O�䍇��j�j��\���f� -,@��@���P� ~��� �%� Q -)�+��(��_p����_b�����$�A�.<�|�8�� -�� -K�L�^��HN8����"@rT -��G�H7�=.��n��U.�%�#ɎL�� - -CZ7����a�%v|Q*����Džg�*Q+����[-h�����ݮf��QT(���',���Q7<���)�y6�~ -��D��܈�o -0'����
�`�&6����� -��������:{��v�� ��: -� -��A�-���yḷ��-�a4ϊ|֖�e�^�%��a��c���A��쯀��|�y�h>�}?�n��@W�07�f -�����u6^4u�������Xo�,�r��>���^͆e� -���ʛh#�� -0#ʞ�����;JE���e�+%P���& ~��h+�̦ - - -`y -��`���e;�����PU�Hk��`�=���*��� -iO��d���yߟ�%���(������fC���� -�ҟ
��*lۇ��V��i9r�b����K�=L`�S& �d���$� -�4�n���~@�U= -��P -{Ԑ��_�7A��B�ň�φ�s�B����7?�֧�<h� �C�p�ŋ����8��� -@�H�IK(z�% -����|>�1zrl��T������U�� -�`x�������gq� �V����z��ؚF}���=�q|��q(���nq��{/8:�&��x�O� -�9�T -�f���j�Y������r�
�N���Y��4 -͍����%0����H0�{��]�����ʹ�S�E��0+�e��@��?c$��AD��ǣ��.|�O#6D�qq���U5M�G� -��q�_�����W��D8� 0xeA����G� - -��x���y,�|�}j�����Y��#�˘�*�����i�%g����v���Z%�U���9��1�+^���?T���� -��X� ���q=_��7c�X<�{g�SG@��]�O(�%����QU2� -����L�v�c��$ -mf�8=���H6Yx9 - -�F�~��t�,���~}���X^�g���W4($�����a -�Ft7� -���^D�8{����� �V't�A�R�doC@��@���<!-V݃$���Wd v�v��>� -v�pu:���>�s��s -n -�~�D�\5���b�,I��@�� -����J��``�X��؏���s�� -��v[�A�J,��x��?s����j -��ﶡ(��Ac�5圤@� -��e��-�� -�<t&�����8 -�a<q�+�NS���Iw��<�M*�� �G{�E19�>��őFB:������� (@� -�m� }��y}�ry� O���LL�rI� ��H��9���X�g�ά���_�Y;{ݵ������*�1\�}�$p�|I� -������x���µk�f��-\�S�^<�f�L��ny7ER����*�V(\�Z��M<7~�%\c���p�;�G��� -�� -�2[��� - -u���吞Ѕ�7�`4 �k��c�"� - �/�
��]�JXh/��y\XW���.� -�!:Z�?����R�t� -�˯X����䀱?V��f�$�Y$�!ǹ�\ -�?Y)���������@�y��)�\"�U�Y��.c�"��c���7 -��� -�����X�e����, -]���x�t -9
�]����� h��� �a?�:��� -�B��S������~?z�
H�k4a/a<�aƃ�@C�D`��G���a�![!�����0j�!G%t7�s�^A8�?{�$�6%�lEg0��Mo1�������N������: V{�1K����R - ~��V �C�& -�Uv�
�h�Q���5�A#l�����cY���@`�.��PQ-��Q��0W���7��ҵj
� -w�k8�m���^�y|,�j�G���3��i�9@��G�����\�cg� -��< -��=,��2�j���G��m� VC -��R -:� ���! - -�m$̏ -@���H`�XM��=���M -� �4cr�B�L -����� ?u]
���yN�����,�v��I�JU���������/�Z�t8� $���e�s��W,�o�i���:Y�< -�뗧��f��"`�<�����_� -�E���{ -Y�< -W}?�x��wY -9�% -?����{H���Y���ǘ�8���s��cǽ3�� -ēq(ɿ��{p[�v���n) -�d4�� -KH�,���L�|�W��?1���Yv - -�:�?��F&! -&��� �%t�
�@�G����8M�fA≒�4 -v(g]�$��9�6f!�G@r}����6{���Vi�n�m�m��fx�R��t� -�}' -S�ό�.* P .I -�7Gz���Eo���ӂJd]��ǽ3��,���g������md|���R���j -J�����oo��m��ܤ8�d?�p7�����x�$��~�`�o@K��l��=� -#~u�?�C+�� -ey@Хt�$�`�� -gC��|ч=���1�~9�XA�]�ʳ5n�pP�3�y�=q�6�y@����k�_>l��G'u tb)�w�ck���\��JR8���*�{��* -�w��w&���@����O��(p�p�Z32�緈I�7�g���H~�[(N�0G��� -�#I�M�y�� -l2
I�z2��=`z!�]Y����C@�e�W|̥ -�˄�g�`�W;� -����ɒM����㇁��+N ��_\�40\om��jN��O },$��%p/��>5^�����,? -̫���~������q9$�< -H����4NQ>a��s��������7E����|�"6�|~aabT��E���M�d�b�q -��,����O9 -��z�NiЙi ���>Y{[�+�W�֯��,���A4[��k��8l�x�M�I�����%p�k: -�E��rP���k?�s���ԅ���� -�-�?� -���2.����_�//.�U�S�A3~r6W���F�L���ƞy_�H˃Ĺ�� �2p>���3tb�ٱ���m:�{g ���d�N��u -`3�Y�� -P��}.+�Z���@�"u���T -~)��U -��{�@��h�D�9̝X�~�΄_�/ ���X���)�,����B������ s�^�b �ػ�망ǽ3�/YX$ -X/��T - -ZF�d:� -�`~L��S�: -�0� @ fS -�23��&�|C���:�+�ߡ -�����~/z����U�{_>n����K� -� -{���W��X�����Q��e�Ss�'����ȏ�:�8슐�e��~\�����&�n�&������Uc�C�iC%��g�1�m"�<�5N��ޙ��uXj6P����n2�k�Ҁ�R -a=�!�̍W�<5�e�qC�y��>��\���#+����X -���z`?Dd�M2�|O�ոԛ��A}��b��1F(i���$��� n�%�//�o@}�p�&�gn�-���f�yЃ� -��,�ę"} -�:���_���s -���\(P��L@дf�#=�q -�o~�h+@�� -�q -��̖?�ǒ����a�|3 -���U��W��X{���a�$� ��c$�O�'�D�
���ћ��D=�f���7{�W�e|��vпa��ǽ3q�(�[ -}@���d�ŀ'; - -�8�F�L!��υ�߈�hW1�����|A��O#�1�� -�]D0��d���v�șze�����8�G4@ -5X P���r���J�r�x���� -���ߥ�G�Oi��]Z�8�
0�/��y%�K -����H{�2��Z"ϳ�r��BP��e�����������<���߮�]gӾE\�ߣ���2 -�!�p�������˿����Q�l�E�6d��J�U�@ - �s�M\�R�a��:,�hv�O�����S -�[%��� -bCw�}���s`���$04^����x*�]O�Q3ح��50��4��x��W�:|?���������������j�G4�V���1�Y��.�apbS|�t����O�����u������ٌ"����������� ������a�a��a3<�sz��J7�E?=mr�;P��� HO�V�VY��:�F)d:�c]N�t�w,,��qd96iݠ�t�� -��-:CpG�fm��ޜ���K���?S -�@���t��G����!J(gAW�[�5� -r -�T�����F!��lE��c��b�4D�6W# ���˙�����N�#He�O�y�� -�� -`�L8 -� ���4���}�T��8�
V�!�!p
�*�,�wX� -�\ �8.����N��g�{���3��9XQ��j����3��ģF�M~E��3ώ?��2�˝��|
��Zlbѿ�Īs -�����F��<>�-c�)���\��AD��1x�����~ħ.��b2 --�d�G(���7^�cz��w�9 �-�t��R$�ɮ�!�?-�fBO�L< -s�Y @���� -w�W� �/��}�J����UƵ �Ik��@����P\k�R�ن��`�
���4�8��qh �Y�)����1E��9�ܹ�� -G�� -��� -�� -`u 8 -i�jX�~�}$��t@ڟ -P��&٧�4�(��(��5�U0��@w�l����{@�t�Ш -��+v:��5YH���$��+ä����_�X�I� -��K���C��� -����wS���wI����}�C�� �2��{���ګ����犽{Wz5�& -��8 -�9h��� -�j����~u睌�Ԉ�bK -@��Y�@� -�(hr�P�*1Fc& ����&�T�^�Tp�\r�G���H�H�����_�d -�i��/�T�V&�??99y� -XT_������kװ~���~uv�v�z߮��R� -�4W�%�H�������P@I -) -`�t�VWWAy��Az�9�5������:�����lnnm" ��.����ZOL2B���5o�9�MiP�(���x�a ��&��~���V�0M���+嶒Rlee����]i|g��� - -`,L�� -�?{)v: -���l�bbL���J -(^,��In���0e�7���N6���W�;�R -� -~֞�� -�E -�[o�i1�o)C�4=�r��������Z�����?���z6��߅��9 -�yG��@=l�5�FO�F���a�̈́�'���_�_�}����˧O�z���G�0�o܈����C�����n��G�w~���ᱭo���� �()4fc܁��Y>9�!<aMWk��qtpx�mQ��#!��a�߯1{
>�{g�$���L������W�ZP �t�ޭӥB2 - �MTV��D -�c�֍Z��Ԫ�6x�R��N�9�6f��{˺��8^K�/�A����^�ڥK�\��bۍ�<���� -��d���Z�*�A%�.���V��{�y��zu�W�5ϯ��\�M�0�����
w���w�Ї)��rf!�[�k�33�6S -�3w�k��i�@<BY����]= -�*��5���`���j߹�r���l���$�B�[�2��C�٭m -���]�K� -çO_�a�!�3�x����+����4���N -Eܣ��^˱-�J��J�a)l���"�Q�͖T���q��Q�X���3.R�����0<m:����U1 -� -��yu�m铳��|� �)~)������?�U�&�[m��2Ԕ-1�� -�)� -�����j �(��qh9�~�&O�y�_
�z -ֱ�`�8(���5�!�ﭔ�� ���J�Ee2��q�R� -��t -����1��l�oġU���n��2TTn���2\B��ކG1��̎��7�/��Kx�Eܺ�Z����6�L�*x�
*@TÛ8�
�*���{�f�g'����P#[���aw ���ڭ�u��`��$<�H� -��4 -�NDgiKRh� -Ua�l -�k�4 -l -�/� - -��@Z,?����s������ -P�9z����K����سS◘EyXm����kRd��E/X���O7�0w=q���Κ����9 -~�P��"� �0���I�C�(�(�_?��R -���� -@ M?�0
P&��
�M�e2�_��L -�����FI���1��po�߁�P�/�����Ύ3 -U��p���Y���+�%��O`1� -�o����hD�߿o���̤ڡ�����!�r�8��viM!_!�=� -o���.��q�����r�5�ƙ��"Q -����2A����-�Ax�o% -��Ҭ�!��}.-����ay���Np�.���JhOz����� -*�?��0A�ǖ(����D0Wɟ����'�z8~� -@���G?��'�0�4�� -�>y�e���i�W;"m���~�U�������O��F#~�4��W���Wo��px���_=y��ŗOvg����3ޮ����AƏÕp7?�����n�����G)�W"<�aߵ�<��� �y6gK����@9 -���7ߛo,ռ�7�J��Z͏^�v?�Y7�k���T�_�ިVggo�V�^mi�R�M^��U�G@
��c����`�_�Z`?E��_e���?_��gw?؝�������{��yܛ7���������p�la2���w�5VQ�O:}j8~c ݏ�L ,���,�N - -�~�~��$�� -�Þ�ac7 -�&�.��
������?��C3��>����?������R�Sܚ7{T��2����n��H����O��GK�%pO�ћ��d.W[j,5x�����7܄�m�k��*6����k��fZ��� -�#�����~���5�����O��W�@���[���vߗ% -P.�� -�_��_���?&���}�'*hS�w -��l�h��A0xfX�_�?ė��2[��&&@]��W�����Hu -������~�0�Z�!�8���$��ظ�C� -��ƁFq`� �]��
����~N�k
`�y -���߇ -��uyK�q1�@�� -�ĞW�( -� -�(�������ۿ�o������� ���Af - -��u���ŀ��`> �m���"&e�Sc�v�d1߽-��u~�T~��_3��������;)����o e���o~��k:t -a�/��NѪ�IKM�$�t�A ���D� - ,`�7�Hp�,��� -\����T�?����',Ya������.0:��� -�菘z�y -1���G��]l�g�o�������{����I����x�n< -�h�v�7�����X jK�Zc��˚��Eo5j�^n��ů��]L��S��X�@�8���^b=
�P�P֛�������8@�d������)p -x�;�㻐��=��̗Ģf�0� -� -{��E3p�w<s�y�B�Q -�X]og -�|�d���Y��OZ - -*~8F����8��a���u�L`��Z]�� -��c�A|���@�']D��n �4�I�4�� -�K!��
-��@,�0WS[BLL�S�5���?ym���_�S -�gY hac�!�l� -�_����J�b� ����9��|�e1z -�%x�4��\c����l�d[Fe -��,.h�066
�[ͬQ�n�3А�?��W�n2`"P�˿� -Ǐ�\�h�@pV~�@0Ax=+�Kh@.���D� -�AI -Jc�YD�Lb�c��� /� -|.�E� -�w��u�9�ק�tĹ��GK��LL����]� -���P�@��C3�"�K=q~�Ro�T��۪���vP���
H -R�GLK� -�s!D d>�=W��W?�c�?�M��R����?^ϒ -@�"`�@� -�*C#E�c�1�<��q x�# -�o! -����3� -@c);���19K�v -���F��A����=�|��./�`�o �KtDٺ@2��2�O��t�l�%m#z�
�F��k�i -�l��ͧg�G�o=����@��ζ�w�xbKI��/��bo - -0���6�p�)@"�"$�!)�x�[�'�c� h=`!A���W���sy�lр�+p�1ߡh�րH��~���#��f��Z�C�*��� -�8 -8i|=�Y^�:��O��Z����sG�����괋3����MD�����mu�3n�!�VV@
����N�)==�z;z%hm���r�ϲŶ;ъ���U�(�Z���~e���lu�#v�ϼ��ۧ;��c����ܺy;�;�9 -N/�� jE3�������`qW�s���16&����� �Hnn�݆Y8����Q@}��/L -�� -��O�J?m����t*h�gJ�)�����E�?�i4�0�l7��-M�Cʛ(� -|��������}�}8�[�mu��I�U|�#���#�_���Y�%�gxD�3{pv�9< -rth�GG���>�q��W���~�RS{�Z����1
��p( - -��>f��N�to4�����b_<��A8\ -x��q���j:�����} ������.e��]/���-�����w���/�EhE�F؞@0}��n����+����Pf �?�5_�2 -HR^'����9�cP��0V��Ab�2��"b?�Y0 �Si�$�X��g�s!@�����K�wk]� -����>Z�Sp���pG��e����i��3��*�YP1`����~�^��ӏ?bc�pnŊA�~y -�) -�9M}lcLt�~p_�+���M� -�Q�ʹ2誘(�3�U��� z v -��x҅}~�( -�u -��#���2�h��D�i�AZ�əw*N�.bZ,ǎ>\Na�����+������z?\�gb̍��.0 -�Ղ�n� - -P:EPr -J�N -���@�I� �~-'!k=�X���~+�TH���?�=v,c \�Y�`�`�@� -��e`�B�����b!�h�p -��@� -T��~$�>
7�����,BL�@� ��r�����Ky;1�t�,�瞚1 -��;���y! -�`�u��Ў�.� � - - -�#�ck�u�C�( -���^P�Z���W� -5X��0�: -�$@X��_[��A@�J�� ]R��Uy�E��; -�Ӆ�P�Q�]���|���������V�@��\�y -�X}�9lJ���S�v� -9J``�� -`����P8��z� �k� -��7��\��~R0"���� -Ӂ� -(���|d�T,N^�;��u��pp�0��Qz���48g�TxH����9p -���V¯
}��D"�=�S^t�&)��%HW�UЫ#�R��iG��q_G���8<7"@������K�(�;��� -@f~~�<o� S}@��9��D -_�;2 -�� /��K``���~U����dLYP���eG 0���������b���I -�-T�&�7�?9��}u_�p���ܤ;���}��w��@��I��Ã^��pĤ�9�c�Ȍ�1�1�c�]�`M@*@�$��O���.�! - -F������v{����������5d���V;��ׁ]����?���u:p�⎦�ۛ7o.���=�i����`P@(�������2 -���`�9H�� ����k)�u�q7l�#%?sbhh�9�3����� -P�����"�(b�3u''OON���Rp:(�;1�+�6�����^o�����O�;o�4X���`��p�2` - � -H��.���)`I�D -�Xkf���3���Z+_�_�$^��k.����� - - -���� ������.`>���k�Ѭ�@��#�BQ���S�^��`L�� -�hT���J����.P�^��#c��t�)�魠����Y� -�D}��X�U,����y��/����� ~��a��T�;�aH�H��ϲђ��իW] -| -\�g�NHβ��6P�h�fI��Ԃ��Z>�ҿ�u~}�9�L��A���� -@3̲p�E -�_�wH�Fp���
E8�a�LG�����R��,� -E��� - ��<4�`����ܜ��
�#�A.���>e��o� -��s^Cu.?B�S@T���{�S��f���i��R}��7V�!�����@ y�B۪�0�`y��{�����J� -�������kk�(���� S^��ڪz���;�=�m -�`��F9 -����\m���B�R�{�@ - -t - pc��V�urt�8�M���^( -��; -pA��ţ4)�ܓ�1���<����l�v�/�a*y:*Z �^y�8�$r�ڔ:�
L`�� ��*�� -����{��& -P�F9r�����<�� -��!� �Z�8�� -�' -6��l#t_p�3X,�O -�]���>IcKb�������?fF�'J7��^�,h6ևO������W�����E��a�� -p�Fn�EY�H����&��h�g�P�0�~���:�Σ -�ߊf��Bu��`�!w�o���F7f�q��ӳ���c� -��L��I��=� g����8 - ��ɲ�/\�<y����q�e�|||*hU��Z� -����\��v��Kk<���C�y -G�E��$ -�� -//p��3 R - -��,�����[�``2@��l���on_}��!�ŧ2x�o�� -�C�k��g��"P�ݧ���Up> -��; -v
p -p���{�t�I�S�9ܫ����7�
��$FF -���y�a�j�zf��� -Z�r -߽�cE q&
���}
-8�M0�>�oS���u쎹���aY� -�E��7�v3Z�:��p�pA�vmgs -{Q��"P��EK����s�~ ��� -�9�<@� �� -��9����/���KQ(?^�R��'�St�`�uZ$��/`3��ƨ���06�u���%�48�����?Y -�p�I�y��� -Q������R��G5M -����kz���\�B 32�I -�0i�Z�
)X -` -pw����3�< -��0�H�����] �c�n= - ����T@lF��.��N�vs diff --git a/examples/web/models/models_mesh_picking.html b/examples/web/models/models_mesh_picking.html deleted file mode 100644 index 8592ae0..0000000 --- a/examples/web/models/models_mesh_picking.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_mesh_picking.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_mesh_picking.js b/examples/web/models/models_mesh_picking.js deleted file mode 100644 index b0674d4..0000000 --- a/examples/web/models/models_mesh_picking.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){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 location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_mesh_picking.data";var REMOTE_PACKAGE_BASE="models_mesh_picking.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"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){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"]("/","resources",true,true);Module["FS_createPath"]("/resources","models",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<files.length;++i){new DataRequest(files[i]["start"],files[i]["end"],files[i]["audio"]).open("GET",files[i]["filename"])}function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);DataRequest.prototype.byteArray=byteArray;var files=metadata["files"];for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_mesh_picking.data")}Module["addRunDependency"]("datafile_models/models_mesh_picking.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"filename":"/resources/models/turret.obj","start":0,"end":57129,"audio":0},{"filename":"/resources/models/turret_diffuse.png","start":57129,"end":437249,"audio":0}],"remote_package_size":437249,"package_uuid":"2069dfe3-6f35-47dd-85b8-7b62e715e9ec"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_mesh_picking.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["ae"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["de"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}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 PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd);if(size<cwdLengthInBytes+1)return-68;stringToUTF8(cwd,buf,size);return buf}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"a":___assert_fail,"Ta":___sys_chdir,"L":___sys_fcntl64,"Sa":___sys_getcwd,"Va":___sys_ioctl,"Xa":___sys_open,"C":_emscripten_exit_pointerlock,"aa":_emscripten_get_element_css_size,"X":_emscripten_get_gamepad_status,"Y":_emscripten_get_num_gamepads,"Jd":_emscripten_glActiveTexture,"Id":_emscripten_glAttachShader,"Zd":_emscripten_glBeginQueryEXT,"Hd":_emscripten_glBindAttribLocation,"Gd":_emscripten_glBindBuffer,"Fd":_emscripten_glBindFramebuffer,"Ed":_emscripten_glBindRenderbuffer,"Dd":_emscripten_glBindTexture,"Rd":_emscripten_glBindVertexArrayOES,"Cd":_emscripten_glBlendColor,"Bd":_emscripten_glBlendEquation,"Ad":_emscripten_glBlendEquationSeparate,"zd":_emscripten_glBlendFunc,"yd":_emscripten_glBlendFuncSeparate,"xd":_emscripten_glBufferData,"wd":_emscripten_glBufferSubData,"vd":_emscripten_glCheckFramebufferStatus,"ud":_emscripten_glClear,"td":_emscripten_glClearColor,"sd":_emscripten_glClearDepthf,"rd":_emscripten_glClearStencil,"qd":_emscripten_glColorMask,"pd":_emscripten_glCompileShader,"od":_emscripten_glCompressedTexImage2D,"nd":_emscripten_glCompressedTexSubImage2D,"md":_emscripten_glCopyTexImage2D,"ld":_emscripten_glCopyTexSubImage2D,"kd":_emscripten_glCreateProgram,"jd":_emscripten_glCreateShader,"id":_emscripten_glCullFace,"hd":_emscripten_glDeleteBuffers,"gd":_emscripten_glDeleteFramebuffers,"fd":_emscripten_glDeleteProgram,"T":_emscripten_glDeleteQueriesEXT,"ed":_emscripten_glDeleteRenderbuffers,"dd":_emscripten_glDeleteShader,"cd":_emscripten_glDeleteTextures,"Qd":_emscripten_glDeleteVertexArraysOES,"bd":_emscripten_glDepthFunc,"ad":_emscripten_glDepthMask,"$c":_emscripten_glDepthRangef,"_c":_emscripten_glDetachShader,"Zc":_emscripten_glDisable,"Yc":_emscripten_glDisableVertexAttribArray,"Xc":_emscripten_glDrawArrays,"Md":_emscripten_glDrawArraysInstancedANGLE,"Nd":_emscripten_glDrawBuffersWEBGL,"Wc":_emscripten_glDrawElements,"Ld":_emscripten_glDrawElementsInstancedANGLE,"Vc":_emscripten_glEnable,"Uc":_emscripten_glEnableVertexAttribArray,"Yd":_emscripten_glEndQueryEXT,"Tc":_emscripten_glFinish,"Sc":_emscripten_glFlush,"Rc":_emscripten_glFramebufferRenderbuffer,"Qc":_emscripten_glFramebufferTexture2D,"Pc":_emscripten_glFrontFace,"Oc":_emscripten_glGenBuffers,"Mc":_emscripten_glGenFramebuffers,"U":_emscripten_glGenQueriesEXT,"Lc":_emscripten_glGenRenderbuffers,"Kc":_emscripten_glGenTextures,"Pd":_emscripten_glGenVertexArraysOES,"Nc":_emscripten_glGenerateMipmap,"Ic":_emscripten_glGetActiveAttrib,"Hc":_emscripten_glGetActiveUniform,"Gc":_emscripten_glGetAttachedShaders,"Fc":_emscripten_glGetAttribLocation,"Ec":_emscripten_glGetBooleanv,"Dc":_emscripten_glGetBufferParameteriv,"Cc":_emscripten_glGetError,"Bc":_emscripten_glGetFloatv,"Ac":_emscripten_glGetFramebufferAttachmentParameteriv,"zc":_emscripten_glGetIntegerv,"xc":_emscripten_glGetProgramInfoLog,"yc":_emscripten_glGetProgramiv,"Td":_emscripten_glGetQueryObjecti64vEXT,"Vd":_emscripten_glGetQueryObjectivEXT,"Sd":_emscripten_glGetQueryObjectui64vEXT,"Ud":_emscripten_glGetQueryObjectuivEXT,"Wd":_emscripten_glGetQueryivEXT,"wc":_emscripten_glGetRenderbufferParameteriv,"uc":_emscripten_glGetShaderInfoLog,"tc":_emscripten_glGetShaderPrecisionFormat,"sc":_emscripten_glGetShaderSource,"vc":_emscripten_glGetShaderiv,"rc":_emscripten_glGetString,"qc":_emscripten_glGetTexParameterfv,"pc":_emscripten_glGetTexParameteriv,"mc":_emscripten_glGetUniformLocation,"oc":_emscripten_glGetUniformfv,"nc":_emscripten_glGetUniformiv,"jc":_emscripten_glGetVertexAttribPointerv,"lc":_emscripten_glGetVertexAttribfv,"kc":_emscripten_glGetVertexAttribiv,"ic":_emscripten_glHint,"hc":_emscripten_glIsBuffer,"gc":_emscripten_glIsEnabled,"fc":_emscripten_glIsFramebuffer,"ec":_emscripten_glIsProgram,"S":_emscripten_glIsQueryEXT,"dc":_emscripten_glIsRenderbuffer,"cc":_emscripten_glIsShader,"bc":_emscripten_glIsTexture,"Od":_emscripten_glIsVertexArrayOES,"ac":_emscripten_glLineWidth,"$b":_emscripten_glLinkProgram,"_b":_emscripten_glPixelStorei,"Zb":_emscripten_glPolygonOffset,"Xd":_emscripten_glQueryCounterEXT,"Yb":_emscripten_glReadPixels,"Xb":_emscripten_glReleaseShaderCompiler,"Vb":_emscripten_glRenderbufferStorage,"Ub":_emscripten_glSampleCoverage,"Tb":_emscripten_glScissor,"Sb":_emscripten_glShaderBinary,"Rb":_emscripten_glShaderSource,"Qb":_emscripten_glStencilFunc,"Pb":_emscripten_glStencilFuncSeparate,"Ob":_emscripten_glStencilMask,"Nb":_emscripten_glStencilMaskSeparate,"Mb":_emscripten_glStencilOp,"Kb":_emscripten_glStencilOpSeparate,"Jb":_emscripten_glTexImage2D,"Ib":_emscripten_glTexParameterf,"Hb":_emscripten_glTexParameterfv,"Gb":_emscripten_glTexParameteri,"Fb":_emscripten_glTexParameteriv,"Eb":_emscripten_glTexSubImage2D,"Db":_emscripten_glUniform1f,"Cb":_emscripten_glUniform1fv,"Bb":_emscripten_glUniform1i,"zb":_emscripten_glUniform1iv,"yb":_emscripten_glUniform2f,"xb":_emscripten_glUniform2fv,"wb":_emscripten_glUniform2i,"vb":_emscripten_glUniform2iv,"ub":_emscripten_glUniform3f,"tb":_emscripten_glUniform3fv,"sb":_emscripten_glUniform3i,"rb":_emscripten_glUniform3iv,"qb":_emscripten_glUniform4f,"ob":_emscripten_glUniform4fv,"nb":_emscripten_glUniform4i,"mb":_emscripten_glUniform4iv,"lb":_emscripten_glUniformMatrix2fv,"kb":_emscripten_glUniformMatrix3fv,"jb":_emscripten_glUniformMatrix4fv,"ib":_emscripten_glUseProgram,"hb":_emscripten_glValidateProgram,"gb":_emscripten_glVertexAttrib1f,"fb":_emscripten_glVertexAttrib1fv,"db":_emscripten_glVertexAttrib2f,"cb":_emscripten_glVertexAttrib2fv,"bb":_emscripten_glVertexAttrib3f,"ab":_emscripten_glVertexAttrib3fv,"$a":_emscripten_glVertexAttrib4f,"_a":_emscripten_glVertexAttrib4fv,"Kd":_emscripten_glVertexAttribDivisorANGLE,"Za":_emscripten_glVertexAttribPointer,"Ya":_emscripten_glViewport,"Pa":_emscripten_memcpy_big,"Qa":_emscripten_resize_heap,"x":_emscripten_run_script,"Z":_emscripten_sample_gamepad_data,"ya":_emscripten_set_click_callback_on_thread,"Aa":_emscripten_set_fullscreenchange_callback_on_thread,"ta":_emscripten_set_gamepadconnected_callback_on_thread,"sa":_emscripten_set_gamepaddisconnected_callback_on_thread,"za":_emscripten_set_keydown_callback_on_thread,"$d":_emscripten_set_main_loop,"ua":_emscripten_set_touchcancel_callback_on_thread,"wa":_emscripten_set_touchend_callback_on_thread,"va":_emscripten_set_touchmove_callback_on_thread,"xa":_emscripten_set_touchstart_callback_on_thread,"Ra":_emscripten_thread_sleep,"V":_exit,"M":_fd_close,"Ua":_fd_read,"Na":_fd_seek,"K":_fd_write,"p":_glActiveTexture,"D":_glAttachShader,"k":_glBindAttribLocation,"b":_glBindBuffer,"j":_glBindTexture,"Lb":_glBlendFunc,"e":_glBufferData,"v":_glBufferSubData,"N":_glClear,"O":_glClearColor,"eb":_glClearDepthf,"Fa":_glCompileShader,"La":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"Ab":_glCullFace,"m":_glDeleteBuffers,"G":_glDeleteProgram,"H":_glDeleteShader,"J":_glDeleteTextures,"Wb":_glDepthFunc,"I":_glDetachShader,"P":_glDisable,"h":_glDisableVertexAttribArray,"R":_glDrawArrays,"Q":_glDrawElements,"w":_glEnable,"c":_glEnableVertexAttribArray,"pb":_glFrontFace,"f":_glGenBuffers,"Oa":_glGenTextures,"u":_glGetAttribLocation,"Jc":_glGetFloatv,"Ba":_glGetProgramInfoLog,"F":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"E":_glGetShaderiv,"n":_glGetString,"t":_glGetUniformLocation,"Ca":_glLinkProgram,"Wa":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ma":_glTexImage2D,"o":_glTexParameteri,"y":_glUniform1i,"q":_glUniform4f,"r":_glUniformMatrix4fv,"l":_glUseProgram,"Ja":_glVertexAttrib2f,"Ka":_glVertexAttrib3f,"s":_glVertexAttrib4f,"d":_glVertexAttribPointer,"_d":_glViewport,"A":_glfwCreateWindow,"pa":_glfwDefaultWindowHints,"$":_glfwDestroyWindow,"B":_glfwGetPrimaryMonitor,"i":_glfwGetTime,"oa":_glfwGetVideoModes,"qa":_glfwInit,"da":_glfwMakeContextCurrent,"ia":_glfwSetCharCallback,"ea":_glfwSetCursorEnterCallback,"ga":_glfwSetCursorPosCallback,"ka":_glfwSetDropCallback,"ra":_glfwSetErrorCallback,"ja":_glfwSetKeyCallback,"ha":_glfwSetMouseButtonCallback,"fa":_glfwSetScrollCallback,"la":_glfwSetWindowFocusCallback,"ma":_glfwSetWindowIconifyCallback,"W":_glfwSetWindowShouldClose,"na":_glfwSetWindowSizeCallback,"_":_glfwSwapBuffers,"ca":_glfwSwapInterval,"z":_glfwTerminate,"g":_glfwWindowHint,"ba":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["be"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["ce"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ee"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["fe"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ge"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["he"]).apply(null,arguments)};Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_mesh_picking.wasm b/examples/web/models/models_mesh_picking.wasm Binary files differdeleted file mode 100644 index 6fd41db..0000000 --- a/examples/web/models/models_mesh_picking.wasm +++ /dev/null diff --git a/examples/web/models/models_orthographic_projection.c b/examples/web/models/models_orthographic_projection.c deleted file mode 100644 index ec21b8d..0000000 --- a/examples/web/models/models_orthographic_projection.c +++ /dev/null @@ -1,130 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Show the difference between perspective and orthographic projection -* -* This program is heavily based on the geometric objects example -* -* This example has been created using raylib 2.0 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Example contributed by Max Danielsson (@autious) and reviewed by Ramon Santamaria (@raysan5) -* -* Copyright (c) 2018 Max Danielsson (@autious) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -#define FOVY_PERSPECTIVE 45.0f -#define WIDTH_ORTHOGRAPHIC 10.0f - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - -Camera camera = { 0 }; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - geometric shapes"); - - // Define the camera to look into our 3d world - camera = (Camera){{ 0.0f, 10.0f, 10.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, FOVY_PERSPECTIVE, CAMERA_PERSPECTIVE }; - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - if (IsKeyPressed(KEY_SPACE)) - { - if (camera.projection == CAMERA_PERSPECTIVE) - { - camera.fovy = WIDTH_ORTHOGRAPHIC; - camera.projection = CAMERA_ORTHOGRAPHIC; - } - else - { - camera.fovy = FOVY_PERSPECTIVE; - camera.projection = CAMERA_PERSPECTIVE; - } - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawCube((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, RED); - DrawCubeWires((Vector3){-4.0f, 0.0f, 2.0f}, 2.0f, 5.0f, 2.0f, GOLD); - DrawCubeWires((Vector3){-4.0f, 0.0f, -2.0f}, 3.0f, 6.0f, 2.0f, MAROON); - - DrawSphere((Vector3){-1.0f, 0.0f, -2.0f}, 1.0f, GREEN); - DrawSphereWires((Vector3){1.0f, 0.0f, 2.0f}, 2.0f, 16, 16, LIME); - - DrawCylinder((Vector3){4.0f, 0.0f, -2.0f}, 1.0f, 2.0f, 3.0f, 4, SKYBLUE); - DrawCylinderWires((Vector3){4.0f, 0.0f, -2.0f}, 1.0f, 2.0f, 3.0f, 4, DARKBLUE); - DrawCylinderWires((Vector3){4.5f, -1.0f, 2.0f}, 1.0f, 1.0f, 2.0f, 6, BROWN); - - DrawCylinder((Vector3){1.0f, 0.0f, -4.0f}, 0.0f, 1.5f, 3.0f, 8, GOLD); - DrawCylinderWires((Vector3){1.0f, 0.0f, -4.0f}, 0.0f, 1.5f, 3.0f, 8, PINK); - - DrawGrid(10, 1.0f); // Draw a grid - - EndMode3D(); - - DrawText("Press Spacebar to switch camera type", 10, GetScreenHeight() - 30, 20, DARKGRAY); - - if (camera.projection == CAMERA_ORTHOGRAPHIC) DrawText("ORTHOGRAPHIC", 10, 40, 20, BLACK); - else if (camera.projection == CAMERA_PERSPECTIVE) DrawText("PERSPECTIVE", 10, 40, 20, BLACK); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -} diff --git a/examples/web/models/models_orthographic_projection.html b/examples/web/models/models_orthographic_projection.html deleted file mode 100644 index cba0848..0000000 --- a/examples/web/models/models_orthographic_projection.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_orthographic_projection.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_orthographic_projection.js b/examples/web/models/models_orthographic_projection.js deleted file mode 100644 index 736e424..0000000 --- a/examples/web/models/models_orthographic_projection.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_orthographic_projection.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["Xd"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["_d"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"n":___assert_fail,"F":___sys_fcntl64,"Sa":___sys_ioctl,"Ta":___sys_open,"za":_emscripten_exit_pointerlock,"Z":_emscripten_get_element_css_size,"U":_emscripten_get_gamepad_status,"V":_emscripten_get_num_gamepads,"Hd":_emscripten_glActiveTexture,"Gd":_emscripten_glAttachShader,"N":_emscripten_glBeginQueryEXT,"Fd":_emscripten_glBindAttribLocation,"Ed":_emscripten_glBindBuffer,"Dd":_emscripten_glBindFramebuffer,"Cd":_emscripten_glBindRenderbuffer,"Bd":_emscripten_glBindTexture,"Pd":_emscripten_glBindVertexArrayOES,"zd":_emscripten_glBlendColor,"yd":_emscripten_glBlendEquation,"xd":_emscripten_glBlendEquationSeparate,"wd":_emscripten_glBlendFunc,"vd":_emscripten_glBlendFuncSeparate,"ud":_emscripten_glBufferData,"td":_emscripten_glBufferSubData,"sd":_emscripten_glCheckFramebufferStatus,"rd":_emscripten_glClear,"qd":_emscripten_glClearColor,"od":_emscripten_glClearDepthf,"nd":_emscripten_glClearStencil,"md":_emscripten_glColorMask,"ld":_emscripten_glCompileShader,"kd":_emscripten_glCompressedTexImage2D,"jd":_emscripten_glCompressedTexSubImage2D,"id":_emscripten_glCopyTexImage2D,"hd":_emscripten_glCopyTexSubImage2D,"gd":_emscripten_glCreateProgram,"fd":_emscripten_glCreateShader,"ed":_emscripten_glCullFace,"dd":_emscripten_glDeleteBuffers,"cd":_emscripten_glDeleteFramebuffers,"bd":_emscripten_glDeleteProgram,"P":_emscripten_glDeleteQueriesEXT,"ad":_emscripten_glDeleteRenderbuffers,"$c":_emscripten_glDeleteShader,"_c":_emscripten_glDeleteTextures,"Od":_emscripten_glDeleteVertexArraysOES,"Zc":_emscripten_glDepthFunc,"Yc":_emscripten_glDepthMask,"Xc":_emscripten_glDepthRangef,"Wc":_emscripten_glDetachShader,"Vc":_emscripten_glDisable,"Uc":_emscripten_glDisableVertexAttribArray,"Tc":_emscripten_glDrawArrays,"Kd":_emscripten_glDrawArraysInstancedANGLE,"Ld":_emscripten_glDrawBuffersWEBGL,"Sc":_emscripten_glDrawElements,"Jd":_emscripten_glDrawElementsInstancedANGLE,"Rc":_emscripten_glEnable,"Qc":_emscripten_glEnableVertexAttribArray,"M":_emscripten_glEndQueryEXT,"Pc":_emscripten_glFinish,"Oc":_emscripten_glFlush,"Nc":_emscripten_glFramebufferRenderbuffer,"Mc":_emscripten_glFramebufferTexture2D,"Lc":_emscripten_glFrontFace,"Kc":_emscripten_glGenBuffers,"Ic":_emscripten_glGenFramebuffers,"Q":_emscripten_glGenQueriesEXT,"Hc":_emscripten_glGenRenderbuffers,"Gc":_emscripten_glGenTextures,"Nd":_emscripten_glGenVertexArraysOES,"Jc":_emscripten_glGenerateMipmap,"Fc":_emscripten_glGetActiveAttrib,"Ec":_emscripten_glGetActiveUniform,"Dc":_emscripten_glGetAttachedShaders,"Bc":_emscripten_glGetAttribLocation,"Ac":_emscripten_glGetBooleanv,"zc":_emscripten_glGetBufferParameteriv,"yc":_emscripten_glGetError,"xc":_emscripten_glGetFloatv,"wc":_emscripten_glGetFramebufferAttachmentParameteriv,"vc":_emscripten_glGetIntegerv,"tc":_emscripten_glGetProgramInfoLog,"uc":_emscripten_glGetProgramiv,"Rd":_emscripten_glGetQueryObjecti64vEXT,"Td":_emscripten_glGetQueryObjectivEXT,"Qd":_emscripten_glGetQueryObjectui64vEXT,"Sd":_emscripten_glGetQueryObjectuivEXT,"Ud":_emscripten_glGetQueryivEXT,"sc":_emscripten_glGetRenderbufferParameteriv,"qc":_emscripten_glGetShaderInfoLog,"pc":_emscripten_glGetShaderPrecisionFormat,"oc":_emscripten_glGetShaderSource,"rc":_emscripten_glGetShaderiv,"nc":_emscripten_glGetString,"mc":_emscripten_glGetTexParameterfv,"lc":_emscripten_glGetTexParameteriv,"ic":_emscripten_glGetUniformLocation,"kc":_emscripten_glGetUniformfv,"jc":_emscripten_glGetUniformiv,"fc":_emscripten_glGetVertexAttribPointerv,"hc":_emscripten_glGetVertexAttribfv,"gc":_emscripten_glGetVertexAttribiv,"ec":_emscripten_glHint,"dc":_emscripten_glIsBuffer,"cc":_emscripten_glIsEnabled,"bc":_emscripten_glIsFramebuffer,"ac":_emscripten_glIsProgram,"O":_emscripten_glIsQueryEXT,"$b":_emscripten_glIsRenderbuffer,"_b":_emscripten_glIsShader,"Zb":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"Yb":_emscripten_glLineWidth,"Xb":_emscripten_glLinkProgram,"Wb":_emscripten_glPixelStorei,"Vb":_emscripten_glPolygonOffset,"L":_emscripten_glQueryCounterEXT,"Ub":_emscripten_glReadPixels,"Tb":_emscripten_glReleaseShaderCompiler,"Sb":_emscripten_glRenderbufferStorage,"Rb":_emscripten_glSampleCoverage,"Qb":_emscripten_glScissor,"Ob":_emscripten_glShaderBinary,"Nb":_emscripten_glShaderSource,"Mb":_emscripten_glStencilFunc,"Lb":_emscripten_glStencilFuncSeparate,"Kb":_emscripten_glStencilMask,"Jb":_emscripten_glStencilMaskSeparate,"Ib":_emscripten_glStencilOp,"Hb":_emscripten_glStencilOpSeparate,"Gb":_emscripten_glTexImage2D,"Fb":_emscripten_glTexParameterf,"Db":_emscripten_glTexParameterfv,"Cb":_emscripten_glTexParameteri,"Bb":_emscripten_glTexParameteriv,"Ab":_emscripten_glTexSubImage2D,"zb":_emscripten_glUniform1f,"yb":_emscripten_glUniform1fv,"xb":_emscripten_glUniform1i,"wb":_emscripten_glUniform1iv,"vb":_emscripten_glUniform2f,"ub":_emscripten_glUniform2fv,"sb":_emscripten_glUniform2i,"rb":_emscripten_glUniform2iv,"qb":_emscripten_glUniform3f,"pb":_emscripten_glUniform3fv,"ob":_emscripten_glUniform3i,"nb":_emscripten_glUniform3iv,"mb":_emscripten_glUniform4f,"lb":_emscripten_glUniform4fv,"kb":_emscripten_glUniform4i,"jb":_emscripten_glUniform4iv,"hb":_emscripten_glUniformMatrix2fv,"gb":_emscripten_glUniformMatrix3fv,"fb":_emscripten_glUniformMatrix4fv,"eb":_emscripten_glUseProgram,"db":_emscripten_glValidateProgram,"cb":_emscripten_glVertexAttrib1f,"bb":_emscripten_glVertexAttrib1fv,"ab":_emscripten_glVertexAttrib2f,"$a":_emscripten_glVertexAttrib2fv,"_a":_emscripten_glVertexAttrib3f,"Ya":_emscripten_glVertexAttrib3fv,"Xa":_emscripten_glVertexAttrib4f,"Wa":_emscripten_glVertexAttrib4fv,"Id":_emscripten_glVertexAttribDivisorANGLE,"Va":_emscripten_glVertexAttribPointer,"Ua":_emscripten_glViewport,"Na":_emscripten_memcpy_big,"Oa":_emscripten_resize_heap,"t":_emscripten_run_script,"W":_emscripten_sample_gamepad_data,"wa":_emscripten_set_click_callback_on_thread,"ya":_emscripten_set_fullscreenchange_callback_on_thread,"ra":_emscripten_set_gamepadconnected_callback_on_thread,"qa":_emscripten_set_gamepaddisconnected_callback_on_thread,"xa":_emscripten_set_keydown_callback_on_thread,"Wd":_emscripten_set_main_loop,"sa":_emscripten_set_touchcancel_callback_on_thread,"ua":_emscripten_set_touchend_callback_on_thread,"ta":_emscripten_set_touchmove_callback_on_thread,"va":_emscripten_set_touchstart_callback_on_thread,"Pa":_emscripten_thread_sleep,"R":_exit,"G":_fd_close,"Ra":_fd_read,"Ma":_fd_seek,"E":_fd_write,"K":_glActiveTexture,"x":_glAttachShader,"f":_glBindAttribLocation,"a":_glBindBuffer,"g":_glBindTexture,"Eb":_glBlendFunc,"k":_glBufferData,"r":_glBufferSubData,"H":_glClear,"I":_glClearColor,"Za":_glClearDepthf,"Fa":_glCompileShader,"Ja":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"tb":_glCullFace,"i":_glDeleteBuffers,"A":_glDeleteProgram,"B":_glDeleteShader,"D":_glDeleteTextures,"Pb":_glDepthFunc,"C":_glDetachShader,"J":_glDisable,"j":_glDisableVertexAttribArray,"Ad":_glDrawArrays,"pd":_glDrawElements,"s":_glEnable,"d":_glEnableVertexAttribArray,"ib":_glFrontFace,"l":_glGenBuffers,"La":_glGenTextures,"q":_glGetAttribLocation,"Cc":_glGetFloatv,"Aa":_glGetProgramInfoLog,"z":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"y":_glGetShaderiv,"h":_glGetString,"p":_glGetUniformLocation,"Ba":_glLinkProgram,"Qa":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ka":_glTexImage2D,"m":_glTexParameteri,"T":_glUniform1i,"aa":_glUniform4f,"Ca":_glUniformMatrix4fv,"o":_glUseProgram,"e":_glVertexAttribPointer,"Vd":_glViewport,"v":_glfwCreateWindow,"na":_glfwDefaultWindowHints,"Y":_glfwDestroyWindow,"w":_glfwGetPrimaryMonitor,"c":_glfwGetTime,"ma":_glfwGetVideoModes,"oa":_glfwInit,"ba":_glfwMakeContextCurrent,"ga":_glfwSetCharCallback,"ca":_glfwSetCursorEnterCallback,"ea":_glfwSetCursorPosCallback,"ia":_glfwSetDropCallback,"pa":_glfwSetErrorCallback,"ha":_glfwSetKeyCallback,"fa":_glfwSetMouseButtonCallback,"da":_glfwSetScrollCallback,"ja":_glfwSetWindowFocusCallback,"ka":_glfwSetWindowIconifyCallback,"S":_glfwSetWindowShouldClose,"la":_glfwSetWindowSizeCallback,"X":_glfwSwapBuffers,"$":_glfwSwapInterval,"u":_glfwTerminate,"b":_glfwWindowHint,"_":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["Yd"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["Zd"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["$d"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ae"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["be"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ce"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_orthographic_projection.wasm b/examples/web/models/models_orthographic_projection.wasm Binary files differdeleted file mode 100644 index df2b3fa..0000000 --- a/examples/web/models/models_orthographic_projection.wasm +++ /dev/null diff --git a/examples/web/models/models_rlgl_solar_system.c b/examples/web/models/models_rlgl_solar_system.c deleted file mode 100644 index 2217a6e..0000000 --- a/examples/web/models/models_rlgl_solar_system.c +++ /dev/null @@ -1,188 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - rlgl module usage with push/pop matrix transformations -* -* This example uses [rlgl] module funtionality (pseudo-OpenGL 1.1 style coding) -* -* This example has been created using raylib 2.2 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2018 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" -#include "rlgl.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - -const float sunRadius = 4.0f; -const float earthRadius = 0.6f; -const float earthOrbitRadius = 8.0f; -const float moonRadius = 0.16f; -const float moonOrbitRadius = 1.5f; - -Camera camera = { 0 }; - -float rotationSpeed = 0.2f; // General system rotation speed - -float earthRotation = 0.0f; // Rotation of earth around itself (days) in degrees -float earthOrbitRotation = 0.0f; // Rotation of earth around the Sun (years) in degrees -float moonRotation = 0.0f; // Rotation of moon around itself -float moonOrbitRotation = 0.0f; // Rotation of moon around earth in degrees - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -void DrawSphereBasic(Color color); // Draw sphere without any matrix transformation - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - rlgl module usage with push/pop matrix transformations"); - - // Define the camera to look into our 3d world - camera.position = (Vector3){ 16.0f, 16.0f, 16.0f }; - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; - camera.fovy = 45.0f; - camera.projection = CAMERA_PERSPECTIVE; - - SetCameraMode(camera, CAMERA_FREE); - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//-------------------------------------------------------------------------------------------- -// Module Functions Definitions (local) -//-------------------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera); - - earthRotation += (5.0f*rotationSpeed); - earthOrbitRotation += (365/360.0f*(5.0f*rotationSpeed)*rotationSpeed); - moonRotation += (2.0f*rotationSpeed); - moonOrbitRotation += (8.0f*rotationSpeed); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - rlPushMatrix(); - rlScalef(sunRadius, sunRadius, sunRadius); // Scale Sun - DrawSphereBasic(GOLD); // Draw the Sun - rlPopMatrix(); - - rlPushMatrix(); - rlRotatef(earthOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Earth orbit around Sun - rlTranslatef(earthOrbitRadius, 0.0f, 0.0f); // Translation for Earth orbit - rlRotatef(-earthOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Earth orbit around Sun inverted - - rlPushMatrix(); - rlRotatef(earthRotation, 0.25, 1.0, 0.0); // Rotation for Earth itself - rlScalef(earthRadius, earthRadius, earthRadius);// Scale Earth - - DrawSphereBasic(BLUE); // Draw the Earth - rlPopMatrix(); - - rlRotatef(moonOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon orbit around Earth - rlTranslatef(moonOrbitRadius, 0.0f, 0.0f); // Translation for Moon orbit - rlRotatef(-moonOrbitRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon orbit around Earth inverted - rlRotatef(moonRotation, 0.0f, 1.0f, 0.0f); // Rotation for Moon itself - rlScalef(moonRadius, moonRadius, moonRadius); // Scale Moon - - DrawSphereBasic(LIGHTGRAY); // Draw the Moon - rlPopMatrix(); - - // Some reference elements (not affected by previous matrix transformations) - DrawCircle3D((Vector3){ 0.0f, 0.0f, 0.0f }, earthOrbitRadius, (Vector3){ 1, 0, 0 }, 90.0f, Fade(RED, 0.5f)); - DrawGrid(20, 1.0f); - - EndMode3D(); - - DrawText("EARTH ORBITING AROUND THE SUN!", 400, 10, 20, MAROON); - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -} - -// Draw sphere without any matrix transformation -// NOTE: Sphere is drawn in world position ( 0, 0, 0 ) with radius 1.0f -void DrawSphereBasic(Color color) -{ - int rings = 16; - int slices = 16; - - rlBegin(RL_TRIANGLES); - rlColor4ub(color.r, color.g, color.b, color.a); - - for (int i = 0; i < (rings + 2); i++) - { - for (int j = 0; j < slices; j++) - { - rlVertex3f(cosf(DEG2RAD*(270+(180/(rings + 1))*i))*sinf(DEG2RAD*(j*360/slices)), - sinf(DEG2RAD*(270+(180/(rings + 1))*i)), - cosf(DEG2RAD*(270+(180/(rings + 1))*i))*cosf(DEG2RAD*(j*360/slices))); - rlVertex3f(cosf(DEG2RAD*(270+(180/(rings + 1))*(i+1)))*sinf(DEG2RAD*((j+1)*360/slices)), - sinf(DEG2RAD*(270+(180/(rings + 1))*(i+1))), - cosf(DEG2RAD*(270+(180/(rings + 1))*(i+1)))*cosf(DEG2RAD*((j+1)*360/slices))); - rlVertex3f(cosf(DEG2RAD*(270+(180/(rings + 1))*(i+1)))*sinf(DEG2RAD*(j*360/slices)), - sinf(DEG2RAD*(270+(180/(rings + 1))*(i+1))), - cosf(DEG2RAD*(270+(180/(rings + 1))*(i+1)))*cosf(DEG2RAD*(j*360/slices))); - - rlVertex3f(cosf(DEG2RAD*(270+(180/(rings + 1))*i))*sinf(DEG2RAD*(j*360/slices)), - sinf(DEG2RAD*(270+(180/(rings + 1))*i)), - cosf(DEG2RAD*(270+(180/(rings + 1))*i))*cosf(DEG2RAD*(j*360/slices))); - rlVertex3f(cosf(DEG2RAD*(270+(180/(rings + 1))*(i)))*sinf(DEG2RAD*((j+1)*360/slices)), - sinf(DEG2RAD*(270+(180/(rings + 1))*(i))), - cosf(DEG2RAD*(270+(180/(rings + 1))*(i)))*cosf(DEG2RAD*((j+1)*360/slices))); - rlVertex3f(cosf(DEG2RAD*(270+(180/(rings + 1))*(i+1)))*sinf(DEG2RAD*((j+1)*360/slices)), - sinf(DEG2RAD*(270+(180/(rings + 1))*(i+1))), - cosf(DEG2RAD*(270+(180/(rings + 1))*(i+1)))*cosf(DEG2RAD*((j+1)*360/slices))); - } - } - rlEnd(); -} diff --git a/examples/web/models/models_rlgl_solar_system.html b/examples/web/models/models_rlgl_solar_system.html deleted file mode 100644 index c53de9c..0000000 --- a/examples/web/models/models_rlgl_solar_system.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_rlgl_solar_system.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_rlgl_solar_system.js b/examples/web/models/models_rlgl_solar_system.js deleted file mode 100644 index 8989dee..0000000 --- a/examples/web/models/models_rlgl_solar_system.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_rlgl_solar_system.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["Xd"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["_d"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"n":___assert_fail,"G":___sys_fcntl64,"Sa":___sys_ioctl,"Ta":___sys_open,"x":_emscripten_exit_pointerlock,"_":_emscripten_get_element_css_size,"V":_emscripten_get_gamepad_status,"W":_emscripten_get_num_gamepads,"Hd":_emscripten_glActiveTexture,"Gd":_emscripten_glAttachShader,"O":_emscripten_glBeginQueryEXT,"Fd":_emscripten_glBindAttribLocation,"Ed":_emscripten_glBindBuffer,"Dd":_emscripten_glBindFramebuffer,"Cd":_emscripten_glBindRenderbuffer,"Bd":_emscripten_glBindTexture,"Pd":_emscripten_glBindVertexArrayOES,"zd":_emscripten_glBlendColor,"yd":_emscripten_glBlendEquation,"xd":_emscripten_glBlendEquationSeparate,"wd":_emscripten_glBlendFunc,"vd":_emscripten_glBlendFuncSeparate,"ud":_emscripten_glBufferData,"td":_emscripten_glBufferSubData,"sd":_emscripten_glCheckFramebufferStatus,"rd":_emscripten_glClear,"qd":_emscripten_glClearColor,"od":_emscripten_glClearDepthf,"nd":_emscripten_glClearStencil,"md":_emscripten_glColorMask,"ld":_emscripten_glCompileShader,"kd":_emscripten_glCompressedTexImage2D,"jd":_emscripten_glCompressedTexSubImage2D,"id":_emscripten_glCopyTexImage2D,"hd":_emscripten_glCopyTexSubImage2D,"gd":_emscripten_glCreateProgram,"fd":_emscripten_glCreateShader,"ed":_emscripten_glCullFace,"dd":_emscripten_glDeleteBuffers,"cd":_emscripten_glDeleteFramebuffers,"bd":_emscripten_glDeleteProgram,"Q":_emscripten_glDeleteQueriesEXT,"ad":_emscripten_glDeleteRenderbuffers,"$c":_emscripten_glDeleteShader,"_c":_emscripten_glDeleteTextures,"Od":_emscripten_glDeleteVertexArraysOES,"Zc":_emscripten_glDepthFunc,"Yc":_emscripten_glDepthMask,"Xc":_emscripten_glDepthRangef,"Wc":_emscripten_glDetachShader,"Vc":_emscripten_glDisable,"Uc":_emscripten_glDisableVertexAttribArray,"Tc":_emscripten_glDrawArrays,"Kd":_emscripten_glDrawArraysInstancedANGLE,"Ld":_emscripten_glDrawBuffersWEBGL,"Sc":_emscripten_glDrawElements,"Jd":_emscripten_glDrawElementsInstancedANGLE,"Rc":_emscripten_glEnable,"Qc":_emscripten_glEnableVertexAttribArray,"N":_emscripten_glEndQueryEXT,"Pc":_emscripten_glFinish,"Oc":_emscripten_glFlush,"Nc":_emscripten_glFramebufferRenderbuffer,"Mc":_emscripten_glFramebufferTexture2D,"Lc":_emscripten_glFrontFace,"Kc":_emscripten_glGenBuffers,"Ic":_emscripten_glGenFramebuffers,"R":_emscripten_glGenQueriesEXT,"Hc":_emscripten_glGenRenderbuffers,"Gc":_emscripten_glGenTextures,"Nd":_emscripten_glGenVertexArraysOES,"Jc":_emscripten_glGenerateMipmap,"Fc":_emscripten_glGetActiveAttrib,"Ec":_emscripten_glGetActiveUniform,"Dc":_emscripten_glGetAttachedShaders,"Bc":_emscripten_glGetAttribLocation,"Ac":_emscripten_glGetBooleanv,"zc":_emscripten_glGetBufferParameteriv,"yc":_emscripten_glGetError,"xc":_emscripten_glGetFloatv,"wc":_emscripten_glGetFramebufferAttachmentParameteriv,"vc":_emscripten_glGetIntegerv,"tc":_emscripten_glGetProgramInfoLog,"uc":_emscripten_glGetProgramiv,"Rd":_emscripten_glGetQueryObjecti64vEXT,"Td":_emscripten_glGetQueryObjectivEXT,"Qd":_emscripten_glGetQueryObjectui64vEXT,"Sd":_emscripten_glGetQueryObjectuivEXT,"Ud":_emscripten_glGetQueryivEXT,"sc":_emscripten_glGetRenderbufferParameteriv,"qc":_emscripten_glGetShaderInfoLog,"pc":_emscripten_glGetShaderPrecisionFormat,"oc":_emscripten_glGetShaderSource,"rc":_emscripten_glGetShaderiv,"nc":_emscripten_glGetString,"mc":_emscripten_glGetTexParameterfv,"lc":_emscripten_glGetTexParameteriv,"ic":_emscripten_glGetUniformLocation,"kc":_emscripten_glGetUniformfv,"jc":_emscripten_glGetUniformiv,"fc":_emscripten_glGetVertexAttribPointerv,"hc":_emscripten_glGetVertexAttribfv,"gc":_emscripten_glGetVertexAttribiv,"ec":_emscripten_glHint,"dc":_emscripten_glIsBuffer,"cc":_emscripten_glIsEnabled,"bc":_emscripten_glIsFramebuffer,"ac":_emscripten_glIsProgram,"P":_emscripten_glIsQueryEXT,"$b":_emscripten_glIsRenderbuffer,"_b":_emscripten_glIsShader,"Zb":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"Yb":_emscripten_glLineWidth,"Xb":_emscripten_glLinkProgram,"Wb":_emscripten_glPixelStorei,"Vb":_emscripten_glPolygonOffset,"M":_emscripten_glQueryCounterEXT,"Ub":_emscripten_glReadPixels,"Tb":_emscripten_glReleaseShaderCompiler,"Sb":_emscripten_glRenderbufferStorage,"Rb":_emscripten_glSampleCoverage,"Qb":_emscripten_glScissor,"Ob":_emscripten_glShaderBinary,"Nb":_emscripten_glShaderSource,"Mb":_emscripten_glStencilFunc,"Lb":_emscripten_glStencilFuncSeparate,"Kb":_emscripten_glStencilMask,"Jb":_emscripten_glStencilMaskSeparate,"Ib":_emscripten_glStencilOp,"Hb":_emscripten_glStencilOpSeparate,"Gb":_emscripten_glTexImage2D,"Fb":_emscripten_glTexParameterf,"Db":_emscripten_glTexParameterfv,"Cb":_emscripten_glTexParameteri,"Bb":_emscripten_glTexParameteriv,"Ab":_emscripten_glTexSubImage2D,"zb":_emscripten_glUniform1f,"yb":_emscripten_glUniform1fv,"xb":_emscripten_glUniform1i,"wb":_emscripten_glUniform1iv,"vb":_emscripten_glUniform2f,"ub":_emscripten_glUniform2fv,"sb":_emscripten_glUniform2i,"rb":_emscripten_glUniform2iv,"qb":_emscripten_glUniform3f,"pb":_emscripten_glUniform3fv,"ob":_emscripten_glUniform3i,"nb":_emscripten_glUniform3iv,"mb":_emscripten_glUniform4f,"lb":_emscripten_glUniform4fv,"kb":_emscripten_glUniform4i,"jb":_emscripten_glUniform4iv,"hb":_emscripten_glUniformMatrix2fv,"gb":_emscripten_glUniformMatrix3fv,"fb":_emscripten_glUniformMatrix4fv,"eb":_emscripten_glUseProgram,"db":_emscripten_glValidateProgram,"cb":_emscripten_glVertexAttrib1f,"bb":_emscripten_glVertexAttrib1fv,"ab":_emscripten_glVertexAttrib2f,"$a":_emscripten_glVertexAttrib2fv,"_a":_emscripten_glVertexAttrib3f,"Ya":_emscripten_glVertexAttrib3fv,"Xa":_emscripten_glVertexAttrib4f,"Wa":_emscripten_glVertexAttrib4fv,"Id":_emscripten_glVertexAttribDivisorANGLE,"Va":_emscripten_glVertexAttribPointer,"Ua":_emscripten_glViewport,"Na":_emscripten_memcpy_big,"Oa":_emscripten_resize_heap,"t":_emscripten_run_script,"X":_emscripten_sample_gamepad_data,"xa":_emscripten_set_click_callback_on_thread,"za":_emscripten_set_fullscreenchange_callback_on_thread,"sa":_emscripten_set_gamepadconnected_callback_on_thread,"ra":_emscripten_set_gamepaddisconnected_callback_on_thread,"ya":_emscripten_set_keydown_callback_on_thread,"Wd":_emscripten_set_main_loop,"ta":_emscripten_set_touchcancel_callback_on_thread,"va":_emscripten_set_touchend_callback_on_thread,"ua":_emscripten_set_touchmove_callback_on_thread,"wa":_emscripten_set_touchstart_callback_on_thread,"Pa":_emscripten_thread_sleep,"S":_exit,"H":_fd_close,"Ra":_fd_read,"Ma":_fd_seek,"F":_fd_write,"L":_glActiveTexture,"y":_glAttachShader,"f":_glBindAttribLocation,"a":_glBindBuffer,"g":_glBindTexture,"Eb":_glBlendFunc,"k":_glBufferData,"r":_glBufferSubData,"I":_glClear,"J":_glClearColor,"Za":_glClearDepthf,"Fa":_glCompileShader,"Ja":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"tb":_glCullFace,"i":_glDeleteBuffers,"B":_glDeleteProgram,"C":_glDeleteShader,"E":_glDeleteTextures,"Pb":_glDepthFunc,"D":_glDetachShader,"K":_glDisable,"j":_glDisableVertexAttribArray,"Ad":_glDrawArrays,"pd":_glDrawElements,"s":_glEnable,"d":_glEnableVertexAttribArray,"ib":_glFrontFace,"l":_glGenBuffers,"La":_glGenTextures,"q":_glGetAttribLocation,"Cc":_glGetFloatv,"Aa":_glGetProgramInfoLog,"A":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"z":_glGetShaderiv,"h":_glGetString,"p":_glGetUniformLocation,"Ba":_glLinkProgram,"Qa":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ka":_glTexImage2D,"m":_glTexParameteri,"U":_glUniform1i,"ba":_glUniform4f,"Ca":_glUniformMatrix4fv,"o":_glUseProgram,"e":_glVertexAttribPointer,"Vd":_glViewport,"v":_glfwCreateWindow,"oa":_glfwDefaultWindowHints,"Z":_glfwDestroyWindow,"w":_glfwGetPrimaryMonitor,"c":_glfwGetTime,"na":_glfwGetVideoModes,"pa":_glfwInit,"ca":_glfwMakeContextCurrent,"ha":_glfwSetCharCallback,"da":_glfwSetCursorEnterCallback,"fa":_glfwSetCursorPosCallback,"ja":_glfwSetDropCallback,"qa":_glfwSetErrorCallback,"ia":_glfwSetKeyCallback,"ga":_glfwSetMouseButtonCallback,"ea":_glfwSetScrollCallback,"ka":_glfwSetWindowFocusCallback,"la":_glfwSetWindowIconifyCallback,"T":_glfwSetWindowShouldClose,"ma":_glfwSetWindowSizeCallback,"Y":_glfwSwapBuffers,"aa":_glfwSwapInterval,"u":_glfwTerminate,"b":_glfwWindowHint,"$":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["Yd"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["Zd"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["$d"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ae"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["be"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ce"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_rlgl_solar_system.wasm b/examples/web/models/models_rlgl_solar_system.wasm Binary files differdeleted file mode 100644 index 06ed7e7..0000000 --- a/examples/web/models/models_rlgl_solar_system.wasm +++ /dev/null diff --git a/examples/web/models/models_skybox.c b/examples/web/models/models_skybox.c deleted file mode 100644 index 75699f4..0000000 --- a/examples/web/models/models_skybox.c +++ /dev/null @@ -1,164 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Skybox loading and drawing -* -* This example has been created using raylib 1.8 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2017 Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" -#include "rlgl.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// Define the camera to look into our 3d world -Camera camera = {{ 1.0f, 1.0f, 1.0f }, { 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f }, 45.0f }; - -Model skybox = { 0 }; -Shader shdrCubemap = { 0 }; -Texture2D panorama = { 0 }; - -char panoFileName[256] = { 0 }; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - skybox loading and drawing"); - - // Load skybox model - Mesh cube = GenMeshCube(1.0f, 1.0f, 1.0f); - skybox = LoadModelFromMesh(cube); - - // Load skybox shader and set required locations - // NOTE: Some locations are automatically set at shader loading -#if defined(PLATFORM_DESKTOP) - skybox.materials[0].shader = LoadShader("resources/shaders/glsl330/skybox.vs", "resources/shaders/glsl330/skybox.fs"); -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - skybox.materials[0].shader = LoadShader("resources/shaders/glsl100/skybox.vs", "resources/shaders/glsl100/skybox.fs"); -#endif - SetShaderValue(skybox.materials[0].shader, GetShaderLocation(skybox.materials[0].shader, "environmentMap"), (int[1]){ MATERIAL_MAP_CUBEMAP }, SHADER_UNIFORM_INT); - SetShaderValue(skybox.materials[0].shader, GetShaderLocation(skybox.materials[0].shader, "vflipped"), (int[1]){ 1 }, SHADER_UNIFORM_INT); - - // Load cubemap shader and setup required shader locations -#if defined(PLATFORM_DESKTOP) - shdrCubemap = LoadShader("resources/shaders/glsl330/cubemap.vs", "resources/shaders/glsl330/cubemap.fs"); -#else // PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB - shdrCubemap = LoadShader("resources/shaders/glsl100/cubemap.vs", "resources/shaders/glsl100/cubemap.fs"); -#endif - SetShaderValue(shdrCubemap, GetShaderLocation(shdrCubemap, "equirectangularMap"), (int[1]){ 0 }, SHADER_UNIFORM_INT); - - // Load HDR panorama (sphere) texture - TextCopy(panoFileName, "resources/dresden_square_2k.hdr"); - panorama = LoadTexture(panoFileName); - - // Generate cubemap (texture with 6 quads-cube-mapping) from panorama HDR texture - // NOTE 1: New texture is generated rendering to texture, shader calculates the sphere->cube coordinates mapping - // NOTE 2: It seems on some Android devices WebGL, fbo does not properly support a FLOAT-based attachment, - // despite texture can be successfully created.. so using PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 instead of PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 - skybox.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture = GenTextureCubemap(shdrCubemap, panorama, 1024, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8); - - UnloadTexture(panorama); // Texture not required anymore, cubemap already generated - - SetCameraMode(camera, CAMERA_FIRST_PERSON); // Set a first person camera mode - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadModel(skybox); // Unload skybox model - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - UpdateCamera(&camera); // Update camera - - // Load new cubemap texture on drag&drop - if (IsFileDropped()) - { - int count = 0; - char **droppedFiles = GetDroppedFiles(&count); - - if (count == 1) // Only support one file dropped - { - if (IsFileExtension(droppedFiles[0], ".png;.jpg;.hdr;.bmp;.tga")) - { - // Unload current cubemap texture and load new one - UnloadTexture(skybox.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture); - panorama = LoadTexture(droppedFiles[0]); - TextCopy(panoFileName, droppedFiles[0]); - - // Generate cubemap from panorama texture - skybox.materials[0].maps[MATERIAL_MAP_CUBEMAP].texture = GenTextureCubemap(shdrCubemap, panorama, 1024, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8); - UnloadTexture(panorama); - } - } - - ClearDroppedFiles(); // Clear internal buffers - } - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - // We are inside the cube, we need to disable backface culling! - rlDisableBackfaceCulling(); - rlDisableDepthMask(); - DrawModel(skybox, (Vector3){0, 0, 0}, 1.0f, WHITE); - rlEnableBackfaceCulling(); - rlEnableDepthMask(); - - DrawGrid(10, 1.0f); - EndMode3D(); - - DrawText(TextFormat("Panorama image from hdrihaven.com: %s", GetFileName(panoFileName)), 10, GetScreenHeight() - 20, 10, BLACK); - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -} diff --git a/examples/web/models/models_skybox.data b/examples/web/models/models_skybox.data Binary files differdeleted file mode 100644 index 7507cfc..0000000 --- a/examples/web/models/models_skybox.data +++ /dev/null diff --git a/examples/web/models/models_skybox.html b/examples/web/models/models_skybox.html deleted file mode 100644 index e17be04..0000000 --- a/examples/web/models/models_skybox.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_skybox.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_skybox.js b/examples/web/models/models_skybox.js deleted file mode 100644 index b520a82..0000000 --- a/examples/web/models/models_skybox.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){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 location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_skybox.data";var REMOTE_PACKAGE_BASE="models_skybox.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"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){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"]("/","resources",true,true);Module["FS_createPath"]("/resources","shaders",true,true);Module["FS_createPath"]("/resources/shaders","glsl100",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<files.length;++i){new DataRequest(files[i]["start"],files[i]["end"],files[i]["audio"]).open("GET",files[i]["filename"])}function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);DataRequest.prototype.byteArray=byteArray;var files=metadata["files"];for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_skybox.data")}Module["addRunDependency"]("datafile_models/models_skybox.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"filename":"/resources/dresden_square_2k.hdr","start":0,"end":6019615,"audio":0},{"filename":"/resources/shaders/glsl100/skybox.vs","start":6019615,"end":6020197,"audio":0},{"filename":"/resources/shaders/glsl100/skybox.fs","start":6020197,"end":6020946,"audio":0},{"filename":"/resources/shaders/glsl100/cubemap.vs","start":6020946,"end":6021403,"audio":0},{"filename":"/resources/shaders/glsl100/cubemap.fs","start":6021403,"end":6022034,"audio":0}],"remote_package_size":6022034,"package_uuid":"ba7627fe-fc9b-40ae-8526-525f9d540774"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||67108864;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_skybox.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["ne"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["qe"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock&&!target.msRequestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}else{return-2}}return requestPointerLock(target)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDepthMask(flag){GLctx.depthMask(!!flag)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"i":___assert_fail,"S":___sys_fcntl64,"Ya":___sys_ioctl,"Za":___sys_open,"wa":_emscripten_exit_pointerlock,"je":_emscripten_get_element_css_size,"ee":_emscripten_get_gamepad_status,"fe":_emscripten_get_num_gamepads,"Kd":_emscripten_glActiveTexture,"Jd":_emscripten_glAttachShader,"_d":_emscripten_glBeginQueryEXT,"Id":_emscripten_glBindAttribLocation,"Hd":_emscripten_glBindBuffer,"Gd":_emscripten_glBindFramebuffer,"Fd":_emscripten_glBindRenderbuffer,"Ed":_emscripten_glBindTexture,"Sd":_emscripten_glBindVertexArrayOES,"Dd":_emscripten_glBlendColor,"Cd":_emscripten_glBlendEquation,"Bd":_emscripten_glBlendEquationSeparate,"Ad":_emscripten_glBlendFunc,"zd":_emscripten_glBlendFuncSeparate,"yd":_emscripten_glBufferData,"xd":_emscripten_glBufferSubData,"wd":_emscripten_glCheckFramebufferStatus,"vd":_emscripten_glClear,"ud":_emscripten_glClearColor,"td":_emscripten_glClearDepthf,"sd":_emscripten_glClearStencil,"rd":_emscripten_glColorMask,"qd":_emscripten_glCompileShader,"pd":_emscripten_glCompressedTexImage2D,"od":_emscripten_glCompressedTexSubImage2D,"nd":_emscripten_glCopyTexImage2D,"md":_emscripten_glCopyTexSubImage2D,"ld":_emscripten_glCreateProgram,"kd":_emscripten_glCreateShader,"jd":_emscripten_glCullFace,"id":_emscripten_glDeleteBuffers,"hd":_emscripten_glDeleteFramebuffers,"gd":_emscripten_glDeleteProgram,"ae":_emscripten_glDeleteQueriesEXT,"fd":_emscripten_glDeleteRenderbuffers,"ed":_emscripten_glDeleteShader,"dd":_emscripten_glDeleteTextures,"Rd":_emscripten_glDeleteVertexArraysOES,"cd":_emscripten_glDepthFunc,"bd":_emscripten_glDepthMask,"ad":_emscripten_glDepthRangef,"$c":_emscripten_glDetachShader,"_c":_emscripten_glDisable,"Zc":_emscripten_glDisableVertexAttribArray,"Yc":_emscripten_glDrawArrays,"Nd":_emscripten_glDrawArraysInstancedANGLE,"Od":_emscripten_glDrawBuffersWEBGL,"Xc":_emscripten_glDrawElements,"Md":_emscripten_glDrawElementsInstancedANGLE,"Wc":_emscripten_glEnable,"Vc":_emscripten_glEnableVertexAttribArray,"Zd":_emscripten_glEndQueryEXT,"Uc":_emscripten_glFinish,"Tc":_emscripten_glFlush,"Sc":_emscripten_glFramebufferRenderbuffer,"Rc":_emscripten_glFramebufferTexture2D,"Qc":_emscripten_glFrontFace,"Pc":_emscripten_glGenBuffers,"Nc":_emscripten_glGenFramebuffers,"be":_emscripten_glGenQueriesEXT,"Mc":_emscripten_glGenRenderbuffers,"Lc":_emscripten_glGenTextures,"Qd":_emscripten_glGenVertexArraysOES,"Oc":_emscripten_glGenerateMipmap,"Kc":_emscripten_glGetActiveAttrib,"Jc":_emscripten_glGetActiveUniform,"Ic":_emscripten_glGetAttachedShaders,"Hc":_emscripten_glGetAttribLocation,"Gc":_emscripten_glGetBooleanv,"Ec":_emscripten_glGetBufferParameteriv,"Dc":_emscripten_glGetError,"Cc":_emscripten_glGetFloatv,"Bc":_emscripten_glGetFramebufferAttachmentParameteriv,"Ac":_emscripten_glGetIntegerv,"yc":_emscripten_glGetProgramInfoLog,"zc":_emscripten_glGetProgramiv,"Ud":_emscripten_glGetQueryObjecti64vEXT,"Wd":_emscripten_glGetQueryObjectivEXT,"Td":_emscripten_glGetQueryObjectui64vEXT,"Vd":_emscripten_glGetQueryObjectuivEXT,"Xd":_emscripten_glGetQueryivEXT,"xc":_emscripten_glGetRenderbufferParameteriv,"vc":_emscripten_glGetShaderInfoLog,"uc":_emscripten_glGetShaderPrecisionFormat,"tc":_emscripten_glGetShaderSource,"wc":_emscripten_glGetShaderiv,"sc":_emscripten_glGetString,"rc":_emscripten_glGetTexParameterfv,"qc":_emscripten_glGetTexParameteriv,"nc":_emscripten_glGetUniformLocation,"pc":_emscripten_glGetUniformfv,"oc":_emscripten_glGetUniformiv,"jc":_emscripten_glGetVertexAttribPointerv,"mc":_emscripten_glGetVertexAttribfv,"lc":_emscripten_glGetVertexAttribiv,"ic":_emscripten_glHint,"hc":_emscripten_glIsBuffer,"gc":_emscripten_glIsEnabled,"fc":_emscripten_glIsFramebuffer,"ec":_emscripten_glIsProgram,"$d":_emscripten_glIsQueryEXT,"dc":_emscripten_glIsRenderbuffer,"cc":_emscripten_glIsShader,"bc":_emscripten_glIsTexture,"Pd":_emscripten_glIsVertexArrayOES,"ac":_emscripten_glLineWidth,"_b":_emscripten_glLinkProgram,"Zb":_emscripten_glPixelStorei,"Yb":_emscripten_glPolygonOffset,"Yd":_emscripten_glQueryCounterEXT,"Xb":_emscripten_glReadPixels,"Wb":_emscripten_glReleaseShaderCompiler,"Vb":_emscripten_glRenderbufferStorage,"Ub":_emscripten_glSampleCoverage,"Tb":_emscripten_glScissor,"Sb":_emscripten_glShaderBinary,"Rb":_emscripten_glShaderSource,"Qb":_emscripten_glStencilFunc,"Pb":_emscripten_glStencilFuncSeparate,"Ob":_emscripten_glStencilMask,"Nb":_emscripten_glStencilMaskSeparate,"Mb":_emscripten_glStencilOp,"Lb":_emscripten_glStencilOpSeparate,"Kb":_emscripten_glTexImage2D,"Jb":_emscripten_glTexParameterf,"Ib":_emscripten_glTexParameterfv,"Hb":_emscripten_glTexParameteri,"Gb":_emscripten_glTexParameteriv,"Fb":_emscripten_glTexSubImage2D,"Eb":_emscripten_glUniform1f,"Db":_emscripten_glUniform1fv,"Cb":_emscripten_glUniform1i,"Bb":_emscripten_glUniform1iv,"Ab":_emscripten_glUniform2f,"zb":_emscripten_glUniform2fv,"yb":_emscripten_glUniform2i,"xb":_emscripten_glUniform2iv,"wb":_emscripten_glUniform3f,"vb":_emscripten_glUniform3fv,"ub":_emscripten_glUniform3i,"tb":_emscripten_glUniform3iv,"sb":_emscripten_glUniform4f,"rb":_emscripten_glUniform4fv,"qb":_emscripten_glUniform4i,"pb":_emscripten_glUniform4iv,"ob":_emscripten_glUniformMatrix2fv,"nb":_emscripten_glUniformMatrix3fv,"lb":_emscripten_glUniformMatrix4fv,"kb":_emscripten_glUseProgram,"jb":_emscripten_glValidateProgram,"ib":_emscripten_glVertexAttrib1f,"hb":_emscripten_glVertexAttrib1fv,"gb":_emscripten_glVertexAttrib2f,"fb":_emscripten_glVertexAttrib2fv,"eb":_emscripten_glVertexAttrib3f,"db":_emscripten_glVertexAttrib3fv,"cb":_emscripten_glVertexAttrib4f,"ab":_emscripten_glVertexAttrib4fv,"Ld":_emscripten_glVertexAttribDivisorANGLE,"$a":_emscripten_glVertexAttribPointer,"_a":_emscripten_glViewport,"Ta":_emscripten_memcpy_big,"xa":_emscripten_request_pointerlock,"Ua":_emscripten_resize_heap,"Y":_emscripten_run_script,"ge":_emscripten_sample_gamepad_data,"ta":_emscripten_set_click_callback_on_thread,"va":_emscripten_set_fullscreenchange_callback_on_thread,"oa":_emscripten_set_gamepadconnected_callback_on_thread,"na":_emscripten_set_gamepaddisconnected_callback_on_thread,"ua":_emscripten_set_keydown_callback_on_thread,"me":_emscripten_set_main_loop,"pa":_emscripten_set_touchcancel_callback_on_thread,"ra":_emscripten_set_touchend_callback_on_thread,"qa":_emscripten_set_touchmove_callback_on_thread,"sa":_emscripten_set_touchstart_callback_on_thread,"Wa":_emscripten_thread_sleep,"ce":_exit,"T":_fd_close,"Xa":_fd_read,"Sa":_fd_seek,"R":_fd_write,"t":_glActiveTexture,"M":_glAttachShader,"p":_glBindAttribLocation,"a":_glBindBuffer,"n":_glBindFramebuffer,"O":_glBindRenderbuffer,"d":_glBindTexture,"bb":_glBlendFunc,"e":_glBufferData,"F":_glBufferSubData,"Ka":_glCheckFramebufferStatus,"G":_glClear,"U":_glClearColor,"Qa":_glClearDepthf,"Da":_glCompileShader,"Oa":_glCompressedTexImage2D,"Ba":_glCreateProgram,"Fa":_glCreateShader,"Va":_glCullFace,"q":_glDeleteBuffers,"$b":_glDeleteFramebuffers,"P":_glDeleteProgram,"kc":_glDeleteRenderbuffers,"v":_glDeleteShader,"Q":_glDeleteTextures,"mb":_glDepthFunc,"W":_glDepthMask,"w":_glDetachShader,"x":_glDisable,"k":_glDisableVertexAttribArray,"H":_glDrawArrays,"X":_glDrawElements,"s":_glEnable,"b":_glEnableVertexAttribArray,"B":_glFramebufferRenderbuffer,"u":_glFramebufferTexture2D,"Ra":_glFrontFace,"f":_glGenBuffers,"La":_glGenFramebuffers,"Na":_glGenRenderbuffers,"E":_glGenTextures,"Ga":_glGetActiveUniform,"m":_glGetAttribLocation,"Fc":_glGetFloatv,"V":_glGetFramebufferAttachmentParameteriv,"za":_glGetProgramInfoLog,"z":_glGetProgramiv,"Ca":_glGetShaderInfoLog,"N":_glGetShaderiv,"r":_glGetString,"h":_glGetUniformLocation,"Aa":_glLinkProgram,"Pa":_glPixelStorei,"Ha":_glReadPixels,"Ma":_glRenderbufferStorage,"Ea":_glShaderSource,"D":_glTexImage2D,"g":_glTexParameteri,"J":_glUniform1i,"ya":_glUniform1iv,"y":_glUniform4f,"C":_glUniformMatrix4fv,"l":_glUseProgram,"Ia":_glVertexAttrib2f,"Ja":_glVertexAttrib3f,"A":_glVertexAttrib4f,"c":_glVertexAttribPointer,"le":_glViewport,"K":_glfwCreateWindow,"ka":_glfwDefaultWindowHints,"ie":_glfwDestroyWindow,"L":_glfwGetPrimaryMonitor,"o":_glfwGetTime,"ja":_glfwGetVideoModes,"la":_glfwInit,"_":_glfwMakeContextCurrent,"da":_glfwSetCharCallback,"$":_glfwSetCursorEnterCallback,"ba":_glfwSetCursorPosCallback,"fa":_glfwSetDropCallback,"ma":_glfwSetErrorCallback,"ea":_glfwSetKeyCallback,"ca":_glfwSetMouseButtonCallback,"aa":_glfwSetScrollCallback,"ga":_glfwSetWindowFocusCallback,"ha":_glfwSetWindowIconifyCallback,"de":_glfwSetWindowShouldClose,"ia":_glfwSetWindowSizeCallback,"he":_glfwSwapBuffers,"Z":_glfwSwapInterval,"I":_glfwTerminate,"j":_glfwWindowHint,"ke":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["oe"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["pe"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["re"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["se"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["te"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ue"]).apply(null,arguments)};Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_skybox.wasm b/examples/web/models/models_skybox.wasm Binary files differdeleted file mode 100644 index 3a22218..0000000 --- a/examples/web/models/models_skybox.wasm +++ /dev/null diff --git a/examples/web/models/models_waving_cubes.c b/examples/web/models/models_waving_cubes.c deleted file mode 100644 index 067046d..0000000 --- a/examples/web/models/models_waving_cubes.c +++ /dev/null @@ -1,143 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Waving cubes -* -* This example has been created using raylib 2.5 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Example contributed by Codecat (@codecat) and reviewed by Ramon Santamaria (@raysan5) -* -* Copyright (c) 2019 Codecat (@codecat) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" - -#include <math.h> - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -static Camera3D camera = { 0 }; - -// Specify the amount of blocks in each direction -const int numBlocks = 15; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main() -{ - // Initialization - //-------------------------------------------------------------------------------------- - const int screenWidth = 800; - const int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [models] example - waving cubes"); - - // Initialize the camera - camera.position = (Vector3){ 30.0f, 20.0f, 30.0f }; - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; - camera.fovy = 70.0f; - camera.projection = CAMERA_PERSPECTIVE; - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definitions -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - double time = GetTime(); - - // Calculate time scale for cube position and size - float scale = (2.0f + (float)sin(time))*0.7f; - - // Move camera around the scene - double cameraTime = time*0.3; - camera.position.x = (float)cos(cameraTime)*40.0f; - camera.position.z = (float)sin(cameraTime)*40.0f; - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - BeginMode3D(camera); - - DrawGrid(10, 5.0f); - - for (int x = 0; x < numBlocks; x++) - { - for (int y = 0; y < numBlocks; y++) - { - for (int z = 0; z < numBlocks; z++) - { - // Scale of the blocks depends on x/y/z positions - float blockScale = (x + y + z)/30.0f; - - // Scatter makes the waving effect by adding blockScale over time - float scatter = sinf(blockScale*20.0f + (float)(time*4.0f)); - - // Calculate the cube position - Vector3 cubePos = { - (float)(x - numBlocks/2)*(scale*3.0f) + scatter, - (float)(y - numBlocks/2)*(scale*2.0f) + scatter, - (float)(z - numBlocks/2)*(scale*3.0f) + scatter - }; - - // Pick a color with a hue depending on cube position for the rainbow color effect - Color cubeColor = ColorFromHSV((float)(((x + y + z)*18)%360), 0.75f, 0.9f); - - // Calculate cube size - float cubeSize = (2.4f - scale)*blockScale; - - // And finally, draw the cube! - DrawCube(cubePos, cubeSize, cubeSize, cubeSize, cubeColor); - } - } - } - - EndMode3D(); - - DrawFPS(10, 10); - - EndDrawing(); - //---------------------------------------------------------------------------------- -}
\ No newline at end of file diff --git a/examples/web/models/models_waving_cubes.html b/examples/web/models/models_waving_cubes.html deleted file mode 100644 index d77bf1f..0000000 --- a/examples/web/models/models_waving_cubes.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_waving_cubes.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_waving_cubes.js b/examples/web/models/models_waving_cubes.js deleted file mode 100644 index e6aab8b..0000000 --- a/examples/web/models/models_waving_cubes.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_waving_cubes.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["Xd"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["_d"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"n":___assert_fail,"F":___sys_fcntl64,"Sa":___sys_ioctl,"Ta":___sys_open,"za":_emscripten_exit_pointerlock,"Z":_emscripten_get_element_css_size,"U":_emscripten_get_gamepad_status,"V":_emscripten_get_num_gamepads,"Hd":_emscripten_glActiveTexture,"Gd":_emscripten_glAttachShader,"N":_emscripten_glBeginQueryEXT,"Fd":_emscripten_glBindAttribLocation,"Ed":_emscripten_glBindBuffer,"Dd":_emscripten_glBindFramebuffer,"Cd":_emscripten_glBindRenderbuffer,"Bd":_emscripten_glBindTexture,"Pd":_emscripten_glBindVertexArrayOES,"zd":_emscripten_glBlendColor,"yd":_emscripten_glBlendEquation,"xd":_emscripten_glBlendEquationSeparate,"wd":_emscripten_glBlendFunc,"vd":_emscripten_glBlendFuncSeparate,"ud":_emscripten_glBufferData,"td":_emscripten_glBufferSubData,"sd":_emscripten_glCheckFramebufferStatus,"rd":_emscripten_glClear,"qd":_emscripten_glClearColor,"od":_emscripten_glClearDepthf,"nd":_emscripten_glClearStencil,"md":_emscripten_glColorMask,"ld":_emscripten_glCompileShader,"kd":_emscripten_glCompressedTexImage2D,"jd":_emscripten_glCompressedTexSubImage2D,"id":_emscripten_glCopyTexImage2D,"hd":_emscripten_glCopyTexSubImage2D,"gd":_emscripten_glCreateProgram,"fd":_emscripten_glCreateShader,"ed":_emscripten_glCullFace,"dd":_emscripten_glDeleteBuffers,"cd":_emscripten_glDeleteFramebuffers,"bd":_emscripten_glDeleteProgram,"P":_emscripten_glDeleteQueriesEXT,"ad":_emscripten_glDeleteRenderbuffers,"$c":_emscripten_glDeleteShader,"_c":_emscripten_glDeleteTextures,"Od":_emscripten_glDeleteVertexArraysOES,"Zc":_emscripten_glDepthFunc,"Yc":_emscripten_glDepthMask,"Xc":_emscripten_glDepthRangef,"Wc":_emscripten_glDetachShader,"Vc":_emscripten_glDisable,"Uc":_emscripten_glDisableVertexAttribArray,"Tc":_emscripten_glDrawArrays,"Kd":_emscripten_glDrawArraysInstancedANGLE,"Ld":_emscripten_glDrawBuffersWEBGL,"Sc":_emscripten_glDrawElements,"Jd":_emscripten_glDrawElementsInstancedANGLE,"Rc":_emscripten_glEnable,"Qc":_emscripten_glEnableVertexAttribArray,"M":_emscripten_glEndQueryEXT,"Pc":_emscripten_glFinish,"Oc":_emscripten_glFlush,"Nc":_emscripten_glFramebufferRenderbuffer,"Mc":_emscripten_glFramebufferTexture2D,"Lc":_emscripten_glFrontFace,"Kc":_emscripten_glGenBuffers,"Ic":_emscripten_glGenFramebuffers,"Q":_emscripten_glGenQueriesEXT,"Hc":_emscripten_glGenRenderbuffers,"Gc":_emscripten_glGenTextures,"Nd":_emscripten_glGenVertexArraysOES,"Jc":_emscripten_glGenerateMipmap,"Fc":_emscripten_glGetActiveAttrib,"Ec":_emscripten_glGetActiveUniform,"Dc":_emscripten_glGetAttachedShaders,"Bc":_emscripten_glGetAttribLocation,"Ac":_emscripten_glGetBooleanv,"zc":_emscripten_glGetBufferParameteriv,"yc":_emscripten_glGetError,"xc":_emscripten_glGetFloatv,"wc":_emscripten_glGetFramebufferAttachmentParameteriv,"vc":_emscripten_glGetIntegerv,"tc":_emscripten_glGetProgramInfoLog,"uc":_emscripten_glGetProgramiv,"Rd":_emscripten_glGetQueryObjecti64vEXT,"Td":_emscripten_glGetQueryObjectivEXT,"Qd":_emscripten_glGetQueryObjectui64vEXT,"Sd":_emscripten_glGetQueryObjectuivEXT,"Ud":_emscripten_glGetQueryivEXT,"sc":_emscripten_glGetRenderbufferParameteriv,"qc":_emscripten_glGetShaderInfoLog,"pc":_emscripten_glGetShaderPrecisionFormat,"oc":_emscripten_glGetShaderSource,"rc":_emscripten_glGetShaderiv,"nc":_emscripten_glGetString,"mc":_emscripten_glGetTexParameterfv,"lc":_emscripten_glGetTexParameteriv,"ic":_emscripten_glGetUniformLocation,"kc":_emscripten_glGetUniformfv,"jc":_emscripten_glGetUniformiv,"fc":_emscripten_glGetVertexAttribPointerv,"hc":_emscripten_glGetVertexAttribfv,"gc":_emscripten_glGetVertexAttribiv,"ec":_emscripten_glHint,"dc":_emscripten_glIsBuffer,"cc":_emscripten_glIsEnabled,"bc":_emscripten_glIsFramebuffer,"ac":_emscripten_glIsProgram,"O":_emscripten_glIsQueryEXT,"$b":_emscripten_glIsRenderbuffer,"_b":_emscripten_glIsShader,"Zb":_emscripten_glIsTexture,"Md":_emscripten_glIsVertexArrayOES,"Yb":_emscripten_glLineWidth,"Xb":_emscripten_glLinkProgram,"Wb":_emscripten_glPixelStorei,"Vb":_emscripten_glPolygonOffset,"L":_emscripten_glQueryCounterEXT,"Ub":_emscripten_glReadPixels,"Tb":_emscripten_glReleaseShaderCompiler,"Sb":_emscripten_glRenderbufferStorage,"Rb":_emscripten_glSampleCoverage,"Qb":_emscripten_glScissor,"Ob":_emscripten_glShaderBinary,"Nb":_emscripten_glShaderSource,"Mb":_emscripten_glStencilFunc,"Lb":_emscripten_glStencilFuncSeparate,"Kb":_emscripten_glStencilMask,"Jb":_emscripten_glStencilMaskSeparate,"Ib":_emscripten_glStencilOp,"Hb":_emscripten_glStencilOpSeparate,"Gb":_emscripten_glTexImage2D,"Fb":_emscripten_glTexParameterf,"Db":_emscripten_glTexParameterfv,"Cb":_emscripten_glTexParameteri,"Bb":_emscripten_glTexParameteriv,"Ab":_emscripten_glTexSubImage2D,"zb":_emscripten_glUniform1f,"yb":_emscripten_glUniform1fv,"xb":_emscripten_glUniform1i,"wb":_emscripten_glUniform1iv,"vb":_emscripten_glUniform2f,"ub":_emscripten_glUniform2fv,"sb":_emscripten_glUniform2i,"rb":_emscripten_glUniform2iv,"qb":_emscripten_glUniform3f,"pb":_emscripten_glUniform3fv,"ob":_emscripten_glUniform3i,"nb":_emscripten_glUniform3iv,"mb":_emscripten_glUniform4f,"lb":_emscripten_glUniform4fv,"kb":_emscripten_glUniform4i,"jb":_emscripten_glUniform4iv,"hb":_emscripten_glUniformMatrix2fv,"gb":_emscripten_glUniformMatrix3fv,"fb":_emscripten_glUniformMatrix4fv,"eb":_emscripten_glUseProgram,"db":_emscripten_glValidateProgram,"cb":_emscripten_glVertexAttrib1f,"bb":_emscripten_glVertexAttrib1fv,"ab":_emscripten_glVertexAttrib2f,"$a":_emscripten_glVertexAttrib2fv,"_a":_emscripten_glVertexAttrib3f,"Ya":_emscripten_glVertexAttrib3fv,"Xa":_emscripten_glVertexAttrib4f,"Wa":_emscripten_glVertexAttrib4fv,"Id":_emscripten_glVertexAttribDivisorANGLE,"Va":_emscripten_glVertexAttribPointer,"Ua":_emscripten_glViewport,"Na":_emscripten_memcpy_big,"Oa":_emscripten_resize_heap,"t":_emscripten_run_script,"W":_emscripten_sample_gamepad_data,"wa":_emscripten_set_click_callback_on_thread,"ya":_emscripten_set_fullscreenchange_callback_on_thread,"ra":_emscripten_set_gamepadconnected_callback_on_thread,"qa":_emscripten_set_gamepaddisconnected_callback_on_thread,"xa":_emscripten_set_keydown_callback_on_thread,"Wd":_emscripten_set_main_loop,"sa":_emscripten_set_touchcancel_callback_on_thread,"ua":_emscripten_set_touchend_callback_on_thread,"ta":_emscripten_set_touchmove_callback_on_thread,"va":_emscripten_set_touchstart_callback_on_thread,"Pa":_emscripten_thread_sleep,"R":_exit,"G":_fd_close,"Ra":_fd_read,"Ma":_fd_seek,"E":_fd_write,"K":_glActiveTexture,"x":_glAttachShader,"f":_glBindAttribLocation,"a":_glBindBuffer,"g":_glBindTexture,"Eb":_glBlendFunc,"k":_glBufferData,"r":_glBufferSubData,"H":_glClear,"I":_glClearColor,"Za":_glClearDepthf,"Fa":_glCompileShader,"Ja":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"tb":_glCullFace,"i":_glDeleteBuffers,"A":_glDeleteProgram,"B":_glDeleteShader,"D":_glDeleteTextures,"Pb":_glDepthFunc,"C":_glDetachShader,"J":_glDisable,"j":_glDisableVertexAttribArray,"Ad":_glDrawArrays,"pd":_glDrawElements,"s":_glEnable,"d":_glEnableVertexAttribArray,"ib":_glFrontFace,"l":_glGenBuffers,"La":_glGenTextures,"q":_glGetAttribLocation,"Cc":_glGetFloatv,"Aa":_glGetProgramInfoLog,"z":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"y":_glGetShaderiv,"h":_glGetString,"p":_glGetUniformLocation,"Ba":_glLinkProgram,"Qa":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ka":_glTexImage2D,"m":_glTexParameteri,"T":_glUniform1i,"aa":_glUniform4f,"Ca":_glUniformMatrix4fv,"o":_glUseProgram,"e":_glVertexAttribPointer,"Vd":_glViewport,"v":_glfwCreateWindow,"na":_glfwDefaultWindowHints,"Y":_glfwDestroyWindow,"w":_glfwGetPrimaryMonitor,"c":_glfwGetTime,"ma":_glfwGetVideoModes,"oa":_glfwInit,"ba":_glfwMakeContextCurrent,"ga":_glfwSetCharCallback,"ca":_glfwSetCursorEnterCallback,"ea":_glfwSetCursorPosCallback,"ia":_glfwSetDropCallback,"pa":_glfwSetErrorCallback,"ha":_glfwSetKeyCallback,"fa":_glfwSetMouseButtonCallback,"da":_glfwSetScrollCallback,"ja":_glfwSetWindowFocusCallback,"ka":_glfwSetWindowIconifyCallback,"S":_glfwSetWindowShouldClose,"la":_glfwSetWindowSizeCallback,"X":_glfwSwapBuffers,"$":_glfwSwapInterval,"u":_glfwTerminate,"b":_glfwWindowHint,"_":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["Yd"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["Zd"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["$d"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["ae"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["be"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ce"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_waving_cubes.wasm b/examples/web/models/models_waving_cubes.wasm Binary files differdeleted file mode 100644 index 2153faf..0000000 --- a/examples/web/models/models_waving_cubes.wasm +++ /dev/null diff --git a/examples/web/models/models_yaw_pitch_roll.c b/examples/web/models/models_yaw_pitch_roll.c deleted file mode 100644 index f085927..0000000 --- a/examples/web/models/models_yaw_pitch_roll.c +++ /dev/null @@ -1,145 +0,0 @@ -/******************************************************************************************* -* -* raylib [models] example - Plane rotations (yaw, pitch, roll) -* -* This example has been created using raylib 1.8 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Example contributed by Berni (@Berni8k) and reviewed by Ramon Santamaria (@raysan5) -* -* Copyright (c) 2017 Berni (@Berni8k) and Ramon Santamaria (@raysan5) -* -********************************************************************************************/ - -#include "raylib.h" -#include "raymath.h" - -#if defined(PLATFORM_WEB) - #include <emscripten/emscripten.h> -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -const int screenWidth = 800; -const int screenHeight = 450; - -// Define our custom camera to look into our 3d world -Camera camera = { 0 }; - -Model model = { 0 }; - -float pitch = 0.0f; -float roll = 0.0f; -float yaw = 0.0f; - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void); // Update and Draw one frame - -//---------------------------------------------------------------------------------- -// Program Main Entry Point -//---------------------------------------------------------------------------------- -int main(void) -{ - // Initialization - //-------------------------------------------------------------------------------------- - InitWindow(screenWidth, screenHeight, "raylib [models] example - plane rotations (yaw, pitch, roll)"); - - camera.position = (Vector3){ 0.0f, 50.0f, -120.0f };// Camera position perspective - camera.target = (Vector3){ 0.0f, 0.0f, 0.0f }; // Camera looking at point - camera.up = (Vector3){ 0.0f, 1.0f, 0.0f }; // Camera up vector (rotation towards target) - camera.fovy = 30.0f; // Camera field-of-view Y - camera.projection = CAMERA_PERSPECTIVE; // Camera type - - // Model loading - model = LoadModel("resources/plane/plane.gltf"); // Load OBJ model - -#if defined(PLATFORM_WEB) - emscripten_set_main_loop(UpdateDrawFrame, 60, 1); -#else - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - UpdateDrawFrame(); - } -#endif - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadModel(model); // Unload all loaded data - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- -void UpdateDrawFrame(void) -{ - // Update - //---------------------------------------------------------------------------------- - // Plane pitch (x-axis) controls - if (IsKeyDown(KEY_DOWN)) pitch += 0.6f; - else if (IsKeyDown(KEY_UP)) pitch -= 0.6f; - else - { - if (pitch > 0.3f) pitch -= 0.3f; - else if (pitch < -0.3f) pitch += 0.3f; - } - - // Plane yaw (y-axis) controls - if (IsKeyDown(KEY_S)) yaw += 1.0f; - else if (IsKeyDown(KEY_A)) yaw -= 1.0f; - else - { - if (yaw > 0.0f) yaw -= 0.5f; - else if (yaw < 0.0f) yaw += 0.5f; - } - - // Plane roll (z-axis) controls - if (IsKeyDown(KEY_LEFT)) roll += 1.0f; - else if (IsKeyDown(KEY_RIGHT)) roll -= 1.0f; - else - { - if (roll > 0.0f) roll -= 0.5f; - else if (roll < 0.0f) roll += 0.5f; - } - - // Tranformation matrix for rotations - model.transform = MatrixRotateXYZ((Vector3){DEG2RAD*pitch,DEG2RAD*yaw,DEG2RAD*roll}); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - // Draw 3D model (recomended to draw 3D always before 2D) - BeginMode3D(camera); - - DrawModel(model, (Vector3){ 0.0f, 0.0f, 15.0f }, 0.25f, WHITE); // Draw 3d model with texture - DrawGrid(10, 10.0f); - - EndMode3D(); - - // Draw controls info - DrawRectangle(30, 370, 260, 70, Fade(GREEN, 0.5f)); - DrawRectangleLines(30, 370, 260, 70, Fade(DARKGREEN, 0.5f)); - DrawText("Pitch controlled with: KEY_UP / KEY_DOWN", 40, 380, 10, DARKGRAY); - DrawText("Roll controlled with: KEY_LEFT / KEY_RIGHT", 40, 400, 10, DARKGRAY); - DrawText("Yaw controlled with: KEY_A / KEY_S", 40, 420, 10, DARKGRAY); - - DrawText("(c) WWI Plane Model created by GiaHanLam", screenWidth - 240, screenHeight - 20, 10, DARKGRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- -} diff --git a/examples/web/models/models_yaw_pitch_roll.data b/examples/web/models/models_yaw_pitch_roll.data Binary files differdeleted file mode 100644 index 103fd11..0000000 --- a/examples/web/models/models_yaw_pitch_roll.data +++ /dev/null diff --git a/examples/web/models/models_yaw_pitch_roll.html b/examples/web/models/models_yaw_pitch_roll.html deleted file mode 100644 index c888261..0000000 --- a/examples/web/models/models_yaw_pitch_roll.html +++ /dev/null @@ -1 +0,0 @@ -<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib HTML5 GAME</title><meta content="raylib HTML5 GAME"name=title><meta content="New HTML5 videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib HTML5 GAME"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New HTML5 videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib HTML5 GAME"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New HTML5 videogame, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=)}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var t,i=/^((?!chrome|android).)*safari/i.test(navigator.userAgent),o=FS.readFile(e);t=i?new Blob([o.buffer],{type:"application/octet-stream"}):new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(t,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach(e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()}),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=models_yaw_pitch_roll.js async></script></body></html>
\ No newline at end of file diff --git a/examples/web/models/models_yaw_pitch_roll.js b/examples/web/models/models_yaw_pitch_roll.js deleted file mode 100644 index 66d2c56..0000000 --- a/examples/web/models/models_yaw_pitch_roll.js +++ /dev/null @@ -1 +0,0 @@ -var Module=typeof Module!=="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){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 location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}else{throw"using preloaded data can only be done on a web page or in a web worker"}var PACKAGE_NAME="models/models_yaw_pitch_roll.data";var REMOTE_PACKAGE_BASE="models_yaw_pitch_roll.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"];var PACKAGE_UUID=metadata["package_uuid"];function fetchRemotePackage(packageName,packageSize,callback,errback){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"]("/","resources",true,true);Module["FS_createPath"]("/resources","plane",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<files.length;++i){new DataRequest(files[i]["start"],files[i]["end"],files[i]["audio"]).open("GET",files[i]["filename"])}function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);DataRequest.prototype.byteArray=byteArray;var files=metadata["files"];for(var i=0;i<files.length;++i){DataRequest.prototype.requests[files[i].filename].onload()}Module["removeRunDependency"]("datafile_models/models_yaw_pitch_roll.data")}Module["addRunDependency"]("datafile_models/models_yaw_pitch_roll.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}};loadPackage({"files":[{"filename":"/resources/plane/plane.gltf","start":0,"end":5267,"audio":0},{"filename":"/resources/plane/plane_diffuse.png","start":5267,"end":828760,"audio":0}],"remote_package_size":828760,"package_uuid":"4fc7af9d-3f17-4850-ac4f-5ba6b2ae50cf"})})();var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;default:abort("invalid type for setValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var ALLOC_NORMAL=0;var ALLOC_STACK=1;function allocate(slab,allocator){var ret;if(allocator==ALLOC_STACK){ret=stackAlloc(slab.length)}else{ret=_malloc(slab.length)}if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heap[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heap[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heap[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heap[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||67108864;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});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();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function 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()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="models_yaw_pitch_roll.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["ae"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["de"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}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 PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");return function(){return crypto_module["randomBytes"](1)[0]}}catch(e){}}return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var 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.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(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;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc?Buffer.alloc(BUFSIZE):new Buffer(BUFSIZE);var bytesRead=0;try{bytesRead=nodeFS.readSync(process.stdin.fd,buf,0,BUFSIZE,null)}catch(e){if(e.toString().indexOf("EOF")!=-1)bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size<alignedSize)HEAP8[ptr+size++]=0;return ptr}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<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage: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;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path,opts){path=PATH_FS.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:function(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:function(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)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){err("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}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)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){err("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}},rmdir:function(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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readdir:function(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:function(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,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)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){err("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){err("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}},readlink:function(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:function(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:function(path){return FS.stat(path,true)},chmod:function(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:function(path,mode){FS.chmod(path,mode,true)},fchmod:function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:function(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:function(path,uid,gid){FS.chown(path,uid,gid,true)},fchown:function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:function(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:function(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:function(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:function(path,flags,mode,fd_start,fd_end){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){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},fd_start,fd_end);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;err("FS.trackingDelegate error on read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){err("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream},close:function(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:function(stream){return stream.fd===null},llseek:function(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:function(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:function(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;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){err("FS.trackingDelegate['onWriteToFile']('"+stream.path+"') threw an exception: "+e.message)}return bytesWritten},allocate:function(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:function(stream,address,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,address,length,position,prot,flags)},msync:function(stream,buffer,offset,length,mmapFlags){if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:function(stream){return 0},ioctl:function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:function(path,opts){opts=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:function(path,data,opts){opts=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:function(){return FS.currentPath},chdir:function(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:function(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:function(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:function(){return 0},write:function(stream,buffer,offset,length,pos){return 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 random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:function(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:function(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:function(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:function(){return stream.path}}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:function(){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:function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){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(function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init:function(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:function(){FS.init.initialized=false;var fflush=Module["_fflush"];if(fflush)fflush(0);for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:function(canRead,canWrite){var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:function(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:function(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:function(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:function(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:function(parent,name,data,canRead,canWrite,canOwn){var path=name?PATH.join2(typeof parent==="string"?parent:FS.getPath(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<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:function(parent,name,input,output){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:function(stream){stream.seekable=false},close:function(stream){if(output&&output.buffer&&output.buffer.length){output(10)}},read:function(stream,buffer,offset,length,pos){var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:function(obj){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:function(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=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);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<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size};node.stream_ops=stream_ops;return node},createPreloadedFile:function(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish){Browser.init();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)}var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,function(){if(onerror)onerror();removeRunDependency(dep)});handled=true}});if(!handled)finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){Browser.asyncLoad(url,function(byteArray){processData(byteArray)},onerror)}else{processData(url)}},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:function(){return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=function openRequest_onupgradeneeded(){out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)};openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=function putRequest_onsuccess(){ok++;if(ok+fail==total)finish()};putRequest.onerror=function putRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror},loadFilesFromDB:function(paths,onload,onerror){onload=onload||function(){};onerror=onerror||function(){};var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=function openRequest_onsuccess(){var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(function(path){var getRequest=files.get(path);getRequest.onsuccess=function getRequest_onsuccess(){if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()};getRequest.onerror=function getRequest_onerror(){fail++;if(ok+fail==total)finish()}});transaction.onerror=onerror};openRequest.onerror=onerror}};var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd,path,allowEmpty){if(path[0]==="/"){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);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+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret},doWritev:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function ___sys_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.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd);if(size<cwdLengthInBytes+1)return-68;stringToUTF8(cwd,buf,size);return buf}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_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:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}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.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function requestPointerLock(target){if(target.requestPointerLock){target.requestPointerLock()}else if(target.msRequestPointerLock){target.msRequestPointerLock()}else{if(document.body.requestPointerLock||document.body.msRequestPointerLock){return-3}else{return-1}}return 0}function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}function maybeCStringToJsString(cString){return cString>2?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 getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}function _emscripten_get_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i<e.axes.length;++i){HEAPF64[eventStruct+i*8+16>>3]=e.axes[i]}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i<e.buttons.length;++i){if(typeof e.buttons[i]==="object"){HEAP32[eventStruct+i*4+1040>>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 __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},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<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=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_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query");__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(ext.indexOf("lose_context")<0&&ext.indexOf("debug")<0){GLctx.getExtension(ext)}})},populateUniformTable:function(program){var p=GL.programs[program];var ptable=GL.programInfos[program]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1};var utable=ptable.uniforms;var numUniforms=GLctx.getProgramParameter(p,35718);for(var i=0;i<numUniforms;++i){var u=GLctx.getActiveUniform(p,i);var name=u.name;ptable.maxUniformLength=Math.max(ptable.maxUniformLength,name.length+1);if(name.slice(-1)=="]"){name=name.slice(0,name.lastIndexOf("["))}var loc=GLctx.getUniformLocation(p,name);if(loc){var id=GL.getNewId(GL.uniforms);utable[name]=[u.size,id];GL.uniforms[id]=loc;for(var j=1;j<u.size;++j){var n=name+"["+j+"]";loc=GLctx.getUniformLocation(p,n);id=GL.getNewId(GL.uniforms);GL.uniforms[id]=loc}}}}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.timerQueriesEXT[id])}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null;GL.programInfos[id]=null}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.timerQueriesEXT[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.timerQueriesEXT[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.timerQueriesEXT);query.name=id;GL.timerQueriesEXT[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __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 _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}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 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229: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<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>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 _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.timerQueriesEXT[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function jstoi_q(str){return parseInt(str)}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getUniform(GL.programs[program],GL.uniforms[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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}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<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>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 _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQueryEXT(id){var query=GL.timerQueriesEXT[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.timerQueriesEXT[id],target)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(GL.uniforms[location],v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(GL.uniforms[location],view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(GL.uniforms[location],view)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(GL.uniforms[location],view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(GL.uniforms[location],v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(GL.uniforms[location],view)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(GL.uniforms[location],view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(GL.uniforms[location],v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(GL.uniforms[location],view)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(GL.uniforms[location],view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(GL.uniforms[location],v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(GL.uniforms[location],view)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _emscripten_glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}function fillMouseEventData(eventStruct,e,target){var idx=eventStruct>>2;HEAP32[idx+0]=e.screenX;HEAP32[idx+1]=e.screenY;HEAP32[idx+2]=e.clientX;HEAP32[idx+3]=e.clientY;HEAP32[idx+4]=e.ctrlKey;HEAP32[idx+5]=e.shiftKey;HEAP32[idx+6]=e.altKey;HEAP32[idx+7]=e.metaKey;HEAP16[idx*2+16]=e.button;HEAP16[idx*2+17]=e.buttons;HEAP32[idx+9]=e["movementX"];HEAP32[idx+10]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+11]=e.clientX-rect.left;HEAP32[idx+12]=e.clientY-rect.top}function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=function(ev){var e=ev||event;fillMouseEventData(JSEvents.mouseEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}function fillFullscreenChangeEventData(eventStruct){var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}}function registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=function(ev){var e=ev||event;var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread);registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return 0}function registerGamepadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=function(ev){var e=ev||event;var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(wasmTable.get(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread);return 0}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread);return 0}function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(164);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;var idx=keyEventData>>2;HEAP32[idx+0]=e.location;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;HEAP32[idx+5]=e.repeat;HEAP32[idx+6]=e.charCode;HEAP32[idx+7]=e.keyCode;HEAP32[idx+8]=e.which;stringToUTF8(e.key||"",keyEventData+36,32);stringToUTF8(e.code||"",keyEventData+68,32);stringToUTF8(e.char||"",keyEventData+100,32);stringToUTF8(e.locale||"",keyEventData+132,32);if(wasmTable.get(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;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<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}try{func()}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;console.log("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?console.log("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject==="undefined"){console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=function img_onload(){assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Module["preloadedImages"][name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=function img_onerror(event){console.log("Image "+url+" could not be decoded");if(onerror)onerror()};img.src=url};Module["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;Module["preloadedAudios"][name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;Module["preloadedAudios"][name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;console.log("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<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=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;Browser.safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!=="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+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)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){if(ABORT)return;func()})},safeSetTimeout:function(func,timeout){noExitRuntime=true;return setTimeout(function(){if(ABORT)return;func()},timeout)},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},asyncLoad:function(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|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<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}},wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=Browser.nextWgetRequestHandle;Browser.nextWgetRequestHandle++;return handle}};function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else _emscripten_get_now=function(){return performance.now()};function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){noExitRuntime=true;assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)return;setTimeout(Browser.mainLoop.runner,0);return}if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop)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 _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1684);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i<et.length;++i){var touch=et[i];touches[touch.identifier]=touch}et=e.changedTouches;for(var i=0;i<et.length;++i){var touch=et[i];touch.isChanged=1;touches[touch.identifier]=touch}et=e.targetTouches;for(var i=0;i<et.length;++i){touches[et[i].identifier].onTarget=1}var touchEvent=JSEvents.touchEvent;var idx=touchEvent>>2;HEAP32[idx+1]=e.ctrlKey;HEAP32[idx+2]=e.shiftKey;HEAP32[idx+3]=e.altKey;HEAP32[idx+4]=e.metaKey;idx+=5;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){var 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>>2]=numTouches;if(wasmTable.get(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start<msecs){}}function _exit(status){exit(status)}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>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 instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glClear(x0){GLctx["clear"](x0)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}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;GL.programInfos[id]=null}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}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}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}var ptable=GL.programInfos[program];if(!ptable){GL.recordError(1282);return}if(pname==35716){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){HEAP32[p>>2]=ptable.maxUniformLength}else if(pname==35722){if(ptable.maxAttributeLength==-1){program=GL.programs[program];var numAttribs=GLctx.getProgramParameter(program,35721);ptable.maxAttributeLength=0;for(var i=0;i<numAttribs;++i){var activeAttrib=GLctx.getActiveAttrib(program,i);ptable.maxAttributeLength=Math.max(ptable.maxAttributeLength,activeAttrib.name.length+1)}}HEAP32[p>>2]=ptable.maxAttributeLength}else if(pname==35381){if(ptable.maxUniformBlockNameLength==-1){program=GL.programs[program];var numBlocks=GLctx.getProgramParameter(program,35382);ptable.maxUniformBlockNameLength=0;for(var i=0;i<numBlocks;++i){var activeBlockName=GLctx.getActiveUniformBlockName(program,i);ptable.maxUniformBlockNameLength=Math.max(ptable.maxUniformBlockNameLength,activeBlockName.length+1)}}HEAP32[p>>2]=ptable.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(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)}}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var 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=stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{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);return 0}GL.stringCache[name_]=ret;return ret}function _glGetUniformLocation(program,name){name=UTF8ToString(name);var arrayIndex=0;if(name[name.length-1]=="]"){var leftBrace=name.lastIndexOf("[");arrayIndex=name[leftBrace+1]!="]"?jstoi_q(name.slice(leftBrace+1)):0;name=name.slice(0,leftBrace)}var uniformInfo=GL.programInfos[program]&&GL.programInfos[program].uniforms[name];if(uniformInfo&&arrayIndex>=0&&arrayIndex<uniformInfo[0]){return uniformInfo[1]+arrayIndex}else{return-1}}function _glLinkProgram(program){GLctx.linkProgram(GL.programs[program]);GL.populateUniformTable(program)}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glReadPixels(x,y,width,height,format,type,pixels){var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glUniform1i(location,v0){GLctx.uniform1i(GL.uniforms[location],v0)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(GL.uniforms[location],v0,v1,v2,v3)}function _glUniformMatrix4fv(location,count,transpose,value){if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(GL.uniforms[location],!!transpose,view)}function _glUseProgram(program){GLctx.useProgram(GL.programs[program])}function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function GLFW_Window(id,width,height,title,monitor,share){this.id=id;this.x=0;this.y=0;this.fullscreen=false;this.storedX=0;this.storedY=0;this.width=width;this.height=height;this.storedWidth=width;this.storedHeight=height;this.title=title;this.monitor=monitor;this.share=share;this.attributes=GLFW.hints;this.inputModes={208897:212993,208898:0,208899:0};this.buttons=0;this.keys=new Array;this.domKeys=new Array;this.shouldClose=0;this.title=null;this.windowPosFunc=null;this.windowSizeFunc=null;this.windowCloseFunc=null;this.windowRefreshFunc=null;this.windowFocusFunc=null;this.windowIconifyFunc=null;this.framebufferSizeFunc=null;this.mouseButtonFunc=null;this.cursorPosFunc=null;this.cursorEnterFunc=null;this.scrollFunc=null;this.dropFunc=null;this.keyFunc=null;this.charFunc=null;this.userptr=null}var GLFW={WindowFromId:function(id){if(id<=0||!GLFW.windows)return null;return GLFW.windows[id-1]},joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0},DOMToGLFWKeyCode:function(keycode){switch(keycode){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}},getModBits:function(win){var mod=0;if(win.keys[340])mod|=1;if(win.keys[341])mod|=2;if(win.keys[342])mod|=4;if(win.keys[343])mod|=8;return mod},onKeyPress:function(event){if(!GLFW.active||!GLFW.active.charFunc)return;if(event.ctrlKey||event.metaKey)return;var charCode=event.charCode;if(charCode==0||charCode>=0&&charCode<=31)return;wasmTable.get(GLFW.active.charFunc)(GLFW.active.id,charCode)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;var repeat=status&&GLFW.active.keys[key];GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;if(repeat)status=2;wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id,key,keyCode,status,GLFW.getModBits(GLFW.active))},onGamepadConnected:function(event){GLFW.refreshJoysticks()},onGamepadDisconnected:function(event){GLFW.refreshJoysticks()},onKeydown:function(event){GLFW.onKeyChanged(event.keyCode,1);if(event.keyCode===8||event.keyCode===9){event.preventDefault()}},onKeyup:function(event){GLFW.onKeyChanged(event.keyCode,0)},onBlur:function(event){if(!GLFW.active)return;for(var i=0;i<GLFW.active.domKeys.length;++i){if(GLFW.active.domKeys[i]){GLFW.onKeyChanged(i,0)}}},onMousemove:function(event){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"]||!GLFW.active.cursorPosFunc)return;wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id,Browser.mouseX,Browser.mouseY)},DOMToGLFWMouseButton:function(event){var eventButton=event["button"];if(eventButton>0){if(eventButton==1){eventButton=2}else{eventButton=1}}return eventButton},onMouseenter:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,1)},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return;wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id,0)},onMouseButtonChanged:function(event,status){if(!GLFW.active)return;Browser.calculateMouseEvent(event);if(event.target!=Module["canvas"])return;var eventButton=GLFW.DOMToGLFWMouseButton(event);if(status==1){GLFW.active.buttons|=1<<eventButton;try{event.target.setCapture()}catch(e){}}else{GLFW.active.buttons&=~(1<<eventButton)}if(!GLFW.active.mouseButtonFunc)return;wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id,eventButton,status,GLFW.getModBits(GLFW.active))},onMouseButtonDown:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,1)},onMouseButtonUp:function(event){if(!GLFW.active)return;GLFW.onMouseButtonChanged(event,0)},onMouseWheel:function(event){var delta=-Browser.getMouseWheelDelta(event);delta=delta==0?0:delta>0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;var sx=0;var sy=0;if(event.type=="mousewheel"){sx=event.wheelDeltaX;sy=event.wheelDeltaY}else{sx=event.deltaX;sy=event.deltaY}wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id,sx,sy);event.preventDefault()},onCanvasResize:function(width,height){if(!GLFW.active)return;var resizeNeeded=true;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){GLFW.active.storedX=GLFW.active.x;GLFW.active.storedY=GLFW.active.y;GLFW.active.storedWidth=GLFW.active.width;GLFW.active.storedHeight=GLFW.active.height;GLFW.active.x=GLFW.active.y=0;GLFW.active.width=screen.width;GLFW.active.height=screen.height;GLFW.active.fullscreen=true}else if(GLFW.active.fullscreen==true){GLFW.active.x=GLFW.active.storedX;GLFW.active.y=GLFW.active.storedY;GLFW.active.width=GLFW.active.storedWidth;GLFW.active.height=GLFW.active.storedHeight;GLFW.active.fullscreen=false}else if(GLFW.active.width!=width||GLFW.active.height!=height){GLFW.active.width=width;GLFW.active.height=height}else{resizeNeeded=false}if(resizeNeeded){Browser.setCanvasSize(GLFW.active.width,GLFW.active.height,true);GLFW.onWindowSizeChanged();GLFW.onFramebufferSizeChanged()}},onWindowSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.windowSizeFunc)return;wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return;wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id,GLFW.active.width,GLFW.active.height)},getTime:function(){return _emscripten_get_now()/1e3},setWindowTitle:function(winid,title){var win=GLFW.WindowFromId(winid);if(!win)return;win.title=UTF8ToString(title);if(GLFW.active.id==win.id){document.title=win.title}},setJoystickCallback:function(cbfun){GLFW.joystickFunc=cbfun;GLFW.refreshJoysticks()},joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function(){if(Browser.mainLoop.currentFrameNumber!==GLFW.lastGamepadStateFrame||!Browser.mainLoop.currentFrameNumber){GLFW.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;GLFW.lastGamepadStateFrame=Browser.mainLoop.currentFrameNumber;for(var joy=0;joy<GLFW.lastGamepadState.length;++joy){var gamepad=GLFW.lastGamepadState[joy];if(gamepad){if(!GLFW.joys[joy]){console.log("glfw joystick connected:",joy);GLFW.joys[joy]={id:allocate(intArrayFromString(gamepad.id),ALLOC_NORMAL),buttonsCount:gamepad.buttons.length,axesCount:gamepad.axes.length,buttons:allocate(new Array(gamepad.buttons.length),ALLOC_NORMAL),axes:allocate(new Array(gamepad.axes.length*4),ALLOC_NORMAL)};if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262145)}}var data=GLFW.joys[joy];for(var i=0;i<gamepad.buttons.length;++i){setValue(data.buttons+i,gamepad.buttons[i].pressed,"i8")}for(var i=0;i<gamepad.axes.length;++i){setValue(data.axes+i*4,gamepad.axes[i],"float")}}else{if(GLFW.joys[joy]){console.log("glfw joystick disconnected",joy);if(GLFW.joystickFunc){wasmTable.get(GLFW.joystickFunc)(joy,262146)}_free(GLFW.joys[joy].id);_free(GLFW.joys[joy].buttons);_free(GLFW.joys[joy].axes);delete GLFW.joys[joy]}}}}},setKeyCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.keyFunc;win.keyFunc=cbfun;return prevcbfun},setCharCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.charFunc;win.charFunc=cbfun;return prevcbfun},setMouseButtonCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.mouseButtonFunc;win.mouseButtonFunc=cbfun;return prevcbfun},setCursorPosCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorPosFunc;win.cursorPosFunc=cbfun;return prevcbfun},setScrollCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.scrollFunc;win.scrollFunc=cbfun;return prevcbfun},setDropCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.dropFunc;win.dropFunc=cbfun;return prevcbfun},onDrop:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;if(!event.dataTransfer||!event.dataTransfer.files||event.dataTransfer.files.length==0)return;event.preventDefault();var filenames=allocate(new Array(event.dataTransfer.files.length*4),ALLOC_NORMAL);var filenamesArray=[];var count=event.dataTransfer.files.length;var written=0;var drop_dir=".glfw_dropped_files";FS.createPath("/",drop_dir);function save(file){var path="/"+drop_dir+"/"+file.name.replace(/\//g,"_");var reader=new FileReader;reader.onloadend=function(e){if(reader.readyState!=2){++written;console.log("failed to read dropped file: "+file.name+": "+reader.error);return}var data=e.target.result;FS.writeFile(path,new Uint8Array(data));if(++written===count){wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id,count,filenames);for(var i=0;i<filenamesArray.length;++i){_free(filenamesArray[i])}_free(filenames)}};reader.readAsArrayBuffer(file);var filename=allocate(intArrayFromString(path),ALLOC_NORMAL);filenamesArray.push(filename);setValue(filenames+i*4,filename,"i8*")}for(var i=0;i<count;++i){save(event.dataTransfer.files[i])}return false},onDragover:function(event){if(!GLFW.active||!GLFW.active.dropFunc)return;event.preventDefault();return false},setWindowSizeCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowSizeFunc;win.windowSizeFunc=cbfun;return prevcbfun},setWindowCloseCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowCloseFunc;win.windowCloseFunc=cbfun;return prevcbfun},setWindowRefreshCallback:function(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowRefreshFunc;win.windowRefreshFunc=cbfun;return prevcbfun},onClickRequestPointerLock:function(e){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();e.preventDefault()}},setInputMode:function(winid,mode,value){var win=GLFW.WindowFromId(winid);if(!win)return;switch(mode){case 208897:{switch(value){case 212993:{win.inputModes[mode]=value;Module["canvas"].removeEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].exitPointerLock();break}case 212994:{console.log("glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.");break}case 212995:{win.inputModes[mode]=value;Module["canvas"].addEventListener("click",GLFW.onClickRequestPointerLock,true);Module["canvas"].requestPointerLock();break}default:{console.log("glfwSetInputMode called with unknown value parameter value: "+value+".");break}}break}case 208898:{console.log("glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.");break}case 208899:{console.log("glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.");break}default:{console.log("glfwSetInputMode called with unknown mode parameter value: "+mode+".");break}}},getKey:function(winid,key){var win=GLFW.WindowFromId(winid);if(!win)return 0;return win.keys[key]},getMouseButton:function(winid,button){var win=GLFW.WindowFromId(winid);if(!win)return 0;return(win.buttons&1<<button)>0},getCursorPos:function(winid,x,y){setValue(x,Browser.mouseX,"double");setValue(y,Browser.mouseY,"double")},getMousePos:function(winid,x,y){setValue(x,Browser.mouseX,"i32");setValue(y,Browser.mouseY,"i32")},setCursorPos:function(winid,x,y){},getWindowPos:function(winid,x,y){var wx=0;var wy=0;var win=GLFW.WindowFromId(winid);if(win){wx=win.x;wy=win.y}if(x){setValue(x,wx,"i32")}if(y){setValue(y,wy,"i32")}},setWindowPos:function(winid,x,y){var win=GLFW.WindowFromId(winid);if(!win)return;win.x=x;win.y=y},getWindowSize:function(winid,width,height){var ww=0;var wh=0;var win=GLFW.WindowFromId(winid);if(win){ww=win.width;wh=win.height}if(width){setValue(width,ww,"i32")}if(height){setValue(height,wh,"i32")}},setWindowSize:function(winid,width,height){var win=GLFW.WindowFromId(winid);if(!win)return;if(GLFW.active.id==win.id){if(width==screen.width&&height==screen.height){Browser.requestFullscreen()}else{Browser.exitFullscreen();Browser.setCanvasSize(width,height);win.width=width;win.height=height}}if(!win.windowSizeFunc)return;wasmTable.get(win.windowSizeFunc)(win.id,width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i<GLFW.windows.length&&GLFW.windows[i]!==null;i++){}if(i>0)throw"glfwCreateWindow only supports one window at time currently";id=i+1;if(width<=0||height<=0)return 0;if(monitor){Browser.requestFullscreen()}else{Browser.setCanvasSize(width,height)}for(i=0;i<GLFW.windows.length&&GLFW.windows[i]==null;i++){}var useWebGL=GLFW.hints[139265]>0;if(i==GLFW.windows.length){if(useWebGL){var contextAttributes={antialias:GLFW.hints[135181]>1,depth:GLFW.hints[135173]>0,stencil:GLFW.hints[135174]>0,alpha:GLFW.hints[135172]>0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes)}else{Browser.init()}}if(!Module.ctx&&useWebGL)return 0;var win=new GLFW_Window(id,width,height,title,monitor,share);if(id-1==GLFW.windows.length){GLFW.windows.push(win)}else{GLFW.windows[id-1]=win}GLFW.active=win;return win.id},destroyWindow:function(winid){var win=GLFW.WindowFromId(winid);if(!win)return;if(win.windowCloseFunc)wasmTable.get(win.windowCloseFunc)(win.id);GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i<GLFW.windows.length;i++)if(GLFW.windows[i]!==null)return;Module.ctx=Browser.destroyContext(Module["canvas"],true,true)},swapBuffers:function(winid){},GLFW2ParamToGLFW3Param:function(param){var table={196609:0,196610:0,196611:0,196612:0,196613:0,196614:0,131073:0,131074:0,131075:0,131076:0,131077:135169,131078:135170,131079:135171,131080:135172,131081:135173,131082:135174,131083:135183,131084:135175,131085:135176,131086:135177,131087:135178,131088:135179,131089:135180,131090:0,131091:135181,131092:139266,131093:139267,131094:139270,131095:139271,131096:139272};return table[param]}};function _glfwCreateWindow(width,height,title,monitor,share){return GLFW.createWindow(width,height,title,monitor,share)}function _glfwDefaultWindowHints(){GLFW.hints=GLFW.defaultHints}function _glfwDestroyWindow(winid){return GLFW.destroyWindow(winid)}function _glfwGetPrimaryMonitor(){return 1}function _glfwGetTime(){return GLFW.getTime()-GLFW.initialTime}function _glfwGetVideoModes(monitor,count){setValue(count,0,"i32");return 0}function _glfwInit(){if(GLFW.windows)return 1;GLFW.initialTime=GLFW.getTime();GLFW.hints=GLFW.defaultHints;GLFW.windows=new Array;GLFW.active=null;window.addEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.addEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.addEventListener("keydown",GLFW.onKeydown,true);window.addEventListener("keypress",GLFW.onKeyPress,true);window.addEventListener("keyup",GLFW.onKeyup,true);window.addEventListener("blur",GLFW.onBlur,true);Module["canvas"].addEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].addEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].addEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].addEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].addEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].addEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].addEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].addEventListener("drop",GLFW.onDrop,true);Module["canvas"].addEventListener("dragover",GLFW.onDragover,true);Browser.resizeListeners.push(function(width,height){GLFW.onCanvasResize(width,height)});return 1}function _glfwMakeContextCurrent(winid){}function _glfwSetCharCallback(winid,cbfun){return GLFW.setCharCallback(winid,cbfun)}function _glfwSetCursorEnterCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.cursorEnterFunc;win.cursorEnterFunc=cbfun;return prevcbfun}function _glfwSetCursorPosCallback(winid,cbfun){return GLFW.setCursorPosCallback(winid,cbfun)}function _glfwSetDropCallback(winid,cbfun){return GLFW.setDropCallback(winid,cbfun)}function _glfwSetErrorCallback(cbfun){var prevcbfun=GLFW.errorFunc;GLFW.errorFunc=cbfun;return prevcbfun}function _glfwSetKeyCallback(winid,cbfun){return GLFW.setKeyCallback(winid,cbfun)}function _glfwSetMouseButtonCallback(winid,cbfun){return GLFW.setMouseButtonCallback(winid,cbfun)}function _glfwSetScrollCallback(winid,cbfun){return GLFW.setScrollCallback(winid,cbfun)}function _glfwSetWindowFocusCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowFocusFunc;win.windowFocusFunc=cbfun;return prevcbfun}function _glfwSetWindowIconifyCallback(winid,cbfun){var win=GLFW.WindowFromId(winid);if(!win)return null;var prevcbfun=win.windowIconifyFunc;win.windowIconifyFunc=cbfun;return prevcbfun}function _glfwSetWindowShouldClose(winid,value){var win=GLFW.WindowFromId(winid);if(!win)return;win.shouldClose=value}function _glfwSetWindowSizeCallback(winid,cbfun){return GLFW.setWindowSizeCallback(winid,cbfun)}function _glfwSwapBuffers(winid){GLFW.swapBuffers(winid)}function _glfwSwapInterval(interval){interval=Math.abs(interval);if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval)}function _glfwTerminate(){window.removeEventListener("gamepadconnected",GLFW.onGamepadConnected,true);window.removeEventListener("gamepaddisconnected",GLFW.onGamepadDisconnected,true);window.removeEventListener("keydown",GLFW.onKeydown,true);window.removeEventListener("keypress",GLFW.onKeyPress,true);window.removeEventListener("keyup",GLFW.onKeyup,true);window.removeEventListener("blur",GLFW.onBlur,true);Module["canvas"].removeEventListener("touchmove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("touchstart",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("touchcancel",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("touchend",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("mousemove",GLFW.onMousemove,true);Module["canvas"].removeEventListener("mousedown",GLFW.onMouseButtonDown,true);Module["canvas"].removeEventListener("mouseup",GLFW.onMouseButtonUp,true);Module["canvas"].removeEventListener("wheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mousewheel",GLFW.onMouseWheel,true);Module["canvas"].removeEventListener("mouseenter",GLFW.onMouseenter,true);Module["canvas"].removeEventListener("mouseleave",GLFW.onMouseleave,true);Module["canvas"].removeEventListener("drop",GLFW.onDrop,true);Module["canvas"].removeEventListener("dragover",GLFW.onDragover,true);Module["canvas"].width=Module["canvas"].height=1;GLFW.windows=null;GLFW.active=null}function _glfwWindowHint(target,hint){GLFW.hints[target]=hint}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}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)};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 asmLibraryArg={"a":___assert_fail,"Ta":___sys_chdir,"K":___sys_fcntl64,"Sa":___sys_getcwd,"Va":___sys_ioctl,"Xa":___sys_open,"Aa":_emscripten_exit_pointerlock,"$":_emscripten_get_element_css_size,"W":_emscripten_get_gamepad_status,"X":_emscripten_get_num_gamepads,"Jd":_emscripten_glActiveTexture,"Id":_emscripten_glAttachShader,"Zd":_emscripten_glBeginQueryEXT,"Hd":_emscripten_glBindAttribLocation,"Gd":_emscripten_glBindBuffer,"Fd":_emscripten_glBindFramebuffer,"Ed":_emscripten_glBindRenderbuffer,"Dd":_emscripten_glBindTexture,"Rd":_emscripten_glBindVertexArrayOES,"Cd":_emscripten_glBlendColor,"Bd":_emscripten_glBlendEquation,"Ad":_emscripten_glBlendEquationSeparate,"zd":_emscripten_glBlendFunc,"yd":_emscripten_glBlendFuncSeparate,"xd":_emscripten_glBufferData,"wd":_emscripten_glBufferSubData,"vd":_emscripten_glCheckFramebufferStatus,"ud":_emscripten_glClear,"td":_emscripten_glClearColor,"sd":_emscripten_glClearDepthf,"rd":_emscripten_glClearStencil,"qd":_emscripten_glColorMask,"pd":_emscripten_glCompileShader,"od":_emscripten_glCompressedTexImage2D,"nd":_emscripten_glCompressedTexSubImage2D,"md":_emscripten_glCopyTexImage2D,"ld":_emscripten_glCopyTexSubImage2D,"kd":_emscripten_glCreateProgram,"jd":_emscripten_glCreateShader,"id":_emscripten_glCullFace,"hd":_emscripten_glDeleteBuffers,"gd":_emscripten_glDeleteFramebuffers,"fd":_emscripten_glDeleteProgram,"S":_emscripten_glDeleteQueriesEXT,"ed":_emscripten_glDeleteRenderbuffers,"dd":_emscripten_glDeleteShader,"cd":_emscripten_glDeleteTextures,"Qd":_emscripten_glDeleteVertexArraysOES,"bd":_emscripten_glDepthFunc,"ad":_emscripten_glDepthMask,"$c":_emscripten_glDepthRangef,"_c":_emscripten_glDetachShader,"Zc":_emscripten_glDisable,"Yc":_emscripten_glDisableVertexAttribArray,"Xc":_emscripten_glDrawArrays,"Md":_emscripten_glDrawArraysInstancedANGLE,"Nd":_emscripten_glDrawBuffersWEBGL,"Wc":_emscripten_glDrawElements,"Ld":_emscripten_glDrawElementsInstancedANGLE,"Vc":_emscripten_glEnable,"Uc":_emscripten_glEnableVertexAttribArray,"Yd":_emscripten_glEndQueryEXT,"Tc":_emscripten_glFinish,"Sc":_emscripten_glFlush,"Rc":_emscripten_glFramebufferRenderbuffer,"Qc":_emscripten_glFramebufferTexture2D,"Pc":_emscripten_glFrontFace,"Oc":_emscripten_glGenBuffers,"Mc":_emscripten_glGenFramebuffers,"T":_emscripten_glGenQueriesEXT,"Lc":_emscripten_glGenRenderbuffers,"Kc":_emscripten_glGenTextures,"Pd":_emscripten_glGenVertexArraysOES,"Nc":_emscripten_glGenerateMipmap,"Ic":_emscripten_glGetActiveAttrib,"Hc":_emscripten_glGetActiveUniform,"Gc":_emscripten_glGetAttachedShaders,"Fc":_emscripten_glGetAttribLocation,"Ec":_emscripten_glGetBooleanv,"Dc":_emscripten_glGetBufferParameteriv,"Cc":_emscripten_glGetError,"Bc":_emscripten_glGetFloatv,"Ac":_emscripten_glGetFramebufferAttachmentParameteriv,"zc":_emscripten_glGetIntegerv,"xc":_emscripten_glGetProgramInfoLog,"yc":_emscripten_glGetProgramiv,"Td":_emscripten_glGetQueryObjecti64vEXT,"Vd":_emscripten_glGetQueryObjectivEXT,"Sd":_emscripten_glGetQueryObjectui64vEXT,"Ud":_emscripten_glGetQueryObjectuivEXT,"Wd":_emscripten_glGetQueryivEXT,"wc":_emscripten_glGetRenderbufferParameteriv,"uc":_emscripten_glGetShaderInfoLog,"tc":_emscripten_glGetShaderPrecisionFormat,"sc":_emscripten_glGetShaderSource,"vc":_emscripten_glGetShaderiv,"rc":_emscripten_glGetString,"qc":_emscripten_glGetTexParameterfv,"pc":_emscripten_glGetTexParameteriv,"mc":_emscripten_glGetUniformLocation,"oc":_emscripten_glGetUniformfv,"nc":_emscripten_glGetUniformiv,"jc":_emscripten_glGetVertexAttribPointerv,"lc":_emscripten_glGetVertexAttribfv,"kc":_emscripten_glGetVertexAttribiv,"ic":_emscripten_glHint,"hc":_emscripten_glIsBuffer,"gc":_emscripten_glIsEnabled,"fc":_emscripten_glIsFramebuffer,"ec":_emscripten_glIsProgram,"R":_emscripten_glIsQueryEXT,"dc":_emscripten_glIsRenderbuffer,"cc":_emscripten_glIsShader,"bc":_emscripten_glIsTexture,"Od":_emscripten_glIsVertexArrayOES,"ac":_emscripten_glLineWidth,"$b":_emscripten_glLinkProgram,"_b":_emscripten_glPixelStorei,"Zb":_emscripten_glPolygonOffset,"Xd":_emscripten_glQueryCounterEXT,"Yb":_emscripten_glReadPixels,"Xb":_emscripten_glReleaseShaderCompiler,"Vb":_emscripten_glRenderbufferStorage,"Ub":_emscripten_glSampleCoverage,"Tb":_emscripten_glScissor,"Sb":_emscripten_glShaderBinary,"Rb":_emscripten_glShaderSource,"Qb":_emscripten_glStencilFunc,"Pb":_emscripten_glStencilFuncSeparate,"Ob":_emscripten_glStencilMask,"Nb":_emscripten_glStencilMaskSeparate,"Mb":_emscripten_glStencilOp,"Kb":_emscripten_glStencilOpSeparate,"Jb":_emscripten_glTexImage2D,"Ib":_emscripten_glTexParameterf,"Hb":_emscripten_glTexParameterfv,"Gb":_emscripten_glTexParameteri,"Fb":_emscripten_glTexParameteriv,"Eb":_emscripten_glTexSubImage2D,"Db":_emscripten_glUniform1f,"Cb":_emscripten_glUniform1fv,"Bb":_emscripten_glUniform1i,"zb":_emscripten_glUniform1iv,"yb":_emscripten_glUniform2f,"xb":_emscripten_glUniform2fv,"wb":_emscripten_glUniform2i,"vb":_emscripten_glUniform2iv,"ub":_emscripten_glUniform3f,"tb":_emscripten_glUniform3fv,"sb":_emscripten_glUniform3i,"rb":_emscripten_glUniform3iv,"qb":_emscripten_glUniform4f,"ob":_emscripten_glUniform4fv,"nb":_emscripten_glUniform4i,"mb":_emscripten_glUniform4iv,"lb":_emscripten_glUniformMatrix2fv,"kb":_emscripten_glUniformMatrix3fv,"jb":_emscripten_glUniformMatrix4fv,"ib":_emscripten_glUseProgram,"hb":_emscripten_glValidateProgram,"gb":_emscripten_glVertexAttrib1f,"fb":_emscripten_glVertexAttrib1fv,"db":_emscripten_glVertexAttrib2f,"cb":_emscripten_glVertexAttrib2fv,"bb":_emscripten_glVertexAttrib3f,"ab":_emscripten_glVertexAttrib3fv,"$a":_emscripten_glVertexAttrib4f,"_a":_emscripten_glVertexAttrib4fv,"Kd":_emscripten_glVertexAttribDivisorANGLE,"Za":_emscripten_glVertexAttribPointer,"Ya":_emscripten_glViewport,"Pa":_emscripten_memcpy_big,"Qa":_emscripten_resize_heap,"x":_emscripten_run_script,"Y":_emscripten_sample_gamepad_data,"xa":_emscripten_set_click_callback_on_thread,"za":_emscripten_set_fullscreenchange_callback_on_thread,"sa":_emscripten_set_gamepadconnected_callback_on_thread,"ra":_emscripten_set_gamepaddisconnected_callback_on_thread,"ya":_emscripten_set_keydown_callback_on_thread,"$d":_emscripten_set_main_loop,"ta":_emscripten_set_touchcancel_callback_on_thread,"va":_emscripten_set_touchend_callback_on_thread,"ua":_emscripten_set_touchmove_callback_on_thread,"wa":_emscripten_set_touchstart_callback_on_thread,"Ra":_emscripten_thread_sleep,"U":_exit,"L":_fd_close,"Ua":_fd_read,"Na":_fd_seek,"J":_fd_write,"p":_glActiveTexture,"C":_glAttachShader,"k":_glBindAttribLocation,"b":_glBindBuffer,"i":_glBindTexture,"Lb":_glBlendFunc,"e":_glBufferData,"v":_glBufferSubData,"M":_glClear,"N":_glClearColor,"eb":_glClearDepthf,"Fa":_glCompileShader,"La":_glCompressedTexImage2D,"Da":_glCreateProgram,"Ha":_glCreateShader,"Ab":_glCullFace,"m":_glDeleteBuffers,"F":_glDeleteProgram,"G":_glDeleteShader,"I":_glDeleteTextures,"Wb":_glDepthFunc,"H":_glDetachShader,"O":_glDisable,"h":_glDisableVertexAttribArray,"Q":_glDrawArrays,"P":_glDrawElements,"w":_glEnable,"c":_glEnableVertexAttribArray,"pb":_glFrontFace,"f":_glGenBuffers,"Oa":_glGenTextures,"u":_glGetAttribLocation,"Jc":_glGetFloatv,"Ba":_glGetProgramInfoLog,"E":_glGetProgramiv,"Ea":_glGetShaderInfoLog,"D":_glGetShaderiv,"n":_glGetString,"t":_glGetUniformLocation,"Ca":_glLinkProgram,"Wa":_glPixelStorei,"Ia":_glReadPixels,"Ga":_glShaderSource,"Ma":_glTexImage2D,"o":_glTexParameteri,"y":_glUniform1i,"q":_glUniform4f,"r":_glUniformMatrix4fv,"l":_glUseProgram,"Ja":_glVertexAttrib2f,"Ka":_glVertexAttrib3f,"s":_glVertexAttrib4f,"d":_glVertexAttribPointer,"_d":_glViewport,"A":_glfwCreateWindow,"oa":_glfwDefaultWindowHints,"_":_glfwDestroyWindow,"B":_glfwGetPrimaryMonitor,"j":_glfwGetTime,"na":_glfwGetVideoModes,"pa":_glfwInit,"ca":_glfwMakeContextCurrent,"ha":_glfwSetCharCallback,"da":_glfwSetCursorEnterCallback,"fa":_glfwSetCursorPosCallback,"ja":_glfwSetDropCallback,"qa":_glfwSetErrorCallback,"ia":_glfwSetKeyCallback,"ga":_glfwSetMouseButtonCallback,"ea":_glfwSetScrollCallback,"ka":_glfwSetWindowFocusCallback,"la":_glfwSetWindowIconifyCallback,"V":_glfwSetWindowShouldClose,"ma":_glfwSetWindowSizeCallback,"Z":_glfwSwapBuffers,"ba":_glfwSwapInterval,"z":_glfwTerminate,"g":_glfwWindowHint,"aa":_time};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["be"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["ce"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ee"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["fe"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["ge"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["he"]).apply(null,arguments)};Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];var argc=0;var argv=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/examples/web/models/models_yaw_pitch_roll.png b/examples/web/models/models_yaw_pitch_roll.png Binary files differdeleted file mode 100644 index 8b36fe3..0000000 --- a/examples/web/models/models_yaw_pitch_roll.png +++ /dev/null diff --git a/examples/web/models/models_yaw_pitch_roll.wasm b/examples/web/models/models_yaw_pitch_roll.wasm Binary files differdeleted file mode 100644 index 9930ad5..0000000 --- a/examples/web/models/models_yaw_pitch_roll.wasm +++ /dev/null diff --git a/examples/web/models/resources/billboard.png b/examples/web/models/resources/billboard.png Binary files differdeleted file mode 100644 index 8c99118..0000000 --- a/examples/web/models/resources/billboard.png +++ /dev/null diff --git a/examples/web/models/resources/cubicmap.png b/examples/web/models/resources/cubicmap.png Binary files differdeleted file mode 100644 index 392dbf2..0000000 --- a/examples/web/models/resources/cubicmap.png +++ /dev/null diff --git a/examples/web/models/resources/cubicmap_atlas.png b/examples/web/models/resources/cubicmap_atlas.png Binary files differdeleted file mode 100644 index 9fc404a..0000000 --- a/examples/web/models/resources/cubicmap_atlas.png +++ /dev/null diff --git a/examples/web/models/resources/dresden_square_1k.hdr b/examples/web/models/resources/dresden_square_1k.hdr Binary files differdeleted file mode 100644 index b6d0e77..0000000 --- a/examples/web/models/resources/dresden_square_1k.hdr +++ /dev/null diff --git a/examples/web/models/resources/dresden_square_2k.hdr b/examples/web/models/resources/dresden_square_2k.hdr Binary files differdeleted file mode 100644 index 60b4a4c..0000000 --- a/examples/web/models/resources/dresden_square_2k.hdr +++ /dev/null diff --git a/examples/web/models/resources/guy/guy.blend b/examples/web/models/resources/guy/guy.blend Binary files differdeleted file mode 100644 index 3880467..0000000 --- a/examples/web/models/resources/guy/guy.blend +++ /dev/null diff --git a/examples/web/models/resources/guy/guy.iqm b/examples/web/models/resources/guy/guy.iqm Binary files differdeleted file mode 100644 index 36bed5e..0000000 --- a/examples/web/models/resources/guy/guy.iqm +++ /dev/null diff --git a/examples/web/models/resources/guy/guyanim.iqm b/examples/web/models/resources/guy/guyanim.iqm Binary files differdeleted file mode 100644 index 824a68a..0000000 --- a/examples/web/models/resources/guy/guyanim.iqm +++ /dev/null diff --git a/examples/web/models/resources/guy/guytex.png b/examples/web/models/resources/guy/guytex.png Binary files differdeleted file mode 100644 index 05a58ee..0000000 --- a/examples/web/models/resources/guy/guytex.png +++ /dev/null diff --git a/examples/web/models/resources/heightmap.png b/examples/web/models/resources/heightmap.png Binary files differdeleted file mode 100644 index 474db87..0000000 --- a/examples/web/models/resources/heightmap.png +++ /dev/null diff --git a/examples/web/models/resources/models/LICENSE b/examples/web/models/resources/models/LICENSE deleted file mode 100644 index 39cdd61..0000000 --- a/examples/web/models/resources/models/LICENSE +++ /dev/null @@ -1,4 +0,0 @@ -Medieval City models and textures have been created by Alberto Cano, -and licensed as Creative Commons Attribution-NonCommercial 4.0. - -Check for details: https://creativecommons.org/licenses/by-nc/4.0/legalcode diff --git a/examples/web/models/resources/models/bridge.obj b/examples/web/models/resources/models/bridge.obj deleted file mode 100644 index ad283f1..0000000 --- a/examples/web/models/resources/models/bridge.obj +++ /dev/null @@ -1,1725 +0,0 @@ -# (c) 2018 Medieval Assets Pack by Alberto Cano -# Licensed as Creative Commons Attribution-NonCommercial 4.0 - -# -# object bridge -# - -v 3.9982 -0.0023 11.9925 -v 4.0712 0.0000 6.5164 -v 3.9982 2.2042 6.5164 -v 3.9982 1.3553 8.7417 -v 4.1679 -0.0000 4.0663 -v 4.1413 1.0540 4.2689 -v 4.0712 2.8371 4.8031 -v 3.9982 2.2699 8.7359 -v 3.0685 2.2722 8.7359 -v 3.0685 0.9146 11.9866 -v 3.9982 0.9123 11.9866 -v 4.3287 2.2355 3.4001 -v 4.3287 3.3078 3.4952 -v 0.0000 0.0000 4.0663 -v 0.0000 1.4511 3.3640 -v 4.3287 1.4511 3.3640 -v 4.4633 3.0558 2.1675 -v 4.4633 3.7271 2.1035 -v 0.0000 2.4236 2.1918 -v 4.4633 2.4236 2.1918 -v 4.5231 3.3391 0.8674 -v 4.5231 3.8066 0.8674 -v 0.0000 2.7841 0.8674 -v 4.5231 2.7841 0.8674 -v 3.0685 2.2065 6.5164 -v 3.1415 2.8394 4.8031 -v 0.0000 2.8394 4.8031 -v 0.0000 2.2065 6.5164 -v 3.0685 1.3576 8.7417 -v 0.0000 1.3576 8.7417 -v 3.3990 3.3101 3.4952 -v 0.0000 3.3101 3.4952 -v 3.5336 3.7294 2.1035 -v 0.0000 3.7294 2.1035 -v 3.5934 3.8066 0.8674 -v 0.0000 3.8066 0.8674 -v 4.5862 3.4521 0.0062 -v 4.5862 3.8557 0.0062 -v 0.0000 2.9214 0.0062 -v 4.5862 2.9214 0.0062 -v 3.6565 3.8557 0.0062 -v 0.0000 3.8557 0.0062 -v 3.9982 1.3576 -8.7294 -v 3.9982 2.2065 -6.5040 -v 3.9982 0.0000 -6.5040 -v 3.9982 -0.0674 -11.9801 -v 4.0712 2.8394 -4.7908 -v 4.0712 1.0546 -4.2566 -v 4.0712 0.0000 -4.0540 -v 3.9982 0.8472 -11.9860 -v 3.0685 0.8472 -11.9860 -v 3.0685 2.2722 -8.7353 -v 3.9982 2.2722 -8.7353 -v 4.3287 3.3101 -3.4828 -v 4.3287 2.2361 -3.3877 -v 4.3287 1.4511 -3.3516 -v 0.0000 1.4511 -3.3516 -v 0.0000 0.0000 -4.0540 -v 4.4633 3.7294 -2.0911 -v 4.4633 3.0564 -2.1551 -v 4.4633 2.4236 -2.1794 -v 0.0000 2.4236 -2.1794 -v 4.5231 3.8066 -0.8551 -v 4.5231 3.3391 -0.8551 -v 4.5231 2.7841 -0.8551 -v 0.0000 2.7841 -0.8551 -v 0.0000 2.8394 -4.7908 -v 3.1415 2.8394 -4.7908 -v 3.0685 2.2065 -6.5040 -v 0.0000 2.2065 -6.5040 -v 3.0685 1.3576 -8.7294 -v 0.0000 1.3576 -8.7294 -v 0.0000 3.3101 -3.4828 -v 3.3990 3.3101 -3.4828 -v 0.0000 3.7294 -2.0911 -v 3.5336 3.7294 -2.0911 -v 0.0000 3.8066 -0.8551 -v 3.5934 3.8066 -0.8551 -v 0.0000 0.0000 11.9925 -v 3.0685 0.0000 11.9925 -v 3.9982 3.1188 6.5105 -v 4.0712 3.7517 4.7973 -v 3.1415 3.7540 4.7973 -v 3.0685 3.1211 6.5105 -v 4.3287 4.2224 3.4893 -v 3.3990 4.2247 3.4893 -v 4.4633 4.7189 1.8730 -v 3.5336 4.7213 1.8730 -v 4.5231 4.7213 0.8616 -v 3.5934 4.7213 0.8616 -v 4.5862 4.7213 0.0003 -v 3.6565 4.7213 0.0003 -v 3.0685 -0.0674 -11.9801 -v 0.0000 0.0000 -11.9801 -v 4.0712 3.7540 -4.7966 -v 3.9982 3.1211 -6.5099 -v 3.0685 3.1211 -6.5099 -v 3.1415 3.7540 -4.7966 -v 4.3287 4.2247 -3.4887 -v 3.3990 4.2247 -3.4887 -v 4.4633 4.7213 -1.8724 -v 3.5336 4.7213 -1.8724 -v 4.5231 4.7213 -0.8610 -v 3.5934 4.7213 -0.8610 -v 4.0914 1.3553 8.7417 -v 4.0914 2.2042 6.5164 -v 4.0914 3.1188 6.5105 -v 4.0914 2.2699 8.7359 -v 4.1643 2.8371 4.8031 -v 4.1643 3.7517 4.7973 -v 4.4218 3.3078 3.4952 -v 4.4218 4.2224 3.4893 -v 4.5564 3.7271 2.1035 -v 4.5564 4.7189 1.8730 -v 4.6162 3.8066 0.8674 -v 4.6163 4.7213 0.8616 -v 4.6793 3.8557 0.0062 -v 4.6793 4.7213 0.0003 -v 4.6162 3.8066 -0.8551 -v 4.6163 4.7213 -0.8610 -v 4.5564 3.7294 -2.0911 -v 4.5564 4.7213 -1.8724 -v 4.4218 3.3101 -3.4828 -v 4.4218 4.2247 -3.4887 -v 4.1643 2.8394 -4.7908 -v 4.1643 3.7540 -4.7966 -v 4.0914 2.2065 -6.5040 -v 4.0914 3.1211 -6.5099 -v 4.0914 1.3576 -8.7294 -v 4.0914 2.2722 -8.7353 -v 4.0913 -0.0674 -11.9801 -v 4.0914 0.8472 -11.9860 -v 3.9982 -0.0713 -13.3621 -v 3.0685 -0.0713 -13.3621 -v 3.0685 0.8434 -13.3680 -v 3.9982 0.8434 -13.3680 -v 3.0686 0.0039 13.3744 -v 3.9982 0.0016 13.3744 -v 3.9982 0.9162 13.3686 -v 3.0686 0.9185 13.3686 -v 4.0913 -0.0023 11.9925 -v 4.0914 0.9123 11.9866 -v 3.0685 1.8566 -11.9925 -v 3.9982 1.8566 -11.9925 -v 3.9982 1.8527 -13.3744 -v 3.0685 1.8527 -13.3744 -v 4.0913 -0.0713 -13.3621 -v 4.0914 0.8434 -13.3680 -v 4.0914 0.9162 13.3686 -v 4.0914 0.0016 13.3744 -v 4.0022 1.9216 11.9801 -v 3.0726 1.9239 11.9801 -v 3.0726 1.9278 13.3621 -v 4.0022 1.9255 13.3621 -v 4.3309 1.0532 -4.2736 -v 4.5388 2.3452 -3.4047 -v 4.5388 1.1804 -3.3687 -v 4.3102 -0.0008 -3.9892 -v 4.7395 3.1981 -2.1722 -v 4.7395 2.2978 -2.1965 -v 4.8125 3.4962 -0.8721 -v 4.8125 2.7824 -0.8721 -v 4.8215 3.5568 -0.0066 -v 4.8215 2.8673 -0.0066 -v 3.6673 0.0018 -3.9977 -v 3.8281 1.1836 -3.3772 -v 3.9627 2.3550 -2.2050 -v 4.0226 2.7850 -0.8806 -v 4.0856 2.8699 -0.0066 -v 4.5862 3.5594 -0.0066 -v 4.5231 3.4988 -0.8806 -v 4.4633 3.1460 -2.1807 -v 4.3287 2.3484 -3.4132 -v 4.0712 1.0557 -4.2821 -v 4.1503 -0.0013 -5.7369 -v 4.2574 1.0789 -5.6478 -v 3.9982 1.0815 -5.6563 -v 4.3309 1.0532 4.2604 -v 4.3102 -0.0008 3.9760 -v 4.5388 1.1804 3.3555 -v 4.5388 2.3452 3.3915 -v 4.7395 2.2978 2.1833 -v 4.7395 3.1981 2.1590 -v 4.8125 2.7824 0.8589 -v 4.8125 3.4962 0.8589 -v 3.6673 0.0018 3.9845 -v 3.8281 1.1836 3.3640 -v 3.9627 2.3550 2.1918 -v 4.0226 2.7850 0.8674 -v 4.5231 3.4988 0.8674 -v 4.4633 3.1460 2.1675 -v 4.3287 2.3484 3.4001 -v 4.1413 1.0557 4.2689 -v 4.2574 1.0789 5.6346 -v 4.1503 -0.0013 5.7237 -v 4.0712 1.0815 5.6346 -v 4.1764 4.0031 5.7280 -v 2.7107 4.0031 5.7280 -v 2.7107 4.0031 7.1178 -v 4.1764 4.0031 7.1178 -v 4.1764 0.0000 5.7280 -v 2.6101 0.0000 5.7280 -v 3.0500 2.0015 5.5403 -v 4.3606 2.0015 5.5403 -v 3.0500 2.0015 6.7032 -v 2.6101 0.0000 7.1178 -v 4.1764 0.0000 7.1178 -v 4.3606 2.0015 6.7032 -v 4.1764 4.0031 -5.7156 -v 4.1764 4.0031 -7.1054 -v 2.7107 4.0031 -7.1054 -v 2.7107 4.0031 -5.7156 -v 4.1764 -0.0000 -5.7156 -v 4.3606 2.0015 -5.5280 -v 3.0500 2.0015 -5.5280 -v 2.6101 -0.0000 -5.7156 -v 3.0500 2.0015 -6.6909 -v 2.6101 -0.0000 -7.1054 -v 4.3606 2.0015 -6.6909 -v 4.1764 -0.0000 -7.1054 -v -3.9982 -0.0023 11.9925 -v -3.9982 1.3553 8.7417 -v -3.9982 2.2042 6.5164 -v -4.0712 0.0000 6.5164 -v -4.0712 2.8371 4.8031 -v -4.1413 1.0540 4.2689 -v -4.1679 -0.0000 4.0663 -v -3.9982 2.2699 8.7359 -v -3.9982 0.9123 11.9866 -v -3.0685 0.9146 11.9866 -v -3.0685 2.2722 8.7359 -v -4.3287 3.3078 3.4952 -v -4.3287 2.2355 3.4001 -v -4.3287 1.4511 3.3640 -v -4.4633 3.7271 2.1035 -v -4.4633 3.0558 2.1675 -v -4.4633 2.4236 2.1918 -v -4.5231 3.8066 0.8674 -v -4.5231 3.3391 0.8674 -v -4.5231 2.7841 0.8674 -v -3.1415 2.8394 4.8031 -v -3.0685 2.2065 6.5164 -v -3.0685 1.3576 8.7417 -v -3.3990 3.3101 3.4952 -v -3.5336 3.7294 2.1035 -v -3.5934 3.8066 0.8674 -v -4.5862 3.8557 0.0062 -v -4.5862 3.4521 0.0062 -v -4.5862 2.9214 0.0062 -v -3.6565 3.8557 0.0062 -v -3.9982 1.3576 -8.7294 -v -3.9982 -0.0674 -11.9801 -v -3.9982 0.0000 -6.5040 -v -3.9982 2.2065 -6.5040 -v -4.0712 0.0000 -4.0540 -v -4.0712 1.0546 -4.2566 -v -4.0712 2.8394 -4.7908 -v -3.9982 0.8472 -11.9860 -v -3.9982 2.2722 -8.7353 -v -3.0685 2.2722 -8.7353 -v -3.0685 0.8472 -11.9860 -v -4.3287 2.2361 -3.3877 -v -4.3287 3.3101 -3.4828 -v -4.3287 1.4511 -3.3516 -v -4.4633 3.0564 -2.1551 -v -4.4633 3.7294 -2.0911 -v -4.4633 2.4236 -2.1794 -v -4.5231 3.3391 -0.8551 -v -4.5231 3.8066 -0.8551 -v -4.5231 2.7841 -0.8551 -v -3.0685 2.2065 -6.5040 -v -3.1415 2.8394 -4.7908 -v -3.0685 1.3576 -8.7294 -v -3.3990 3.3101 -3.4828 -v -3.5336 3.7294 -2.0911 -v -3.5934 3.8066 -0.8551 -v -3.0685 0.0000 11.9925 -v -3.1415 3.7540 4.7973 -v -4.0712 3.7517 4.7973 -v -3.9982 3.1188 6.5105 -v -3.0685 3.1211 6.5105 -v -3.3990 4.2247 3.4893 -v -4.3287 4.2224 3.4893 -v -3.5336 4.7213 1.8730 -v -4.4633 4.7189 1.8730 -v -3.5934 4.7213 0.8616 -v -4.5231 4.7213 0.8616 -v -3.6565 4.7213 0.0003 -v -4.5862 4.7213 0.0003 -v -3.0685 -0.0674 -11.9801 -v -3.0685 3.1211 -6.5099 -v -3.9982 3.1211 -6.5099 -v -4.0712 3.7540 -4.7966 -v -3.1415 3.7540 -4.7966 -v -4.3287 4.2247 -3.4887 -v -3.3990 4.2247 -3.4887 -v -4.4633 4.7213 -1.8724 -v -3.5336 4.7213 -1.8724 -v -4.5231 4.7213 -0.8610 -v -3.5934 4.7213 -0.8610 -v -4.0914 1.3553 8.7417 -v -4.0914 2.2699 8.7359 -v -4.0914 3.1188 6.5105 -v -4.0914 2.2042 6.5164 -v -4.1643 3.7517 4.7973 -v -4.1643 2.8371 4.8031 -v -4.4218 4.2224 3.4893 -v -4.4218 3.3078 3.4952 -v -4.5564 4.7189 1.8730 -v -4.5564 3.7271 2.1035 -v -4.6162 4.7213 0.8616 -v -4.6162 3.8066 0.8674 -v -4.6793 4.7213 0.0003 -v -4.6793 3.8557 0.0062 -v -4.6162 4.7213 -0.8610 -v -4.6162 3.8066 -0.8551 -v -4.5564 4.7213 -1.8724 -v -4.5564 3.7294 -2.0911 -v -4.4218 4.2247 -3.4887 -v -4.4218 3.3101 -3.4828 -v -4.1643 3.7540 -4.7966 -v -4.1643 2.8394 -4.7908 -v -4.0914 3.1211 -6.5099 -v -4.0914 2.2065 -6.5040 -v -4.0914 2.2722 -8.7353 -v -4.0914 1.3576 -8.7294 -v -4.0914 0.8472 -11.9860 -v -4.0913 -0.0674 -11.9801 -v -3.9982 -0.0713 -13.3621 -v -3.9982 0.8434 -13.3680 -v -3.0685 0.8434 -13.3680 -v -3.0685 -0.0713 -13.3621 -v -3.0686 0.0039 13.3744 -v -3.0686 0.9185 13.3686 -v -3.9982 0.9162 13.3686 -v -3.9982 0.0016 13.3744 -v -4.0913 -0.0023 11.9925 -v -4.0914 0.9123 11.9866 -v -3.0685 1.8566 -11.9925 -v -3.0685 1.8527 -13.3744 -v -3.9982 1.8527 -13.3744 -v -3.9982 1.8566 -11.9925 -v -4.0914 0.8434 -13.3680 -v -4.0913 -0.0713 -13.3621 -v -4.0914 0.0016 13.3744 -v -4.0914 0.9162 13.3686 -v -4.0022 1.9216 11.9801 -v -4.0022 1.9255 13.3621 -v -3.0726 1.9278 13.3621 -v -3.0726 1.9239 11.9801 -v -4.3309 1.0532 -4.2736 -v -4.3102 -0.0008 -3.9892 -v -4.5388 1.1804 -3.3687 -v -4.5388 2.3452 -3.4047 -v -4.7395 2.2978 -2.1965 -v -4.7395 3.1981 -2.1722 -v -4.8125 2.7824 -0.8721 -v -4.8125 3.4962 -0.8721 -v -4.8215 2.8673 -0.0066 -v -4.8215 3.5568 -0.0066 -v -3.6673 0.0018 -3.9977 -v -3.8281 1.1836 -3.3772 -v -3.9627 2.3550 -2.2050 -v -4.0226 2.7850 -0.8806 -v -4.0856 2.8699 -0.0066 -v -4.5862 3.5594 -0.0066 -v -4.5231 3.4988 -0.8806 -v -4.4633 3.1460 -2.1807 -v -4.3287 2.3484 -3.4132 -v -4.0712 1.0557 -4.2821 -v -4.2574 1.0789 -5.6478 -v -4.1503 -0.0013 -5.7369 -v -3.9982 1.0815 -5.6563 -v -4.3309 1.0532 4.2604 -v -4.5388 2.3452 3.3915 -v -4.5388 1.1804 3.3555 -v -4.3102 -0.0008 3.9760 -v -4.7395 3.1981 2.1590 -v -4.7395 2.2978 2.1833 -v -4.8125 3.4962 0.8589 -v -4.8125 2.7824 0.8589 -v -3.6673 0.0018 3.9845 -v -3.8281 1.1836 3.3640 -v -3.9627 2.3550 2.1918 -v -4.0226 2.7850 0.8674 -v -4.5231 3.4988 0.8674 -v -4.4633 3.1460 2.1675 -v -4.3287 2.3484 3.4001 -v -4.1413 1.0557 4.2689 -v -4.1503 -0.0013 5.7237 -v -4.2574 1.0789 5.6346 -v -4.0712 1.0815 5.6346 -v -4.1764 4.0031 5.7280 -v -4.1764 4.0031 7.1178 -v -2.7107 4.0031 7.1178 -v -2.7107 4.0031 5.7280 -v -4.1764 0.0000 5.7280 -v -4.3606 2.0015 5.5403 -v -3.0500 2.0015 5.5403 -v -2.6101 0.0000 5.7280 -v -3.0500 2.0015 6.7032 -v -2.6101 0.0000 7.1178 -v -4.3606 2.0015 6.7032 -v -4.1764 0.0000 7.1178 -v -4.1764 4.0031 -5.7156 -v -2.7107 4.0031 -5.7156 -v -2.7107 4.0031 -7.1054 -v -4.1764 4.0031 -7.1054 -v -4.1764 -0.0000 -5.7156 -v -2.6101 -0.0000 -5.7156 -v -3.0500 2.0015 -5.5280 -v -4.3606 2.0015 -5.5280 -v -3.0500 2.0015 -6.6909 -v -2.6101 -0.0000 -7.1054 -v -4.1764 -0.0000 -7.1054 -v -4.3606 2.0015 -6.6909 -# 416 vertices - -vn 0.9998 0.0187 0.0075 -vn 1.0000 -0.0000 -0.0000 -vn 0.9996 0.0187 0.0223 -vn 0.9995 0.0081 0.0318 -vn 0.9995 0.0135 0.0290 -vn 0.0041 0.9228 0.3854 -vn 0.9942 -0.0101 0.1073 -vn 0.9942 -0.0095 0.1071 -vn 0.0000 -0.4357 -0.9001 -vn -0.0000 -0.4357 -0.9001 -vn 0.9983 -0.0052 0.0581 -vn 0.9984 0.0054 0.0561 -vn -0.0000 -0.7696 -0.6385 -vn 0.0000 -0.7696 -0.6385 -vn 0.9996 0.0025 0.0265 -vn 0.9996 0.0000 0.0273 -vn 0.0000 -0.9649 -0.2627 -vn -0.0000 -0.9649 -0.2627 -vn 0.0000 0.9380 0.3465 -vn 0.0000 0.9343 0.3564 -vn -0.0000 0.9409 0.3386 -vn 0.0000 0.9409 0.3386 -vn -0.0000 0.9575 0.2885 -vn -0.0000 0.9981 0.0624 -vn 0.9991 0.0000 0.0413 -vn 0.0000 -0.9875 -0.1574 -vn 0.0000 0.9984 0.0568 -vn -0.0000 0.9984 0.0568 -vn 1.0000 0.0000 -0.0000 -vn 0.9997 -0.0065 -0.0216 -vn 0.9998 -0.0039 -0.0203 -vn 0.9999 0.0000 -0.0168 -vn -0.0000 0.9159 -0.4015 -vn 0.9942 -0.0095 -0.1071 -vn 0.9924 -0.0353 -0.1180 -vn 0.0000 -0.4357 0.9001 -vn 0.9984 0.0053 -0.0561 -vn 0.9983 -0.0051 -0.0581 -vn 0.0000 -0.7696 0.6385 -vn 0.9996 0.0000 -0.0273 -vn 0.9996 0.0025 -0.0265 -vn 0.0000 -0.9649 0.2627 -vn -0.0000 0.9380 -0.3465 -vn 0.0000 0.9380 -0.3465 -vn 0.0000 0.9343 -0.3564 -vn -0.0000 0.9343 -0.3564 -vn -0.0000 0.9409 -0.3386 -vn 0.0000 0.9575 -0.2885 -vn -0.0000 0.9575 -0.2885 -vn 0.0000 0.9981 -0.0624 -vn 0.9991 0.0000 -0.0413 -vn 0.0000 -0.9875 0.1574 -vn 0.0000 0.9984 -0.0568 -vn 0.0000 0.9228 0.3854 -vn 0.0041 0.9380 0.3466 -vn 0.0041 0.9343 0.3564 -vn 0.0042 0.9408 0.3390 -vn 0.0042 0.9558 0.2938 -vn -0.0000 1.0000 0.0023 -vn 0.0044 1.0000 0.0001 -vn 0.0000 1.0000 -0.0000 -vn -0.0000 1.0000 -0.0000 -vn 0.0359 0.9222 -0.3851 -vn -0.0000 0.9559 -0.2937 -vn -0.0000 1.0000 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.9997 0.0002 0.0241 -vn 0.9939 0.0007 0.1107 -vn 0.9982 0.0136 0.0586 -vn 0.9989 0.0003 0.0470 -vn 0.9996 0.0002 0.0273 -vn 0.9994 0.0078 0.0334 -vn 0.9991 0.0003 0.0413 -vn 0.9991 -0.0003 -0.0413 -vn 0.9996 0.0061 -0.0277 -vn 0.9994 -0.0002 -0.0334 -vn 0.9985 -0.0004 -0.0544 -vn 0.9987 0.0111 -0.0503 -vn 0.9939 -0.0007 -0.1102 -vn 0.9997 -0.0002 -0.0240 -vn 1.0000 -0.0000 0.0000 -vn 0.0000 -0.0064 -1.0000 -vn -1.0000 0.0000 -0.0000 -vn -1.0000 0.0000 0.0000 -vn -0.9997 0.0002 0.0240 -vn -0.9939 0.0007 0.1102 -vn -0.9982 -0.0129 0.0584 -vn -0.9989 0.0003 0.0468 -vn -0.9996 0.0002 0.0273 -vn -0.9994 -0.0074 0.0334 -vn -0.9991 0.0003 0.0413 -vn -0.9991 -0.0003 -0.0413 -vn -0.9996 -0.0064 -0.0277 -vn -0.9994 -0.0002 -0.0334 -vn -0.9985 -0.0004 -0.0546 -vn -0.9987 -0.0117 -0.0505 -vn -0.9939 -0.0007 -0.1107 -vn -0.9997 -0.0002 -0.0241 -vn 0.0000 0.0064 1.0000 -vn 0.0000 1.0000 -0.0028 -vn 0.0044 1.0000 -0.0028 -vn -0.0000 0.0064 1.0000 -vn -0.0000 -0.0064 -1.0000 -vn -1.0000 0.0022 0.0000 -vn 1.0000 -0.0023 -0.0000 -vn -0.0000 -0.9343 -0.3564 -vn 0.0000 -0.9380 -0.3465 -vn -0.0000 -0.9380 -0.3465 -vn -0.0000 -0.9409 -0.3386 -vn 0.0000 -0.9409 -0.3386 -vn -0.0000 -0.9575 -0.2885 -vn -0.0000 -0.9979 -0.0642 -vn -0.0000 -0.9984 -0.0568 -vn -0.0000 -0.9984 0.0568 -vn -0.0000 -0.9981 0.0624 -vn -0.0000 -0.9575 0.2885 -vn -0.0000 -0.9409 0.3386 -vn -0.0000 -0.9380 0.3465 -vn -0.0000 -0.9343 0.3564 -vn -0.0000 -0.9159 0.4015 -vn 0.0000 0.9159 -0.4015 -vn 0.0000 0.9409 -0.3386 -vn 0.0000 0.9559 -0.2937 -vn 0.0000 1.0000 0.0023 -vn 0.0000 0.9559 0.2937 -vn -0.0000 -0.9228 -0.3854 -vn 0.9918 -0.0040 -0.1281 -vn 0.9915 -0.0440 -0.1224 -vn 0.9956 0.0025 -0.0932 -vn 0.9956 -0.0029 -0.0934 -vn 0.9995 0.0000 -0.0317 -vn 0.9995 0.0008 -0.0314 -vn 1.0000 0.0000 -0.0059 -vn -0.0241 -0.4629 0.8861 -vn -0.0225 -0.4634 0.8859 -vn -0.0204 -0.7227 0.6909 -vn -0.1050 -0.7000 0.7064 -vn -0.1280 -0.9301 0.3443 -vn -0.0114 -0.9510 0.3091 -vn -0.0076 -0.9952 0.0976 -vn -0.0062 -0.9953 0.0969 -vn 0.0194 0.9974 -0.0699 -vn 0.0271 0.9742 -0.2243 -vn -0.2950 0.9241 -0.2431 -vn -0.2404 0.8084 -0.5373 -vn 0.0616 0.8362 -0.5450 -vn 0.0745 0.5518 -0.8306 -vn 0.0580 0.5524 -0.8315 -vn 0.9973 -0.0516 -0.0515 -vn 0.9993 -0.0193 -0.0305 -vn 0.0166 0.9997 0.0182 -vn 0.9915 -0.0440 0.1224 -vn 0.9918 -0.0040 0.1281 -vn 0.9956 -0.0029 0.0934 -vn 0.9956 0.0025 0.0932 -vn 0.9995 0.0008 0.0314 -vn 0.9995 0.0000 0.0317 -vn 1.0000 0.0000 0.0059 -vn -0.0225 -0.4634 -0.8859 -vn -0.0241 -0.4629 -0.8861 -vn -0.1050 -0.7000 -0.7064 -vn -0.0204 -0.7227 -0.6909 -vn -0.0114 -0.9510 -0.3091 -vn -0.1280 -0.9301 -0.3443 -vn -0.0062 -0.9953 -0.0969 -vn -0.0076 -0.9952 -0.0976 -vn 0.0194 0.9974 0.0699 -vn -0.2950 0.9241 0.2431 -vn 0.0271 0.9742 0.2243 -vn 0.0617 0.8362 0.5450 -vn -0.2404 0.8084 0.5373 -vn 0.0794 0.5516 0.8303 -vn 0.0745 0.5518 0.8306 -vn 0.9993 -0.0193 0.0305 -vn 0.9973 -0.0516 0.0515 -vn 0.0227 0.9996 -0.0182 -vn 0.0246 0.9995 -0.0180 -vn 0.0000 -0.0933 -0.9956 -vn 0.0000 0.0933 -0.9956 -vn -0.9955 -0.0952 -0.0000 -vn 0.0000 0.2028 0.9792 -vn 0.0000 -0.2028 0.9792 -vn 0.9987 -0.0519 0.0000 -vn 0.9987 -0.0519 -0.0000 -vn 0.9987 0.0519 -0.0000 -vn 0.0000 -0.0933 0.9956 -vn 0.0000 0.0933 0.9956 -vn 0.0000 0.2028 -0.9792 -vn 0.0000 -0.2028 -0.9792 -vn -0.9998 0.0187 0.0075 -vn -0.9995 0.0135 0.0290 -vn -0.9995 0.0081 0.0318 -vn -0.9996 0.0187 0.0223 -vn -0.0041 0.9228 0.3854 -vn -0.9942 -0.0095 0.1071 -vn -0.9942 -0.0101 0.1073 -vn -0.9984 0.0054 0.0561 -vn -0.9983 -0.0052 0.0581 -vn -0.9996 0.0000 0.0273 -vn -0.9996 0.0025 0.0265 -vn -0.0000 0.9380 0.3465 -vn -0.0000 0.9343 0.3564 -vn 0.0000 0.9575 0.2885 -vn 0.0000 0.9981 0.0624 -vn -0.9991 0.0000 0.0413 -vn -0.0000 -0.9875 -0.1574 -vn -0.9999 0.0000 -0.0168 -vn -0.9998 -0.0039 -0.0203 -vn -0.9997 -0.0065 -0.0216 -vn -0.9924 -0.0353 -0.1180 -vn -0.9942 -0.0095 -0.1071 -vn -0.0000 -0.4357 0.9001 -vn -0.9983 -0.0051 -0.0581 -vn -0.9984 0.0053 -0.0561 -vn -0.0000 -0.7696 0.6385 -vn -0.9996 0.0025 -0.0265 -vn -0.9996 0.0000 -0.0273 -vn -0.0000 -0.9649 0.2627 -vn -0.9991 0.0000 -0.0413 -vn -0.0000 -0.9875 0.1574 -vn -0.0000 0.9228 0.3854 -vn -0.0041 0.9380 0.3466 -vn -0.0041 0.9343 0.3564 -vn -0.0042 0.9408 0.3390 -vn -0.0042 0.9558 0.2938 -vn -0.0044 1.0000 0.0001 -vn -0.0359 0.9222 -0.3851 -vn -1.0000 -0.0000 -0.0000 -vn -0.9997 0.0002 0.0241 -vn -0.9939 0.0007 0.1107 -vn -0.9989 0.0003 0.0470 -vn -0.9982 0.0136 0.0586 -vn -0.9994 0.0078 0.0334 -vn -0.9996 0.0061 -0.0277 -vn -0.9987 0.0111 -0.0503 -vn -0.9985 -0.0004 -0.0544 -vn -0.9939 -0.0007 -0.1102 -vn -0.9997 -0.0002 -0.0240 -vn -1.0000 -0.0000 0.0000 -vn 0.9997 0.0002 0.0240 -vn 0.9939 0.0007 0.1102 -vn 0.9989 0.0003 0.0468 -vn 0.9982 -0.0129 0.0584 -vn 0.9994 -0.0074 0.0334 -vn 0.9996 -0.0064 -0.0277 -vn 0.9987 -0.0117 -0.0505 -vn 0.9985 -0.0004 -0.0546 -vn 0.9939 -0.0007 -0.1107 -vn 0.9997 -0.0002 -0.0241 -vn -0.0044 1.0000 -0.0028 -vn 1.0000 0.0000 0.0000 -vn 1.0000 0.0023 -0.0000 -vn -1.0000 -0.0023 0.0000 -vn 0.0000 -0.9343 -0.3564 -vn 0.0000 -0.9575 -0.2885 -vn 0.0000 -0.9979 -0.0642 -vn 0.0000 -0.9984 -0.0568 -vn 0.0000 -0.9984 0.0568 -vn 0.0000 -0.9981 0.0624 -vn 0.0000 -0.9575 0.2885 -vn 0.0000 -0.9409 0.3386 -vn 0.0000 -0.9380 0.3465 -vn 0.0000 -0.9343 0.3564 -vn 0.0000 -0.9159 0.4015 -vn -0.0000 1.0000 -0.0028 -vn -0.0000 0.9559 0.2937 -vn 0.0000 -0.9228 -0.3854 -vn -0.9915 -0.0440 -0.1224 -vn -0.9918 -0.0040 -0.1281 -vn -0.9956 -0.0029 -0.0934 -vn -0.9956 0.0025 -0.0932 -vn -0.9995 0.0008 -0.0314 -vn -0.9995 0.0000 -0.0317 -vn -1.0000 0.0000 -0.0059 -vn 0.0225 -0.4634 0.8859 -vn 0.0241 -0.4629 0.8861 -vn 0.1050 -0.7000 0.7064 -vn 0.0204 -0.7227 0.6909 -vn 0.0114 -0.9510 0.3091 -vn 0.1280 -0.9301 0.3443 -vn 0.0062 -0.9953 0.0969 -vn 0.0076 -0.9952 0.0976 -vn -0.0194 0.9974 -0.0699 -vn 0.2950 0.9240 -0.2431 -vn -0.0271 0.9742 -0.2243 -vn -0.0616 0.8362 -0.5450 -vn 0.2404 0.8084 -0.5373 -vn -0.0580 0.5524 -0.8315 -vn -0.0745 0.5518 -0.8306 -vn -0.9993 -0.0193 -0.0305 -vn -0.9973 -0.0516 -0.0515 -vn -0.0166 0.9997 0.0182 -vn -0.9918 -0.0040 0.1281 -vn -0.9915 -0.0440 0.1224 -vn -0.9956 0.0025 0.0932 -vn -0.9956 -0.0029 0.0934 -vn -0.9995 0.0000 0.0317 -vn -0.9995 0.0008 0.0314 -vn -1.0000 0.0000 0.0059 -vn 0.0241 -0.4629 -0.8861 -vn 0.0225 -0.4634 -0.8859 -vn 0.0204 -0.7227 -0.6909 -vn 0.1050 -0.7000 -0.7064 -vn 0.1280 -0.9301 -0.3443 -vn 0.0114 -0.9510 -0.3091 -vn 0.0076 -0.9952 -0.0976 -vn 0.0062 -0.9953 -0.0969 -vn -0.0194 0.9974 0.0699 -vn -0.0271 0.9742 0.2243 -vn 0.2950 0.9241 0.2431 -vn 0.2404 0.8084 0.5373 -vn -0.0617 0.8362 0.5450 -vn -0.0745 0.5518 0.8306 -vn -0.0794 0.5516 0.8303 -vn -0.9973 -0.0516 0.0515 -vn -0.9993 -0.0193 0.0305 -vn -0.0246 0.9995 -0.0180 -vn -0.0227 0.9996 -0.0182 -vn 0.9955 -0.0952 -0.0000 -vn -0.9987 -0.0519 -0.0000 -vn -0.9987 -0.0519 0.0000 -vn -0.9987 0.0519 -0.0000 -# 322 vertex normals - -vt 0.0055 0.7726 0.0000 -vt 0.2148 0.7727 0.0000 -vt 0.2147 0.8639 0.0000 -vt 0.1297 0.8288 0.0000 -vt 0.3085 0.7727 0.0000 -vt 0.3007 0.8163 0.0000 -vt 0.2802 0.8900 0.0000 -vt 0.1697 0.7009 0.0000 -vt 0.1692 0.6636 0.0000 -vt 0.0461 0.6643 0.0000 -vt 0.0466 0.7016 0.0000 -vt 0.3350 0.8652 0.0000 -vt 0.3315 0.9095 0.0000 -vt 0.3723 0.8137 0.0000 -vt 0.3999 0.8136 0.0000 -vt 0.4003 0.8870 0.0000 -vt 0.3726 0.8844 0.0000 -vt 0.3826 0.8991 0.0000 -vt 0.3850 0.9268 0.0000 -vt 0.4256 0.8135 0.0000 -vt 0.4259 0.8892 0.0000 -vt 0.4323 0.9108 0.0000 -vt 0.4323 0.9301 0.0000 -vt 0.4509 0.8134 0.0000 -vt 0.4513 0.8901 0.0000 -vt 0.7184 0.6451 0.0000 -vt 0.6550 0.6472 0.0000 -vt 0.6551 0.5407 0.0000 -vt 0.7182 0.5411 0.0000 -vt 0.8032 0.6449 0.0000 -vt 0.8031 0.5410 0.0000 -vt 0.6057 0.6561 0.0000 -vt 0.6059 0.5409 0.0000 -vt 0.5512 0.6609 0.0000 -vt 0.5513 0.5412 0.0000 -vt 0.5132 0.6630 0.0000 -vt 0.5135 0.5412 0.0000 -vt 0.4653 0.9155 0.0000 -vt 0.4653 0.9321 0.0000 -vt 0.4646 0.8133 0.0000 -vt 0.4649 0.8911 0.0000 -vt 0.4819 0.6653 0.0000 -vt 0.4828 0.5414 0.0000 -vt 0.8014 0.8288 0.0000 -vt 0.7163 0.8639 0.0000 -vt 0.7163 0.7727 0.0000 -vt 0.9256 0.7699 0.0000 -vt 0.6506 0.8901 0.0000 -vt 0.6305 0.8163 0.0000 -vt 0.6227 0.7727 0.0000 -vt 0.9143 0.7019 0.0000 -vt 0.9142 0.6646 0.0000 -vt 0.7893 0.6638 0.0000 -vt 0.7895 0.7012 0.0000 -vt 0.5992 0.9096 0.0000 -vt 0.5956 0.8652 0.0000 -vt 0.5572 0.8820 0.0000 -vt 0.5296 0.8865 0.0000 -vt 0.5293 0.8131 0.0000 -vt 0.5569 0.8130 0.0000 -vt 0.5457 0.9269 0.0000 -vt 0.5481 0.8991 0.0000 -vt 0.5041 0.8889 0.0000 -vt 0.5037 0.8132 0.0000 -vt 0.4984 0.9301 0.0000 -vt 0.4984 0.9108 0.0000 -vt 0.4787 0.8900 0.0000 -vt 0.4783 0.8133 0.0000 -vt 0.3106 0.5420 0.0000 -vt 0.3104 0.6485 0.0000 -vt 0.2476 0.6456 0.0000 -vt 0.2475 0.5417 0.0000 -vt 0.1628 0.6457 0.0000 -vt 0.1626 0.5418 0.0000 -vt 0.3598 0.5418 0.0000 -vt 0.3596 0.6570 0.0000 -vt 0.4144 0.5416 0.0000 -vt 0.4143 0.6613 0.0000 -vt 0.4522 0.5415 0.0000 -vt 0.4519 0.6633 0.0000 -vt 0.9501 0.5408 0.0000 -vt 0.9502 0.6448 0.0000 -vt 0.2519 0.7005 0.0000 -vt 0.3148 0.7031 0.0000 -vt 0.3144 0.6658 0.0000 -vt 0.2515 0.6631 0.0000 -vt 0.3626 0.7133 0.0000 -vt 0.3622 0.6759 0.0000 -vt 0.4197 0.7185 0.0000 -vt 0.4194 0.6812 0.0000 -vt 0.4522 0.7209 0.0000 -vt 0.4518 0.6836 0.0000 -vt 0.4798 0.7234 0.0000 -vt 0.4795 0.6861 0.0000 -vt 0.0142 0.6459 0.0000 -vt 0.0160 0.5419 0.0000 -vt 0.6444 0.7033 0.0000 -vt 0.7072 0.7007 0.0000 -vt 0.7071 0.6634 0.0000 -vt 0.6442 0.6660 0.0000 -vt 0.5967 0.7134 0.0000 -vt 0.5965 0.6761 0.0000 -vt 0.5397 0.7186 0.0000 -vt 0.5395 0.6813 0.0000 -vt 0.5073 0.7209 0.0000 -vt 0.5071 0.6836 0.0000 -vt 0.1376 0.8475 0.0000 -vt 0.2215 0.8831 0.0000 -vt 0.2222 0.9224 0.0000 -vt 0.1383 0.8869 0.0000 -vt 0.2862 0.9096 0.0000 -vt 0.2869 0.9489 0.0000 -vt 0.3369 0.9293 0.0000 -vt 0.3376 0.9686 0.0000 -vt 0.3898 0.9467 0.0000 -vt 0.3989 0.9893 0.0000 -vt 0.4364 0.9496 0.0000 -vt 0.4370 0.9890 0.0000 -vt 0.4689 0.9514 0.0000 -vt 0.4695 0.9886 0.0000 -vt 0.5015 0.9489 0.0000 -vt 0.5014 0.9883 0.0000 -vt 0.5485 0.9461 0.0000 -vt 0.5386 0.9886 0.0000 -vt 0.6024 0.9297 0.0000 -vt 0.6000 0.9690 0.0000 -vt 0.6546 0.9116 0.0000 -vt 0.6514 0.9508 0.0000 -vt 0.7217 0.8877 0.0000 -vt 0.7179 0.9270 0.0000 -vt 0.8091 0.8562 0.0000 -vt 0.8049 0.8954 0.0000 -vt 0.9376 0.8026 0.0000 -vt 0.9333 0.8418 0.0000 -vt 0.1175 0.2765 0.0000 -vt 0.1172 0.2184 0.0000 -vt 0.0528 0.2186 0.0000 -vt 0.0531 0.2766 0.0000 -vt 0.0149 0.7906 0.0000 -vt 0.0156 0.8299 0.0000 -vt 0.1171 0.1374 0.0000 -vt 0.0526 0.1376 0.0000 -vt 0.1279 0.1213 0.0000 -vt 0.0641 0.1216 0.0000 -vt 0.0639 0.0185 0.0000 -vt 0.1276 0.0182 0.0000 -vt 0.0533 0.3601 0.0000 -vt 0.1177 0.3599 0.0000 -vt 0.1175 0.2816 0.0000 -vt 0.0531 0.2818 0.0000 -vt 0.5233 0.0680 0.0000 -vt 0.5233 0.0146 0.0000 -vt 0.4613 0.0144 0.0000 -vt 0.4612 0.0679 0.0000 -vt 0.5230 0.2785 0.0000 -vt 0.5231 0.1970 0.0000 -vt 0.4611 0.1969 0.0000 -vt 0.4610 0.2783 0.0000 -vt 0.5232 0.1436 0.0000 -vt 0.4612 0.1434 0.0000 -vt 0.1397 0.8448 0.0000 -vt 0.2234 0.8802 0.0000 -vt 0.2877 0.9066 0.0000 -vt 0.3381 0.9262 0.0000 -vt 0.3905 0.9436 0.0000 -vt 0.4365 0.9465 0.0000 -vt 0.4689 0.9482 0.0000 -vt 0.5015 0.9458 0.0000 -vt 0.5478 0.9429 0.0000 -vt 0.6014 0.9266 0.0000 -vt 0.6534 0.9085 0.0000 -vt 0.7201 0.8848 0.0000 -vt 0.8072 0.8534 0.0000 -vt 0.9356 0.7998 0.0000 -vt 0.0479 0.2818 0.0000 -vt 0.0481 0.3601 0.0000 -vt 0.7895 0.7049 0.0000 -vt 0.9144 0.7056 0.0000 -vt 0.7072 0.7044 0.0000 -vt 0.6444 0.7070 0.0000 -vt 0.5967 0.7172 0.0000 -vt 0.5397 0.7224 0.0000 -vt 0.5073 0.7247 0.0000 -vt 0.4798 0.7272 0.0000 -vt 0.4522 0.7246 0.0000 -vt 0.4198 0.7222 0.0000 -vt 0.3627 0.7170 0.0000 -vt 0.3149 0.7068 0.0000 -vt 0.2520 0.7042 0.0000 -vt 0.1697 0.7047 0.0000 -vt 0.0466 0.7053 0.0000 -vt 0.0171 0.7879 0.0000 -vt 0.2846 0.0635 0.0000 -vt 0.3350 0.1014 0.0000 -vt 0.2869 0.0984 0.0000 -vt 0.2402 0.0697 0.0000 -vt 0.3662 0.1505 0.0000 -vt 0.3291 0.1463 0.0000 -vt 0.3743 0.1993 0.0000 -vt 0.3449 0.1967 0.0000 -vt 0.3741 0.2313 0.0000 -vt 0.3456 0.2288 0.0000 -vt 0.9520 0.3232 0.0000 -vt 0.9511 0.3553 0.0000 -vt 0.8725 0.3642 0.0000 -vt 0.8736 0.3287 0.0000 -vt 0.7872 0.3718 0.0000 -vt 0.7856 0.3328 0.0000 -vt 0.7246 0.3759 0.0000 -vt 0.7245 0.3364 0.0000 -vt 0.6884 0.3767 0.0000 -vt 0.6880 0.3399 0.0000 -vt 0.9747 0.5705 0.0000 -vt 0.9874 0.5713 0.0000 -vt 0.9855 0.6101 0.0000 -vt 0.9700 0.6102 0.0000 -vt 0.9823 0.6717 0.0000 -vt 0.9673 0.6738 0.0000 -vt 0.9698 0.7513 0.0000 -vt 0.9586 0.7517 0.0000 -vt 0.9671 0.8478 0.0000 -vt 0.9532 0.8490 0.0000 -vt 0.2458 0.0054 0.0000 -vt 0.2902 0.0130 0.0000 -vt 0.9667 0.9098 0.0000 -vt 0.9528 0.9110 0.0000 -vt 0.2569 0.3810 0.0000 -vt 0.2142 0.3671 0.0000 -vt 0.2651 0.3469 0.0000 -vt 0.3131 0.3524 0.0000 -vt 0.3151 0.3071 0.0000 -vt 0.3523 0.3095 0.0000 -vt 0.3393 0.2602 0.0000 -vt 0.3688 0.2628 0.0000 -vt 0.4237 0.3291 0.0000 -vt 0.5022 0.3328 0.0000 -vt 0.5041 0.3683 0.0000 -vt 0.4253 0.3612 0.0000 -vt 0.5903 0.3350 0.0000 -vt 0.5895 0.3740 0.0000 -vt 0.6514 0.3372 0.0000 -vt 0.6522 0.3767 0.0000 -vt 0.9748 0.5306 0.0000 -vt 0.9902 0.5325 0.0000 -vt 0.9790 0.4672 0.0000 -vt 0.9938 0.4708 0.0000 -vt 0.9769 0.3892 0.0000 -vt 0.9881 0.3902 0.0000 -vt 0.9762 0.2924 0.0000 -vt 0.9863 0.2934 0.0000 -vt 0.2535 0.4317 0.0000 -vt 0.2085 0.4314 0.0000 -vt 0.9763 0.2308 0.0000 -vt 0.9863 0.2315 0.0000 -vt 0.9781 0.1864 0.0000 -vt 0.8088 0.1864 0.0000 -vt 0.8088 0.0170 0.0000 -vt 0.9781 0.0170 0.0000 -vt 0.7807 0.0185 0.0000 -vt 0.6794 0.0178 0.0000 -vt 0.7064 0.1575 0.0000 -vt 0.7912 0.1581 0.0000 -vt 0.6831 0.2968 0.0000 -vt 0.7779 0.2975 0.0000 -vt 0.6498 0.1633 0.0000 -vt 0.5711 0.1633 0.0000 -vt 0.5431 0.3053 0.0000 -vt 0.6371 0.3053 0.0000 -vt 0.5431 0.0214 0.0000 -vt 0.6371 0.0214 0.0000 -vt 0.3995 0.7402 0.0000 -vt 0.3720 0.7430 0.0000 -vt 0.4252 0.7378 0.0000 -vt 0.4506 0.7367 0.0000 -vt 0.6552 0.4343 0.0000 -vt 0.7180 0.4371 0.0000 -vt 0.8029 0.4370 0.0000 -vt 0.6060 0.4257 0.0000 -vt 0.5513 0.4214 0.0000 -vt 0.5137 0.4195 0.0000 -vt 0.4643 0.7356 0.0000 -vt 0.4838 0.4175 0.0000 -vt 0.5566 0.7439 0.0000 -vt 0.5290 0.7397 0.0000 -vt 0.5033 0.7375 0.0000 -vt 0.4780 0.7366 0.0000 -vt 0.2473 0.4377 0.0000 -vt 0.3107 0.4356 0.0000 -vt 0.1624 0.4378 0.0000 -vt 0.3600 0.4267 0.0000 -vt 0.4145 0.4219 0.0000 -vt 0.4525 0.4198 0.0000 -vt 0.9499 0.4368 0.0000 -vt 0.0139 0.4380 0.0000 -# 294 texture coords - -o bridge -g bridge -f 1/1/1 2/2/1 3/3/1 -f 3/3/2 4/4/2 1/1/2 -f 3/3/3 2/2/3 5/5/3 -f 3/3/4 5/5/4 6/6/4 -f 3/3/5 6/6/5 7/7/5 -f 8/8/6 9/9/6 10/10/6 -f 10/10/6 11/11/6 8/8/6 -f 7/7/7 6/6/7 12/12/7 -f 12/12/8 13/13/8 7/7/8 -f 14/14/9 15/15/9 16/16/9 -f 16/16/10 5/17/10 14/14/10 -f 13/13/11 12/12/11 17/18/11 -f 17/18/12 18/19/12 13/13/12 -f 15/15/13 19/20/13 20/21/13 -f 20/21/14 16/16/14 15/15/14 -f 18/19/15 17/18/15 21/22/15 -f 21/22/16 22/23/16 18/19/16 -f 19/20/17 23/24/17 24/25/17 -f 24/25/18 20/21/18 19/20/18 -f 25/26/19 26/27/19 27/28/19 -f 27/28/19 28/29/19 25/26/19 -f 29/30/20 25/26/20 28/29/20 -f 28/29/20 30/31/20 29/30/20 -f 26/27/21 31/32/21 32/33/21 -f 32/33/22 27/28/22 26/27/22 -f 31/32/23 33/34/23 34/35/23 -f 34/35/23 32/33/23 31/32/23 -f 33/34/24 35/36/24 36/37/24 -f 36/37/24 34/35/24 33/34/24 -f 22/23/25 21/22/25 37/38/25 -f 37/38/25 38/39/25 22/23/25 -f 23/24/26 39/40/26 40/41/26 -f 40/41/26 24/25/26 23/24/26 -f 35/36/27 41/42/27 42/43/27 -f 42/43/28 36/37/28 35/36/28 -f 43/44/29 44/45/29 45/46/29 -f 45/46/29 46/47/29 43/44/29 -f 44/45/30 47/48/30 48/49/30 -f 44/45/31 48/49/31 49/50/31 -f 44/45/32 49/50/32 45/46/32 -f 50/51/33 51/52/33 52/53/33 -f 52/53/33 53/54/33 50/51/33 -f 47/48/34 54/55/34 55/56/34 -f 55/56/35 48/49/35 47/48/35 -f 49/57/36 56/58/36 57/59/36 -f 57/59/36 58/60/36 49/57/36 -f 54/55/37 59/61/37 60/62/37 -f 60/62/38 55/56/38 54/55/38 -f 56/58/39 61/63/39 62/64/39 -f 62/64/39 57/59/39 56/58/39 -f 59/61/40 63/65/40 64/66/40 -f 64/66/41 60/62/41 59/61/41 -f 61/63/42 65/67/42 66/68/42 -f 66/68/42 62/64/42 61/63/42 -f 67/69/43 68/70/43 69/71/43 -f 69/71/44 70/72/44 67/69/44 -f 70/72/45 69/71/45 71/73/45 -f 71/73/46 72/74/46 70/72/46 -f 73/75/47 74/76/47 68/70/47 -f 68/70/47 67/69/47 73/75/47 -f 75/77/48 76/78/48 74/76/48 -f 74/76/49 73/75/49 75/77/49 -f 77/79/50 78/80/50 76/78/50 -f 76/78/50 75/77/50 77/79/50 -f 63/65/51 38/39/51 37/38/51 -f 37/38/51 64/66/51 63/65/51 -f 65/67/52 40/41/52 39/40/52 -f 39/40/52 66/68/52 65/67/52 -f 42/43/53 41/42/53 78/80/53 -f 78/80/53 77/79/53 42/43/53 -f 29/30/54 30/31/54 79/81/54 -f 79/81/54 80/82/54 29/30/54 -f 81/83/55 82/84/55 83/85/55 -f 83/85/55 84/86/55 81/83/55 -f 8/8/56 81/83/56 84/86/56 -f 84/86/56 9/9/56 8/8/56 -f 82/84/57 85/87/57 86/88/57 -f 86/88/57 83/85/57 82/84/57 -f 85/87/58 87/89/58 88/90/58 -f 88/90/58 86/88/58 85/87/58 -f 87/89/59 89/91/59 90/92/59 -f 90/92/60 88/90/60 87/89/60 -f 89/91/61 91/93/61 92/94/61 -f 92/94/62 90/92/62 89/91/62 -f 93/95/63 94/96/63 72/74/63 -f 72/74/33 71/73/33 93/95/33 -f 95/97/44 96/98/44 97/99/44 -f 97/99/43 98/100/43 95/97/43 -f 96/98/46 53/54/46 52/53/46 -f 52/53/45 97/99/45 96/98/45 -f 99/101/47 95/97/47 98/100/47 -f 98/100/47 100/102/47 99/101/47 -f 101/103/64 99/101/64 100/102/64 -f 100/102/64 102/104/64 101/103/64 -f 103/105/65 101/103/65 102/104/65 -f 102/104/65 104/106/65 103/105/65 -f 91/93/65 103/105/65 104/106/65 -f 104/106/66 92/94/66 91/93/66 -f 105/107/2 106/108/2 107/109/2 -f 107/109/2 108/110/2 105/107/2 -f 106/108/67 109/111/67 110/112/67 -f 110/112/67 107/109/67 106/108/67 -f 109/111/68 111/113/68 112/114/68 -f 112/114/68 110/112/68 109/111/68 -f 111/113/69 113/115/69 114/116/69 -f 114/116/70 112/114/70 111/113/70 -f 113/115/71 115/117/71 116/118/71 -f 116/118/72 114/116/72 113/115/72 -f 115/117/73 117/119/73 118/120/73 -f 118/120/73 116/118/73 115/117/73 -f 117/119/74 119/121/74 120/122/74 -f 120/122/74 118/120/74 117/119/74 -f 119/121/75 121/123/75 122/124/75 -f 122/124/76 120/122/76 119/121/76 -f 121/123/77 123/125/77 124/126/77 -f 124/126/78 122/124/78 121/123/78 -f 123/125/79 125/127/79 126/128/79 -f 126/128/79 124/126/79 123/125/79 -f 125/127/80 127/129/80 128/130/80 -f 128/130/80 126/128/80 125/127/80 -f 127/129/81 129/131/81 130/132/81 -f 130/132/81 128/130/81 127/129/81 -f 129/131/81 131/133/81 132/134/81 -f 132/134/81 130/132/81 129/131/81 -f 133/135/82 134/136/82 135/137/82 -f 135/137/82 136/138/82 133/135/82 -f 93/139/83 71/107/83 52/110/83 -f 52/110/83 51/140/83 93/139/83 -f 71/107/83 69/108/83 97/109/83 -f 97/109/84 52/110/84 71/107/84 -f 69/108/85 68/111/85 98/112/85 -f 98/112/85 97/109/85 69/108/85 -f 68/111/86 74/113/86 100/114/86 -f 100/114/86 98/112/86 68/111/86 -f 74/113/87 76/115/87 102/116/87 -f 102/116/88 100/114/88 74/113/88 -f 76/115/89 78/117/89 104/118/89 -f 104/118/90 102/116/90 76/115/90 -f 78/117/91 41/119/91 92/120/91 -f 92/120/91 104/118/91 78/117/91 -f 41/119/92 35/121/92 90/122/92 -f 90/122/92 92/120/92 41/119/92 -f 35/121/93 33/123/93 88/124/93 -f 88/124/94 90/122/94 35/121/94 -f 33/123/95 31/125/95 86/126/95 -f 86/126/96 88/124/96 33/123/96 -f 31/125/97 26/127/97 83/128/97 -f 83/128/97 86/126/97 31/125/97 -f 26/127/98 25/129/98 84/130/98 -f 84/130/98 83/128/98 26/127/98 -f 25/129/84 29/131/84 9/132/84 -f 9/132/84 84/130/84 25/129/84 -f 29/131/84 80/133/84 10/134/84 -f 10/134/84 9/132/84 29/131/84 -f 137/136/99 138/135/99 139/138/99 -f 139/138/99 140/137/99 137/136/99 -f 141/139/2 105/107/2 108/110/2 -f 108/110/2 142/140/2 141/139/2 -f 93/141/83 51/142/83 135/137/83 -f 135/137/83 134/136/83 93/141/83 -f 143/143/100 144/144/100 145/145/100 -f 145/145/100 146/146/100 143/143/100 -f 132/147/81 131/148/81 147/149/81 -f 147/149/81 148/150/81 132/147/81 -f 141/148/2 142/147/2 149/150/2 -f 149/150/2 150/149/2 141/148/2 -f 151/145/101 152/146/101 153/143/101 -f 153/143/101 154/144/101 151/145/101 -f 10/142/84 80/141/84 137/136/84 -f 137/136/84 140/137/84 10/142/84 -f 51/151/102 50/152/102 144/153/102 -f 144/153/99 143/154/99 51/151/99 -f 50/155/29 136/156/29 145/157/29 -f 145/157/29 144/158/29 50/155/29 -f 136/156/82 135/159/82 146/160/82 -f 146/160/82 145/157/82 136/156/82 -f 135/159/83 51/151/83 143/154/83 -f 143/154/83 146/160/83 135/159/83 -f 11/152/103 10/151/103 152/154/103 -f 152/154/103 151/153/103 11/152/103 -f 10/151/104 140/159/104 153/160/104 -f 153/160/104 152/154/104 10/151/104 -f 140/159/99 139/156/99 154/157/99 -f 154/157/99 153/160/99 140/159/99 -f 139/156/105 11/155/105 151/158/105 -f 151/158/105 154/157/105 139/156/105 -f 4/161/106 3/162/106 106/108/106 -f 106/108/106 105/107/106 4/161/106 -f 3/162/107 7/163/107 109/111/107 -f 109/111/108 106/108/108 3/162/108 -f 7/163/109 13/164/109 111/113/109 -f 111/113/110 109/111/110 7/163/110 -f 13/164/111 18/165/111 113/115/111 -f 113/115/111 111/113/111 13/164/111 -f 18/165/112 22/166/112 115/117/112 -f 115/117/112 113/115/112 18/165/112 -f 22/166/113 38/167/113 117/119/113 -f 117/119/113 115/117/113 22/166/113 -f 38/167/114 63/168/114 119/121/114 -f 119/121/114 117/119/114 38/167/114 -f 63/168/115 59/169/115 121/123/115 -f 121/123/115 119/121/115 63/168/115 -f 59/169/116 54/170/116 123/125/116 -f 123/125/116 121/123/116 59/169/116 -f 54/170/117 47/171/117 125/127/117 -f 125/127/117 123/125/117 54/170/117 -f 47/171/118 44/172/118 127/129/118 -f 127/129/118 125/127/118 47/171/118 -f 44/172/119 43/173/119 129/131/119 -f 129/131/119 127/129/119 44/172/119 -f 43/173/120 46/174/120 131/133/120 -f 131/133/120 129/131/120 43/173/120 -f 133/135/103 136/138/103 148/150/103 -f 148/150/103 147/149/103 133/135/103 -f 136/175/100 50/176/100 132/147/100 -f 132/147/100 148/150/100 136/175/100 -f 50/51/121 53/54/121 130/177/121 -f 130/177/121 132/178/121 50/51/121 -f 53/54/45 96/98/45 128/179/45 -f 128/179/45 130/177/45 53/54/45 -f 96/98/44 95/97/44 126/180/44 -f 126/180/44 128/179/44 96/98/44 -f 95/97/122 99/101/122 124/181/122 -f 124/181/122 126/180/122 95/97/122 -f 99/101/123 101/103/123 122/182/123 -f 122/182/123 124/181/123 99/101/123 -f 101/103/66 103/105/66 120/183/66 -f 120/183/66 122/182/66 101/103/66 -f 103/105/66 91/93/66 118/184/66 -f 118/184/66 120/183/66 103/105/66 -f 91/93/61 89/91/61 116/185/61 -f 116/185/61 118/184/61 91/93/61 -f 89/91/124 87/89/124 114/186/124 -f 114/186/124 116/185/124 89/91/124 -f 87/89/125 85/87/125 112/187/125 -f 112/187/125 114/186/125 87/89/125 -f 85/87/22 82/84/22 110/188/22 -f 110/188/22 112/187/22 85/87/22 -f 82/84/19 81/83/19 107/189/19 -f 107/189/19 110/188/19 82/84/19 -f 81/83/20 8/8/20 108/190/20 -f 108/190/20 107/189/20 81/83/20 -f 8/8/54 11/11/54 142/191/54 -f 142/191/54 108/190/54 8/8/54 -f 11/176/100 139/175/100 149/150/100 -f 149/150/100 142/147/100 11/176/100 -f 139/138/99 138/135/99 150/149/99 -f 150/149/99 149/150/99 139/138/99 -f 1/192/126 4/161/126 105/107/126 -f 105/107/126 141/139/126 1/192/126 -f 155/193/127 156/194/127 157/195/127 -f 157/195/128 158/196/128 155/193/128 -f 156/194/129 159/197/129 160/198/129 -f 160/198/130 157/195/130 156/194/130 -f 159/197/131 161/199/131 162/200/131 -f 162/200/132 160/198/132 159/197/132 -f 161/199/133 163/201/133 164/202/133 -f 164/202/133 162/200/133 161/199/133 -f 165/203/134 158/204/134 157/205/134 -f 157/205/135 166/206/135 165/203/135 -f 166/206/136 157/205/136 160/207/136 -f 160/207/137 167/208/137 166/206/137 -f 167/208/138 160/207/138 162/209/138 -f 162/209/139 168/210/139 167/208/139 -f 168/210/140 162/209/140 164/211/140 -f 164/211/141 169/212/141 168/210/141 -f 170/213/142 163/214/142 161/215/142 -f 161/215/142 171/216/142 170/213/142 -f 171/216/143 161/215/143 159/217/143 -f 159/217/144 172/218/144 171/216/144 -f 172/218/145 159/217/145 156/219/145 -f 156/219/146 173/220/146 172/218/146 -f 173/220/147 156/219/147 155/221/147 -f 155/221/148 174/222/148 173/220/148 -f 158/196/149 175/223/149 176/224/149 -f 176/224/150 155/193/150 158/196/150 -f 155/221/151 176/225/151 177/226/151 -f 177/226/151 174/222/151 155/221/151 -f 178/227/152 179/228/152 180/229/152 -f 180/229/153 181/230/153 178/227/153 -f 181/230/154 180/229/154 182/231/154 -f 182/231/155 183/232/155 181/230/155 -f 183/232/156 182/231/156 184/233/156 -f 184/233/157 185/234/157 183/232/157 -f 185/234/158 184/233/158 164/202/158 -f 164/202/158 163/201/158 185/234/158 -f 186/235/159 187/236/159 180/237/159 -f 180/237/160 179/238/160 186/235/160 -f 187/236/161 188/239/161 182/240/161 -f 182/240/162 180/237/162 187/236/162 -f 188/239/163 189/241/163 184/242/163 -f 184/242/164 182/240/164 188/239/164 -f 189/241/165 169/212/165 164/211/165 -f 164/211/166 184/242/166 189/241/166 -f 170/213/167 190/243/167 185/244/167 -f 185/244/167 163/214/167 170/213/167 -f 190/243/168 191/245/168 183/246/168 -f 183/246/169 185/244/169 190/243/169 -f 191/245/170 192/247/170 181/248/170 -f 181/248/171 183/246/171 191/245/171 -f 192/247/172 193/249/172 178/250/172 -f 178/250/173 181/248/173 192/247/173 -f 179/228/174 178/227/174 194/251/174 -f 194/251/175 195/252/175 179/228/175 -f 178/250/176 193/249/176 196/253/176 -f 196/253/177 194/254/177 178/250/177 -f 197/255/61 198/256/61 199/257/61 -f 199/257/61 200/258/61 197/255/61 -f 201/259/178 202/260/178 203/261/178 -f 203/261/178 204/262/178 201/259/178 -f 204/262/179 203/261/179 198/263/179 -f 198/263/179 197/264/179 204/262/179 -f 203/265/180 205/266/180 199/267/180 -f 199/267/180 198/268/180 203/265/180 -f 206/260/181 207/259/181 208/262/181 -f 208/262/181 205/261/181 206/260/181 -f 205/261/182 208/262/182 200/264/182 -f 200/264/182 199/263/182 205/261/182 -f 207/269/183 201/270/183 204/265/183 -f 204/265/184 208/266/184 207/269/184 -f 208/266/185 204/265/185 197/268/185 -f 197/268/185 200/267/185 208/266/185 -f 209/258/61 210/255/61 211/256/61 -f 211/256/61 212/257/61 209/258/61 -f 213/259/186 214/262/186 215/261/186 -f 215/261/186 216/260/186 213/259/186 -f 214/262/187 209/264/187 212/263/187 -f 212/263/187 215/261/187 214/262/187 -f 215/265/180 212/268/180 211/267/180 -f 211/267/180 217/266/180 215/265/180 -f 218/260/188 217/261/188 219/262/188 -f 219/262/188 220/259/188 218/260/188 -f 217/261/189 211/263/189 210/264/189 -f 210/264/189 219/262/189 217/261/189 -f 220/269/184 219/266/184 214/265/184 -f 214/265/183 213/270/183 220/269/183 -f 219/266/185 210/267/185 209/268/185 -f 209/268/185 214/265/185 219/266/185 -f 221/1/83 222/4/83 223/3/83 -f 223/3/190 224/2/190 221/1/190 -f 223/3/191 225/7/191 226/6/191 -f 223/3/192 226/6/192 227/5/192 -f 223/3/193 227/5/193 224/2/193 -f 228/8/194 229/11/194 230/10/194 -f 230/10/194 231/9/194 228/8/194 -f 225/7/195 232/13/195 233/12/195 -f 233/12/196 226/6/196 225/7/196 -f 234/271/10 15/15/10 14/14/10 -f 14/14/9 227/272/9 234/271/9 -f 232/13/197 235/19/197 236/18/197 -f 236/18/198 233/12/198 232/13/198 -f 237/273/14 19/20/14 15/15/14 -f 15/15/13 234/271/13 237/273/13 -f 235/19/199 238/23/199 239/22/199 -f 239/22/200 236/18/200 235/19/200 -f 240/274/18 23/24/18 19/20/18 -f 19/20/17 237/273/17 240/274/17 -f 27/28/201 241/275/201 242/276/201 -f 242/276/19 28/29/19 27/28/19 -f 28/29/20 242/276/20 243/277/20 -f 243/277/202 30/31/202 28/29/202 -f 32/33/22 244/278/22 241/275/22 -f 241/275/21 27/28/21 32/33/21 -f 34/35/203 245/279/203 244/278/203 -f 244/278/203 32/33/203 34/35/203 -f 36/37/204 246/280/204 245/279/204 -f 245/279/204 34/35/204 36/37/204 -f 238/23/205 247/39/205 248/38/205 -f 248/38/205 239/22/205 238/23/205 -f 249/281/206 39/40/206 23/24/206 -f 23/24/206 240/274/206 249/281/206 -f 42/43/27 250/282/27 246/280/27 -f 246/280/27 36/37/27 42/43/27 -f 251/44/83 252/47/83 253/46/83 -f 253/46/83 254/45/83 251/44/83 -f 254/45/207 253/46/207 255/50/207 -f 254/45/208 255/50/208 256/49/208 -f 254/45/209 256/49/209 257/48/209 -f 258/51/121 259/54/121 260/53/121 -f 260/53/121 261/52/121 258/51/121 -f 257/48/210 256/49/210 262/56/210 -f 262/56/211 263/55/211 257/48/211 -f 255/283/36 58/60/36 57/59/36 -f 57/59/212 264/284/212 255/283/212 -f 263/55/213 262/56/213 265/62/213 -f 265/62/214 266/61/214 263/55/214 -f 264/284/215 57/59/215 62/64/215 -f 62/64/215 267/285/215 264/284/215 -f 266/61/216 265/62/216 268/66/216 -f 268/66/217 269/65/217 266/61/217 -f 267/285/218 62/64/218 66/68/218 -f 66/68/218 270/286/218 267/285/218 -f 271/287/44 272/288/44 67/69/44 -f 67/69/44 70/72/44 271/287/44 -f 273/289/45 271/287/45 70/72/45 -f 70/72/45 72/74/45 273/289/45 -f 272/288/122 274/290/122 73/75/122 -f 73/75/122 67/69/122 272/288/122 -f 274/290/48 275/291/48 75/77/48 -f 75/77/48 73/75/48 274/290/48 -f 275/291/50 276/292/50 77/79/50 -f 77/79/50 75/77/50 275/291/50 -f 269/65/219 268/66/219 248/38/219 -f 248/38/219 247/39/219 269/65/219 -f 270/286/220 66/68/220 39/40/220 -f 39/40/220 249/281/220 270/286/220 -f 276/292/53 250/282/53 42/43/53 -f 42/43/53 77/79/53 276/292/53 -f 243/277/54 277/293/54 79/81/54 -f 79/81/221 30/31/221 243/277/221 -f 278/85/222 279/84/222 280/83/222 -f 280/83/222 281/86/222 278/85/222 -f 281/86/223 280/83/223 228/8/223 -f 228/8/223 231/9/223 281/86/223 -f 282/88/224 283/87/224 279/84/224 -f 279/84/224 278/85/224 282/88/224 -f 284/90/225 285/89/225 283/87/225 -f 283/87/225 282/88/225 284/90/225 -f 286/92/124 287/91/124 285/89/124 -f 285/89/226 284/90/226 286/92/226 -f 288/94/61 289/93/61 287/91/61 -f 287/91/61 286/92/61 288/94/61 -f 290/294/121 273/289/121 72/74/121 -f 72/74/227 94/96/227 290/294/227 -f 291/99/44 292/98/44 293/97/44 -f 293/97/44 294/100/44 291/99/44 -f 260/53/45 259/54/45 292/98/45 -f 292/98/45 291/99/45 260/53/45 -f 294/100/122 293/97/122 295/101/122 -f 295/101/122 296/102/122 294/100/122 -f 296/102/123 295/101/123 297/103/123 -f 297/103/123 298/104/123 296/102/123 -f 298/104/66 297/103/66 299/105/66 -f 299/105/66 300/106/66 298/104/66 -f 300/106/66 299/105/66 289/93/66 -f 289/93/66 288/94/66 300/106/66 -f 301/131/228 302/132/228 303/130/228 -f 303/130/228 304/129/228 301/131/228 -f 304/129/229 303/130/229 305/128/229 -f 305/128/229 306/127/229 304/129/229 -f 306/127/230 305/128/230 307/126/230 -f 307/126/230 308/125/230 306/127/230 -f 308/125/231 307/126/231 309/124/231 -f 309/124/232 310/123/232 308/125/232 -f 310/123/233 309/124/233 311/122/233 -f 311/122/89 312/121/89 310/123/89 -f 312/121/91 311/122/91 313/120/91 -f 313/120/91 314/119/91 312/121/91 -f 314/119/92 313/120/92 315/118/92 -f 315/118/92 316/117/92 314/119/92 -f 316/117/94 315/118/94 317/116/94 -f 317/116/234 318/115/234 316/117/234 -f 318/115/235 317/116/235 319/114/235 -f 319/114/236 320/113/236 318/115/236 -f 320/113/237 319/114/237 321/112/237 -f 321/112/237 322/111/237 320/113/237 -f 322/111/238 321/112/238 323/109/238 -f 323/109/238 324/108/238 322/111/238 -f 324/108/239 323/109/239 325/110/239 -f 325/110/239 326/107/239 324/108/239 -f 326/107/239 325/110/239 327/140/239 -f 327/140/239 328/139/239 326/107/239 -f 329/135/103 330/138/103 331/137/103 -f 331/137/82 332/136/82 329/135/82 -f 290/139/29 261/140/29 260/110/29 -f 260/110/29 273/107/29 290/139/29 -f 273/107/29 260/110/29 291/109/29 -f 291/109/29 271/108/29 273/107/29 -f 271/108/240 291/109/240 294/112/240 -f 294/112/240 272/111/240 271/108/240 -f 272/111/241 294/112/241 296/114/241 -f 296/114/241 274/113/241 272/111/241 -f 274/113/242 296/114/242 298/116/242 -f 298/116/243 275/115/243 274/113/243 -f 275/115/244 298/116/244 300/118/244 -f 300/118/71 276/117/71 275/115/71 -f 276/117/73 300/118/73 288/120/73 -f 288/120/73 250/119/73 276/117/73 -f 250/119/74 288/120/74 286/122/74 -f 286/122/74 246/121/74 250/119/74 -f 246/121/76 286/122/76 284/124/76 -f 284/124/245 245/123/245 246/121/245 -f 245/123/246 284/124/246 282/126/246 -f 282/126/247 244/125/247 245/123/247 -f 244/125/248 282/126/248 278/128/248 -f 278/128/248 241/127/248 244/125/248 -f 241/127/249 278/128/249 281/130/249 -f 281/130/249 242/129/249 241/127/249 -f 242/129/29 281/130/29 231/132/29 -f 231/132/29 243/131/29 242/129/29 -f 243/131/29 231/132/29 230/134/29 -f 230/134/29 277/133/29 243/131/29 -f 333/136/102 334/137/102 335/138/102 -f 335/138/102 336/135/102 333/136/102 -f 337/133/228 338/134/228 302/132/228 -f 302/132/228 301/131/228 337/133/228 -f 290/141/29 332/136/29 331/137/29 -f 331/137/29 261/142/29 290/141/29 -f 339/144/100 340/145/100 341/146/100 -f 341/146/100 342/143/100 339/144/100 -f 327/147/239 343/150/239 344/149/239 -f 344/149/239 328/148/239 327/147/239 -f 337/148/228 345/149/228 346/150/228 -f 346/150/228 338/147/228 337/148/228 -f 347/146/250 348/143/250 349/144/250 -f 349/144/250 350/145/250 347/146/250 -f 230/142/251 334/137/251 333/136/251 -f 333/136/251 277/141/251 230/142/251 -f 261/151/99 339/154/99 342/153/99 -f 342/153/99 258/152/99 261/151/99 -f 258/155/83 342/158/83 341/157/83 -f 341/157/83 330/156/83 258/155/83 -f 330/156/82 341/157/82 340/160/82 -f 340/160/103 331/159/103 330/156/103 -f 331/159/29 340/160/29 339/154/29 -f 339/154/29 261/151/29 331/159/29 -f 229/152/82 347/153/82 350/154/82 -f 350/154/82 230/151/82 229/152/82 -f 230/151/252 350/154/252 349/160/252 -f 349/160/252 334/159/252 230/151/252 -f 334/159/102 349/160/102 348/157/102 -f 348/157/102 335/156/102 334/159/102 -f 335/156/253 348/157/253 347/158/253 -f 347/158/253 229/155/253 335/156/253 -f 222/173/254 301/131/254 304/129/254 -f 304/129/254 223/172/254 222/173/254 -f 223/172/107 304/129/107 306/127/107 -f 306/127/107 225/171/107 223/172/107 -f 225/171/110 306/127/110 308/125/110 -f 308/125/110 232/170/110 225/171/110 -f 232/170/255 308/125/255 310/123/255 -f 310/123/255 235/169/255 232/170/255 -f 235/169/256 310/123/256 312/121/256 -f 312/121/256 238/168/256 235/169/256 -f 238/168/257 312/121/257 314/119/257 -f 314/119/257 247/167/257 238/168/257 -f 247/167/258 314/119/258 316/117/258 -f 316/117/258 269/166/258 247/167/258 -f 269/166/259 316/117/259 318/115/259 -f 318/115/259 266/165/259 269/166/259 -f 266/165/260 318/115/260 320/113/260 -f 320/113/260 263/164/260 266/165/260 -f 263/164/261 320/113/261 322/111/261 -f 322/111/261 257/163/261 263/164/261 -f 257/163/262 322/111/262 324/108/262 -f 324/108/262 254/162/262 257/163/262 -f 254/162/263 324/108/263 326/107/263 -f 326/107/263 251/161/263 254/162/263 -f 251/161/264 326/107/264 328/139/264 -f 328/139/264 252/192/264 251/161/264 -f 329/135/82 344/149/82 343/150/82 -f 343/150/82 330/138/82 329/135/82 -f 330/175/265 343/150/265 327/147/265 -f 327/147/265 258/176/265 330/175/265 -f 258/51/33 327/178/33 325/177/33 -f 325/177/33 259/54/33 258/51/33 -f 259/54/46 325/177/46 323/179/46 -f 323/179/46 292/98/46 259/54/46 -f 292/98/43 323/179/43 321/180/43 -f 321/180/43 293/97/43 292/98/43 -f 293/97/47 321/180/47 319/181/47 -f 319/181/47 295/101/47 293/97/47 -f 295/101/64 319/181/64 317/182/64 -f 317/182/123 297/103/123 295/101/123 -f 297/103/66 317/182/66 315/183/66 -f 315/183/66 299/105/66 297/103/66 -f 299/105/66 315/183/66 313/184/66 -f 313/184/65 289/93/65 299/105/65 -f 289/93/62 313/184/62 311/185/62 -f 311/185/62 287/91/62 289/93/62 -f 287/91/59 311/185/59 309/186/59 -f 309/186/124 285/89/124 287/91/124 -f 285/89/125 309/186/125 307/187/125 -f 307/187/266 283/87/266 285/89/266 -f 283/87/21 307/187/21 305/188/21 -f 305/188/22 279/84/22 283/87/22 -f 279/84/19 305/188/19 303/189/19 -f 303/189/201 280/83/201 279/84/201 -f 280/83/202 303/189/202 302/190/202 -f 302/190/202 228/8/202 280/83/202 -f 228/8/221 302/190/221 338/191/221 -f 338/191/221 229/11/221 228/8/221 -f 229/176/265 338/147/265 346/150/265 -f 346/150/265 335/175/265 229/176/265 -f 335/138/102 346/150/102 345/149/102 -f 345/149/102 336/135/102 335/138/102 -f 221/174/267 337/133/267 301/131/267 -f 301/131/267 222/173/267 221/174/267 -f 351/193/268 352/196/268 353/195/268 -f 353/195/269 354/194/269 351/193/269 -f 354/194/270 353/195/270 355/198/270 -f 355/198/271 356/197/271 354/194/271 -f 356/197/272 355/198/272 357/200/272 -f 357/200/273 358/199/273 356/197/273 -f 358/199/274 357/200/274 359/202/274 -f 359/202/274 360/201/274 358/199/274 -f 361/203/275 362/206/275 353/205/275 -f 353/205/276 352/204/276 361/203/276 -f 362/206/277 363/208/277 355/207/277 -f 355/207/278 353/205/278 362/206/278 -f 363/208/279 364/210/279 357/209/279 -f 357/209/280 355/207/280 363/208/280 -f 364/210/281 365/212/281 359/211/281 -f 359/211/282 357/209/282 364/210/282 -f 366/213/283 367/216/283 358/215/283 -f 358/215/283 360/214/283 366/213/283 -f 367/216/284 368/218/284 356/217/284 -f 356/217/285 358/215/285 367/216/285 -f 368/218/286 369/220/286 354/219/286 -f 354/219/287 356/217/287 368/218/287 -f 369/220/288 370/222/288 351/221/288 -f 351/221/289 354/219/289 369/220/289 -f 352/196/290 351/193/290 371/224/290 -f 371/224/291 372/223/291 352/196/291 -f 351/221/292 370/222/292 373/226/292 -f 373/226/292 371/225/292 351/221/292 -f 374/227/293 375/230/293 376/229/293 -f 376/229/294 377/228/294 374/227/294 -f 375/230/295 378/232/295 379/231/295 -f 379/231/296 376/229/296 375/230/296 -f 378/232/297 380/234/297 381/233/297 -f 381/233/298 379/231/298 378/232/298 -f 380/234/299 360/201/299 359/202/299 -f 359/202/299 381/233/299 380/234/299 -f 382/235/300 377/238/300 376/237/300 -f 376/237/301 383/236/301 382/235/301 -f 383/236/302 376/237/302 379/240/302 -f 379/240/303 384/239/303 383/236/303 -f 384/239/304 379/240/304 381/242/304 -f 381/242/305 385/241/305 384/239/305 -f 385/241/306 381/242/306 359/211/306 -f 359/211/307 365/212/307 385/241/307 -f 366/213/308 360/214/308 380/244/308 -f 380/244/308 386/243/308 366/213/308 -f 386/243/309 380/244/309 378/246/309 -f 378/246/310 387/245/310 386/243/310 -f 387/245/311 378/246/311 375/248/311 -f 375/248/312 388/247/312 387/245/312 -f 388/247/313 375/248/313 374/250/313 -f 374/250/314 389/249/314 388/247/314 -f 377/228/315 390/252/315 391/251/315 -f 391/251/316 374/227/316 377/228/316 -f 374/250/317 391/254/317 392/253/317 -f 392/253/318 389/249/318 374/250/318 -f 393/256/61 394/257/61 395/258/61 -f 395/258/61 396/255/61 393/256/61 -f 397/259/178 398/262/178 399/261/178 -f 399/261/178 400/260/178 397/259/178 -f 398/262/179 393/264/179 396/263/179 -f 396/263/179 399/261/179 398/262/179 -f 399/265/319 396/268/319 395/267/319 -f 395/267/319 401/266/319 399/265/319 -f 402/260/181 401/261/181 403/262/181 -f 403/262/181 404/259/181 402/260/181 -f 401/261/182 395/263/182 394/264/182 -f 394/264/182 403/262/182 401/261/182 -f 404/269/320 403/266/320 398/265/320 -f 398/265/321 397/270/321 404/269/321 -f 403/266/322 394/267/322 393/268/322 -f 393/268/322 398/265/322 403/266/322 -f 405/257/61 406/258/61 407/255/61 -f 407/255/61 408/256/61 405/257/61 -f 409/259/186 410/260/186 411/261/186 -f 411/261/186 412/262/186 409/259/186 -f 412/262/187 411/261/187 406/263/187 -f 406/263/187 405/264/187 412/262/187 -f 411/265/319 413/266/319 407/267/319 -f 407/267/319 406/268/319 411/265/319 -f 414/260/188 415/259/188 416/262/188 -f 416/262/188 413/261/188 414/260/188 -f 413/261/189 416/262/189 408/264/189 -f 408/264/189 407/263/189 413/261/189 -f 415/269/321 409/270/321 412/265/321 -f 412/265/320 416/266/320 415/269/320 -f 416/266/322 412/265/322 405/268/322 -f 405/268/322 408/267/322 416/266/322 -# 676 faces - diff --git a/examples/web/models/resources/models/bridge_diffuse.png b/examples/web/models/resources/models/bridge_diffuse.png Binary files differdeleted file mode 100644 index 45a86b5..0000000 --- a/examples/web/models/resources/models/bridge_diffuse.png +++ /dev/null diff --git a/examples/web/models/resources/models/castle.obj b/examples/web/models/resources/models/castle.obj deleted file mode 100644 index a4ec921..0000000 --- a/examples/web/models/resources/models/castle.obj +++ /dev/null @@ -1,12919 +0,0 @@ -# (c) 2018 Medieval Assets Pack by Alberto Cano -# Licensed as Creative Commons Attribution-NonCommercial 4.0 - -# -# object castle -# - -v -17.17 7.76 -10.68 -v -16.55 7.76 -12.98 -v -16.55 0.00 -12.98 -v -17.17 0.00 -10.68 -v -14.87 7.76 -14.66 -v -14.87 0.00 -14.66 -v -12.57 7.76 -15.28 -v -12.57 0.00 -15.28 -v -10.27 7.76 -14.66 -v -10.27 0.00 -14.66 -v -8.58 7.76 -12.98 -v -8.58 0.00 -12.98 -v -7.97 7.76 -10.68 -v -7.97 0.00 -10.68 -v -8.58 7.76 -8.38 -v -8.58 0.00 -8.38 -v -10.27 7.76 -6.69 -v -10.27 0.00 -6.69 -v -12.57 7.76 -6.08 -v -12.57 0.00 -6.08 -v -14.87 7.76 -6.69 -v -14.87 0.00 -6.69 -v -16.55 7.76 -8.38 -v -16.55 0.00 -8.38 -v -16.78 7.76 -13.11 -v -17.43 7.76 -10.68 -v -17.43 8.57 -10.68 -v -16.78 8.57 -13.11 -v -15.00 7.76 -14.89 -v -15.00 8.57 -14.89 -v -12.57 7.76 -15.54 -v -12.57 8.57 -15.54 -v -10.13 7.76 -14.89 -v -10.13 8.57 -14.89 -v -8.35 7.76 -13.11 -v -8.35 8.57 -13.11 -v -7.70 7.76 -10.68 -v -7.70 8.57 -10.68 -v -8.35 7.76 -8.24 -v -8.35 8.57 -8.24 -v -10.13 7.76 -6.46 -v -10.13 8.57 -6.46 -v -12.57 7.76 -5.81 -v -12.57 8.57 -5.81 -v -15.00 7.76 -6.46 -v -15.00 8.57 -6.46 -v -16.78 7.76 -8.24 -v -16.78 8.57 -8.24 -v -17.17 8.57 -10.68 -v -16.55 8.57 -12.98 -v -14.87 8.57 -14.66 -v -12.57 8.57 -15.28 -v -10.27 8.57 -14.66 -v -8.58 8.57 -12.98 -v -7.97 8.57 -10.68 -v -8.58 8.57 -8.38 -v -10.27 8.57 -6.69 -v -12.57 8.57 -6.08 -v -14.87 8.57 -6.69 -v -16.55 8.57 -8.38 -v -17.17 16.89 -10.68 -v -16.55 16.89 -12.98 -v -14.87 16.89 -14.66 -v -12.57 16.89 -15.28 -v -10.27 16.89 -14.66 -v -8.58 16.89 -12.98 -v -7.97 16.89 -10.68 -v -8.58 16.89 -8.38 -v -10.27 16.89 -6.69 -v -12.57 16.89 -6.08 -v -14.87 16.89 -6.69 -v -16.55 16.89 -8.38 -v -17.13 21.30 -13.31 -v -17.83 21.30 -10.68 -v -18.23 21.30 -10.68 -v -17.47 21.30 -13.51 -v -15.20 21.30 -15.24 -v -15.40 21.30 -15.58 -v -12.57 21.30 -15.94 -v -12.57 21.30 -16.34 -v -9.93 21.30 -15.24 -v -9.73 21.30 -15.58 -v -8.01 21.30 -13.31 -v -7.66 21.30 -13.51 -v -7.30 21.30 -10.68 -v -6.90 21.30 -10.68 -v -8.01 21.30 -8.04 -v -7.66 21.30 -7.84 -v -9.93 21.30 -6.12 -v -9.73 21.30 -5.77 -v -12.57 21.30 -5.41 -v -12.57 21.30 -5.01 -v -15.20 21.30 -6.12 -v -15.40 21.30 -5.77 -v -17.13 21.30 -8.04 -v -17.47 21.30 -7.84 -v -16.72 24.76 -10.68 -v -16.17 24.76 -12.76 -v -14.64 24.76 -14.28 -v -12.57 24.76 -14.83 -v -10.49 24.76 -14.28 -v -8.97 24.76 -12.76 -v -8.41 24.76 -10.68 -v -8.97 24.76 -8.60 -v -10.49 24.76 -7.08 -v -12.57 24.76 -6.52 -v -14.64 24.76 -7.08 -v -16.17 24.76 -8.60 -v -16.69 28.50 -10.68 -v -16.13 28.50 -12.74 -v -14.63 28.50 -14.24 -v -12.57 28.50 -14.80 -v -10.51 28.50 -14.24 -v -9.00 28.50 -12.74 -v -8.45 28.50 -10.68 -v -9.00 28.50 -8.62 -v -10.51 28.50 -7.11 -v -12.57 28.50 -6.56 -v -14.63 28.50 -7.11 -v -16.13 28.50 -8.62 -v -17.83 17.36 -10.68 -v -17.13 17.36 -13.31 -v -15.20 17.36 -15.24 -v -12.57 17.36 -15.94 -v -9.93 17.36 -15.24 -v -8.01 17.36 -13.31 -v -7.30 17.36 -10.68 -v -8.01 17.36 -8.04 -v -9.93 17.36 -6.12 -v -12.57 17.36 -5.41 -v -15.20 17.36 -6.12 -v -17.13 17.36 -8.04 -v -17.91 20.21 -10.37 -v -17.91 20.52 -10.80 -v -17.91 19.21 -10.80 -v -17.91 19.23 -10.37 -v -17.81 19.26 -10.03 -v -17.91 19.26 -10.04 -v -17.91 19.12 -10.04 -v -17.81 19.12 -10.03 -v -17.89 20.75 -10.80 -v -17.98 20.75 -10.81 -v -17.94 20.29 -10.15 -v -17.84 20.29 -10.15 -v -17.68 19.12 -11.55 -v -17.78 19.12 -11.56 -v -17.78 19.26 -11.56 -v -17.68 19.26 -11.55 -v -17.89 19.07 -10.80 -v -17.98 19.07 -10.81 -v -17.82 19.12 -11.45 -v -17.73 19.12 -11.45 -v -18.05 19.12 -10.16 -v -18.05 19.26 -10.16 -v -18.08 19.23 -10.39 -v -17.98 20.52 -10.81 -v -17.98 20.21 -10.38 -v -17.93 19.26 -11.46 -v -17.93 19.12 -11.46 -v -18.01 19.24 -11.24 -v -18.09 19.07 -10.82 -v -18.09 19.21 -10.82 -v -17.83 20.21 -11.23 -v -17.83 19.24 -11.23 -v -17.73 20.29 -11.45 -v -17.82 20.29 -11.45 -v -17.84 19.12 -10.15 -v -17.94 19.12 -10.15 -v -17.90 20.21 -11.23 -v -17.98 19.23 -10.38 -v -17.90 19.24 -11.23 -v -17.98 19.21 -10.81 -v -17.82 19.26 -11.45 -v -17.73 19.26 -11.45 -v -17.94 19.26 -10.15 -v -17.84 19.26 -10.15 -v -18.02 19.26 -10.05 -v -18.02 19.12 -10.05 -v -17.88 19.12 -11.57 -v -17.88 19.26 -11.57 -v -12.87 20.21 -16.02 -v -12.44 20.52 -16.02 -v -12.44 19.21 -16.02 -v -12.87 19.23 -16.02 -v -13.21 19.26 -15.92 -v -13.20 19.26 -16.02 -v -13.20 19.12 -16.02 -v -13.21 19.12 -15.92 -v -12.44 20.75 -16.00 -v -12.43 20.75 -16.10 -v -13.09 20.29 -16.05 -v -13.10 20.29 -15.95 -v -11.69 19.12 -15.79 -v -11.68 19.12 -15.89 -v -11.68 19.26 -15.89 -v -11.69 19.26 -15.79 -v -12.44 19.07 -16.00 -v -12.43 19.07 -16.10 -v -11.79 19.12 -15.94 -v -11.80 19.12 -15.84 -v -13.08 19.12 -16.16 -v -13.08 19.26 -16.16 -v -12.85 19.23 -16.20 -v -12.43 20.52 -16.10 -v -12.86 20.21 -16.09 -v -11.78 19.26 -16.04 -v -11.78 19.12 -16.04 -v -12.00 19.24 -16.12 -v -12.42 19.07 -16.20 -v -12.42 19.21 -16.20 -v -12.01 20.21 -15.94 -v -12.01 19.24 -15.94 -v -11.80 20.29 -15.84 -v -11.79 20.29 -15.94 -v -13.10 19.12 -15.95 -v -13.09 19.12 -16.05 -v -12.01 20.21 -16.01 -v -12.86 19.23 -16.09 -v -12.01 19.24 -16.01 -v -12.43 19.21 -16.10 -v -11.79 19.26 -15.94 -v -11.80 19.26 -15.84 -v -13.09 19.26 -16.05 -v -13.10 19.26 -15.95 -v -13.19 19.26 -16.13 -v -13.19 19.12 -16.13 -v -11.67 19.12 -16.00 -v -11.67 19.26 -16.00 -v -9.24 23.34 -12.52 -v -9.78 23.34 -13.29 -v -9.10 24.92 -13.76 -v -8.56 24.92 -12.99 -v -8.63 28.41 -12.92 -v -9.53 28.41 -12.29 -v -9.18 28.41 -13.70 -v -10.08 28.41 -13.07 -v -12.87 27.21 -14.81 -v -12.44 27.52 -14.82 -v -12.44 26.21 -14.82 -v -12.87 26.24 -14.81 -v -13.21 26.26 -14.72 -v -13.20 26.26 -14.82 -v -13.20 26.12 -14.82 -v -13.21 26.12 -14.72 -v -12.44 27.75 -14.80 -v -12.43 27.75 -14.89 -v -13.09 27.30 -14.85 -v -13.10 27.30 -14.75 -v -11.69 26.12 -14.59 -v -11.68 26.12 -14.69 -v -11.68 26.26 -14.69 -v -11.69 26.26 -14.59 -v -12.44 26.07 -14.80 -v -12.43 26.07 -14.89 -v -11.79 26.12 -14.73 -v -11.80 26.12 -14.64 -v -13.08 26.12 -14.96 -v -13.08 26.26 -14.96 -v -12.85 26.24 -14.99 -v -12.43 27.52 -14.89 -v -12.86 27.21 -14.89 -v -11.78 26.26 -14.84 -v -11.78 26.12 -14.84 -v -12.00 26.25 -14.92 -v -12.42 26.07 -15.00 -v -12.42 26.21 -15.00 -v -12.01 27.21 -14.74 -v -12.01 26.25 -14.74 -v -11.80 27.30 -14.64 -v -11.79 27.30 -14.73 -v -13.10 26.12 -14.75 -v -13.09 26.12 -14.85 -v -12.01 27.21 -14.81 -v -12.86 26.24 -14.89 -v -12.01 26.25 -14.81 -v -12.43 26.21 -14.89 -v -11.79 26.26 -14.73 -v -11.80 26.26 -14.64 -v -13.09 26.26 -14.85 -v -13.10 26.26 -14.75 -v -13.19 26.26 -14.93 -v -13.19 26.12 -14.93 -v -11.67 26.12 -14.79 -v -11.67 26.26 -14.79 -v -14.41 23.34 -14.01 -v -15.18 23.34 -13.46 -v -15.65 24.92 -14.14 -v -14.88 24.92 -14.68 -v -14.81 28.41 -14.61 -v -14.18 28.41 -13.71 -v -15.59 28.41 -14.07 -v -14.96 28.41 -13.17 -v -8.43 27.21 -10.98 -v -8.42 27.52 -10.55 -v -8.42 26.21 -10.55 -v -8.43 26.24 -10.98 -v -8.52 26.26 -11.32 -v -8.42 26.26 -11.31 -v -8.42 26.12 -11.31 -v -8.52 26.12 -11.32 -v -8.45 27.75 -10.55 -v -8.35 27.75 -10.54 -v -8.39 27.30 -11.20 -v -8.49 27.30 -11.21 -v -8.65 26.12 -9.80 -v -8.56 26.12 -9.79 -v -8.56 26.26 -9.79 -v -8.65 26.26 -9.80 -v -8.45 26.07 -10.55 -v -8.35 26.07 -10.54 -v -8.51 26.12 -9.90 -v -8.61 26.12 -9.91 -v -8.29 26.12 -11.19 -v -8.29 26.26 -11.19 -v -8.25 26.24 -10.96 -v -8.35 27.52 -10.54 -v -8.35 27.21 -10.97 -v -8.40 26.26 -9.89 -v -8.40 26.12 -9.89 -v -8.32 26.25 -10.11 -v -8.24 26.07 -10.53 -v -8.24 26.21 -10.53 -v -8.50 27.21 -10.13 -v -8.50 26.25 -10.13 -v -8.61 27.30 -9.91 -v -8.51 27.30 -9.90 -v -8.49 26.12 -11.21 -v -8.39 26.12 -11.20 -v -8.43 27.21 -10.12 -v -8.35 26.24 -10.97 -v -8.43 26.25 -10.12 -v -8.35 26.21 -10.54 -v -8.51 26.26 -9.90 -v -8.61 26.26 -9.91 -v -8.39 26.26 -11.20 -v -8.49 26.26 -11.21 -v -8.32 26.26 -11.30 -v -8.32 26.12 -11.30 -v -8.45 26.12 -9.78 -v -8.45 26.26 -9.78 -v -13.04 12.70 -6.81 -v -12.09 12.70 -6.81 -v -12.09 14.28 -5.99 -v -13.04 14.28 -5.99 -v -13.04 17.34 -5.64 -v -13.04 17.34 -6.74 -v -12.09 17.34 -5.64 -v -12.09 17.34 -6.74 -v -8.98 12.70 -12.20 -v -9.46 12.70 -13.02 -v -8.74 14.28 -13.43 -v -8.27 14.28 -12.61 -v -7.97 17.34 -12.79 -v -8.92 17.34 -12.24 -v -8.44 17.34 -13.61 -v -9.39 17.34 -13.06 -v -12.09 12.70 -14.54 -v -13.04 12.70 -14.54 -v -13.04 14.28 -15.36 -v -12.09 14.28 -15.36 -v -12.09 17.34 -15.71 -v -12.09 17.34 -14.62 -v -13.04 17.34 -15.71 -v -13.04 17.34 -14.62 -v -10.73 23.34 -7.35 -v -9.95 23.34 -7.89 -v -9.48 24.92 -7.22 -v -10.25 24.92 -6.67 -v -10.32 28.41 -6.74 -v -10.95 28.41 -7.65 -v -9.55 28.41 -7.29 -v -10.18 28.41 -8.19 -v -9.46 12.70 -8.34 -v -8.98 12.70 -9.15 -v -8.27 14.28 -8.74 -v -8.74 14.28 -7.92 -v -8.44 17.34 -7.75 -v -9.39 17.34 -8.30 -v -7.97 17.34 -8.57 -v -8.92 17.34 -9.12 -v -7.23 20.21 -10.98 -v -7.22 20.52 -10.55 -v -7.22 19.21 -10.55 -v -7.23 19.23 -10.98 -v -7.32 19.26 -11.32 -v -7.22 19.26 -11.31 -v -7.22 19.12 -11.31 -v -7.32 19.12 -11.32 -v -7.24 20.75 -10.55 -v -7.15 20.75 -10.54 -v -7.19 20.29 -11.20 -v -7.29 20.29 -11.21 -v -7.45 19.12 -9.80 -v -7.35 19.12 -9.79 -v -7.35 19.26 -9.79 -v -7.45 19.26 -9.80 -v -7.24 19.07 -10.55 -v -7.15 19.07 -10.54 -v -7.31 19.12 -9.90 -v -7.41 19.12 -9.91 -v -7.09 19.12 -11.19 -v -7.09 19.26 -11.19 -v -7.05 19.23 -10.96 -v -7.15 20.52 -10.54 -v -7.15 20.21 -10.97 -v -7.20 19.26 -9.89 -v -7.20 19.12 -9.89 -v -7.12 19.24 -10.11 -v -7.04 19.07 -10.53 -v -7.04 19.21 -10.53 -v -7.30 20.21 -10.13 -v -7.30 19.24 -10.13 -v -7.41 20.29 -9.91 -v -7.31 20.29 -9.90 -v -7.29 19.12 -11.21 -v -7.19 19.12 -11.20 -v -7.23 20.21 -10.12 -v -7.15 19.23 -10.97 -v -7.23 19.24 -10.12 -v -7.15 19.21 -10.54 -v -7.31 19.26 -9.90 -v -7.41 19.26 -9.91 -v -7.19 19.26 -11.20 -v -7.29 19.26 -11.21 -v -7.11 19.26 -11.30 -v -7.11 19.12 -11.30 -v -7.25 19.12 -9.78 -v -7.25 19.26 -9.78 -v -12.26 27.21 -6.54 -v -12.69 27.52 -6.53 -v -12.69 26.21 -6.53 -v -12.26 26.24 -6.54 -v -11.92 26.26 -6.63 -v -11.93 26.26 -6.53 -v -11.93 26.12 -6.53 -v -11.92 26.12 -6.63 -v -12.69 27.75 -6.56 -v -12.70 27.75 -6.46 -v -12.04 27.30 -6.51 -v -12.03 27.30 -6.60 -v -13.44 26.12 -6.76 -v -13.45 26.12 -6.67 -v -13.45 26.26 -6.67 -v -13.44 26.26 -6.76 -v -12.69 26.07 -6.56 -v -12.70 26.07 -6.46 -v -13.34 26.12 -6.62 -v -13.34 26.12 -6.72 -v -12.05 26.12 -6.40 -v -12.05 26.26 -6.40 -v -12.28 26.24 -6.36 -v -12.70 27.52 -6.46 -v -12.27 27.21 -6.47 -v -13.35 26.26 -6.51 -v -13.35 26.12 -6.51 -v -13.13 26.25 -6.43 -v -12.71 26.07 -6.35 -v -12.71 26.21 -6.35 -v -13.12 27.21 -6.61 -v -13.12 26.25 -6.61 -v -13.34 27.30 -6.72 -v -13.34 27.30 -6.62 -v -12.03 26.12 -6.60 -v -12.04 26.12 -6.51 -v -13.12 27.21 -6.54 -v -12.27 26.24 -6.47 -v -13.12 26.25 -6.54 -v -12.70 26.21 -6.46 -v -13.34 26.26 -6.62 -v -13.34 26.26 -6.72 -v -12.04 26.26 -6.51 -v -12.03 26.26 -6.60 -v -11.94 26.26 -6.43 -v -11.94 26.12 -6.43 -v -13.46 26.12 -6.56 -v -13.46 26.26 -6.56 -v -16.15 12.70 -9.15 -v -15.67 12.70 -8.34 -v -16.39 14.28 -7.92 -v -16.86 14.28 -8.74 -v -17.17 17.34 -8.57 -v -16.21 17.34 -9.12 -v -16.69 17.34 -7.75 -v -15.74 17.34 -8.30 -v -12.26 20.21 -5.34 -v -12.69 20.52 -5.33 -v -12.69 19.21 -5.33 -v -12.26 19.23 -5.34 -v -11.92 19.26 -5.43 -v -11.93 19.26 -5.33 -v -11.93 19.12 -5.33 -v -11.92 19.12 -5.43 -v -12.69 20.75 -5.36 -v -12.70 20.75 -5.26 -v -12.04 20.29 -5.30 -v -12.03 20.29 -5.40 -v -13.44 19.12 -5.56 -v -13.45 19.12 -5.47 -v -13.45 19.26 -5.47 -v -13.44 19.26 -5.56 -v -12.69 19.07 -5.36 -v -12.70 19.07 -5.26 -v -13.34 19.12 -5.42 -v -13.34 19.12 -5.52 -v -12.05 19.12 -5.20 -v -12.05 19.26 -5.20 -v -12.28 19.23 -5.16 -v -12.70 20.52 -5.26 -v -12.27 20.21 -5.26 -v -13.35 19.26 -5.31 -v -13.35 19.12 -5.31 -v -13.13 19.24 -5.23 -v -12.71 19.07 -5.15 -v -12.71 19.21 -5.15 -v -13.12 20.21 -5.41 -v -13.12 19.24 -5.41 -v -13.34 20.29 -5.52 -v -13.34 20.29 -5.42 -v -12.03 19.12 -5.40 -v -12.04 19.12 -5.30 -v -13.12 20.21 -5.34 -v -12.27 19.23 -5.26 -v -13.12 19.24 -5.34 -v -12.70 19.21 -5.26 -v -13.34 19.26 -5.42 -v -13.34 19.26 -5.52 -v -12.04 19.26 -5.30 -v -12.03 19.26 -5.40 -v -11.94 19.26 -5.23 -v -11.94 19.12 -5.23 -v -13.46 19.12 -5.36 -v -13.46 19.26 -5.36 -v -15.89 23.34 -8.84 -v -15.35 23.34 -8.06 -v -16.03 24.92 -7.59 -v -16.57 24.92 -8.36 -v -16.50 28.41 -8.43 -v -15.60 28.41 -9.06 -v -15.96 28.41 -7.66 -v -15.06 28.41 -8.29 -v -16.70 27.21 -10.37 -v -16.71 27.52 -10.80 -v -16.71 26.21 -10.80 -v -16.70 26.24 -10.37 -v -16.61 26.26 -10.03 -v -16.71 26.26 -10.04 -v -16.71 26.12 -10.04 -v -16.61 26.12 -10.03 -v -16.69 27.75 -10.80 -v -16.78 27.75 -10.81 -v -16.74 27.30 -10.15 -v -16.64 27.30 -10.15 -v -16.48 26.12 -11.55 -v -16.58 26.12 -11.56 -v -16.58 26.26 -11.56 -v -16.48 26.26 -11.55 -v -16.69 26.07 -10.80 -v -16.78 26.07 -10.81 -v -16.62 26.12 -11.45 -v -16.53 26.12 -11.45 -v -16.84 26.12 -10.16 -v -16.84 26.26 -10.16 -v -16.88 26.24 -10.39 -v -16.78 27.52 -10.81 -v -16.78 27.21 -10.38 -v -16.73 26.26 -11.46 -v -16.73 26.12 -11.46 -v -16.81 26.25 -11.24 -v -16.89 26.07 -10.82 -v -16.89 26.21 -10.82 -v -16.63 27.21 -11.23 -v -16.63 26.25 -11.23 -v -16.53 27.30 -11.45 -v -16.62 27.30 -11.45 -v -16.64 26.12 -10.15 -v -16.74 26.12 -10.15 -v -16.70 27.21 -11.23 -v -16.78 26.24 -10.38 -v -16.70 26.25 -11.23 -v -16.78 26.21 -10.81 -v -16.62 26.26 -11.45 -v -16.53 26.26 -11.45 -v -16.74 26.26 -10.15 -v -16.64 26.26 -10.15 -v -16.82 26.26 -10.05 -v -16.82 26.12 -10.05 -v -16.68 26.12 -11.57 -v -16.68 26.26 -11.57 -v -15.67 12.70 -13.02 -v -16.15 12.70 -12.20 -v -16.86 14.28 -12.61 -v -16.39 14.28 -13.43 -v -16.69 17.34 -13.61 -v -15.74 17.34 -13.06 -v -17.17 17.34 -12.79 -v -16.21 17.34 -12.24 -v -16.83 28.50 -13.14 -v -17.49 28.50 -10.68 -v -17.49 30.29 -10.68 -v -16.83 30.29 -13.14 -v -15.03 28.50 -14.94 -v -15.03 30.29 -14.94 -v -12.57 28.50 -15.60 -v -12.57 30.29 -15.60 -v -10.10 28.50 -14.94 -v -10.10 30.29 -14.94 -v -8.30 28.50 -13.14 -v -8.30 30.29 -13.14 -v -7.64 28.50 -10.68 -v -7.64 30.29 -10.68 -v -8.30 28.50 -8.21 -v -8.30 30.29 -8.21 -v -10.10 28.50 -6.41 -v -10.10 30.29 -6.41 -v -12.57 28.50 -5.75 -v -12.57 30.29 -5.75 -v -15.03 28.50 -6.41 -v -15.03 30.29 -6.41 -v -16.83 28.50 -8.21 -v -16.83 30.29 -8.21 -v -16.78 30.29 -10.68 -v -16.21 30.29 -12.78 -v -15.03 30.90 -14.94 -v -16.83 30.90 -13.14 -v -16.21 30.90 -12.78 -v -14.67 30.90 -14.32 -v -14.67 30.29 -14.32 -v -12.57 30.29 -14.89 -v -10.10 30.90 -14.94 -v -12.57 30.90 -15.60 -v -12.57 30.90 -14.89 -v -10.46 30.90 -14.32 -v -10.46 30.29 -14.32 -v -8.92 30.29 -12.78 -v -7.64 30.90 -10.68 -v -8.30 30.90 -13.14 -v -8.92 30.90 -12.78 -v -8.36 30.90 -10.68 -v -8.36 30.29 -10.68 -v -8.92 30.29 -8.57 -v -10.10 30.90 -6.41 -v -8.30 30.90 -8.21 -v -8.92 30.90 -8.57 -v -10.46 30.90 -7.03 -v -10.46 30.29 -7.03 -v -12.57 30.29 -6.47 -v -15.03 30.90 -6.41 -v -12.57 30.90 -5.75 -v -12.57 30.90 -6.47 -v -14.67 30.90 -7.03 -v -14.67 30.29 -7.03 -v -16.21 30.29 -8.57 -v -17.49 30.90 -10.68 -v -16.83 30.90 -8.21 -v -16.21 30.90 -8.57 -v -16.78 30.90 -10.68 -v -16.78 29.42 -10.68 -v -16.21 29.42 -12.78 -v -14.67 29.42 -14.32 -v -12.57 29.42 -14.89 -v -10.46 29.42 -14.32 -v -8.92 29.42 -12.78 -v -8.36 29.42 -10.68 -v -8.92 29.42 -8.57 -v -10.46 29.42 -7.03 -v -12.57 29.42 -6.47 -v -14.67 29.42 -7.03 -v -16.21 29.42 -8.57 -v -12.57 29.42 -10.68 -v 15.69 11.78 11.98 -v 15.69 11.78 -12.46 -v 10.74 17.79 -7.40 -v 10.74 17.79 7.40 -v -15.69 11.78 -12.46 -v -10.74 17.79 -7.40 -v -15.69 11.78 11.98 -v -10.74 17.79 7.40 -v 12.89 0.00 11.03 -v 12.89 0.00 -11.03 -v 12.89 11.78 -11.03 -v 12.89 11.78 11.03 -v -12.89 0.00 -11.03 -v -12.89 11.78 -11.03 -v -23.42 0.00 -6.76 -v -23.42 0.00 6.76 -v -23.42 6.95 6.76 -v -23.42 6.95 -6.76 -v -12.89 0.00 11.03 -v -12.89 11.78 11.03 -v 8.74 17.79 -3.62 -v 8.74 17.79 3.62 -v -8.74 17.79 -3.62 -v -8.74 17.79 3.62 -v -12.89 6.95 6.76 -v -12.89 0.00 6.76 -v -12.89 6.95 -6.76 -v -12.89 0.00 -6.76 -v -9.46 12.70 7.57 -v -8.74 14.28 7.16 -v -8.27 14.28 7.98 -v -8.98 12.70 8.39 -v -9.39 17.34 7.53 -v -8.44 17.34 6.98 -v -7.97 17.34 7.80 -v -8.92 17.34 8.35 -v -9.31 28.15 -0.00 -v -9.31 23.30 4.54 -v 0.00 22.65 4.30 -v -0.11 25.84 -0.00 -v -9.31 27.72 -0.00 -v -9.31 22.87 4.55 -v 0.00 22.23 4.31 -v 0.00 22.65 -4.30 -v -9.31 23.30 -4.54 -v -9.31 22.87 -4.55 -v 0.00 22.23 -4.31 -v 9.31 28.15 -0.00 -v 9.31 23.30 4.54 -v 9.31 27.72 -0.00 -v 9.31 22.87 4.55 -v 9.31 23.30 -4.54 -v 9.31 22.87 -4.55 -v 4.76 26.71 -0.63 -v 5.87 26.95 -0.63 -v 5.91 26.75 -0.63 -v 4.80 26.52 -0.63 -v 4.68 27.10 -0.11 -v 5.79 27.34 -0.11 -v 4.72 26.91 -0.11 -v 5.79 27.35 -0.00 -v 4.68 27.12 -0.00 -v 4.72 26.93 -0.00 -v 5.91 26.75 0.63 -v 5.87 26.95 0.63 -v 4.76 26.71 0.63 -v 4.80 26.52 0.63 -v 5.79 27.34 0.11 -v 4.68 27.10 0.11 -v 4.72 26.91 0.11 -v 3.88 26.49 -0.63 -v 5.00 26.69 -0.63 -v 5.03 26.49 -0.63 -v 3.91 26.30 -0.63 -v 3.81 26.89 -0.11 -v 4.93 27.08 -0.11 -v 3.84 26.69 -0.11 -v 4.92 27.09 -0.00 -v 3.81 26.90 -0.00 -v 3.84 26.71 -0.00 -v 5.03 26.49 0.63 -v 5.00 26.69 0.63 -v 3.88 26.49 0.63 -v 3.91 26.30 0.63 -v 4.93 27.08 0.11 -v 3.81 26.89 0.11 -v 3.84 26.69 0.11 -v 2.89 26.32 -0.63 -v 4.01 26.46 -0.63 -v 4.04 26.27 -0.63 -v 2.91 26.13 -0.63 -v 2.84 26.72 -0.11 -v 3.96 26.86 -0.11 -v 2.86 26.53 -0.11 -v 3.96 26.87 -0.00 -v 2.84 26.74 -0.00 -v 2.86 26.54 -0.00 -v 4.04 26.27 0.63 -v 4.01 26.46 0.63 -v 2.89 26.32 0.63 -v 2.91 26.13 0.63 -v 3.96 26.86 0.11 -v 2.84 26.72 0.11 -v 2.86 26.53 0.11 -v 1.88 26.15 -0.63 -v 3.00 26.29 -0.63 -v 3.02 26.09 -0.63 -v 1.90 25.96 -0.63 -v 1.83 26.55 -0.11 -v 2.95 26.69 -0.11 -v 1.85 26.36 -0.11 -v 2.95 26.70 -0.00 -v 1.83 26.56 -0.00 -v 1.85 26.37 -0.00 -v 3.02 26.09 0.63 -v 3.00 26.29 0.63 -v 1.88 26.15 0.63 -v 1.90 25.96 0.63 -v 2.95 26.69 0.11 -v 1.83 26.55 0.11 -v 1.85 26.36 0.11 -v 0.78 26.08 -0.63 -v 1.91 26.12 -0.63 -v 1.92 25.93 -0.63 -v 0.79 25.89 -0.63 -v 0.77 26.49 -0.11 -v 1.90 26.52 -0.11 -v 0.77 26.29 -0.11 -v 1.90 26.54 -0.00 -v 0.77 26.50 -0.00 -v 0.77 26.30 -0.00 -v 1.92 25.93 0.63 -v 1.91 26.12 0.63 -v 0.78 26.08 0.63 -v 0.79 25.89 0.63 -v 1.90 26.52 0.11 -v 0.77 26.49 0.11 -v 0.77 26.29 0.11 -v -0.35 26.05 -0.63 -v 0.78 26.11 -0.63 -v 0.79 25.91 -0.63 -v -0.34 25.85 -0.63 -v -0.37 26.45 -0.11 -v 0.76 26.51 -0.11 -v -0.36 26.25 -0.11 -v 0.76 26.52 -0.00 -v -0.38 26.46 -0.00 -v -0.37 26.27 -0.00 -v 0.79 25.91 0.63 -v 0.78 26.11 0.63 -v -0.35 26.05 0.63 -v -0.34 25.85 0.63 -v 0.76 26.51 0.11 -v -0.37 26.45 0.11 -v -0.36 26.25 0.11 -v 6.98 27.27 -0.63 -v 8.09 27.50 -0.63 -v 8.13 27.31 -0.63 -v 7.02 27.08 -0.63 -v 6.90 27.66 -0.11 -v 8.01 27.90 -0.11 -v 6.94 27.47 -0.11 -v 8.00 27.91 -0.00 -v 6.89 27.68 -0.00 -v 6.93 27.48 -0.00 -v 8.13 27.31 0.63 -v 8.09 27.50 0.63 -v 6.98 27.27 0.63 -v 7.02 27.08 0.63 -v 8.01 27.90 0.11 -v 6.90 27.66 0.11 -v 6.94 27.47 0.11 -v 5.87 26.96 -0.63 -v 6.98 27.20 -0.63 -v 7.02 27.01 -0.63 -v 5.91 26.77 -0.63 -v 5.79 27.36 -0.11 -v 6.90 27.59 -0.11 -v 5.83 27.17 -0.11 -v 6.89 27.60 -0.00 -v 5.79 27.37 -0.00 -v 5.83 27.18 -0.00 -v 7.02 27.01 0.63 -v 6.98 27.20 0.63 -v 5.87 26.96 0.63 -v 5.91 26.77 0.63 -v 6.90 27.59 0.11 -v 5.79 27.36 0.11 -v 5.83 27.17 0.11 -v -6.20 26.77 -0.63 -v -6.16 26.96 -0.63 -v -5.05 26.72 -0.63 -v -5.09 26.53 -0.63 -v -4.97 27.12 -0.11 -v -6.08 27.35 -0.11 -v -5.01 26.92 -0.11 -v -6.07 27.36 -0.00 -v -4.96 27.13 -0.00 -v -5.01 26.94 -0.00 -v -5.05 26.72 0.63 -v -6.16 26.96 0.63 -v -6.20 26.77 0.63 -v -5.09 26.53 0.63 -v -4.97 27.12 0.11 -v -6.08 27.35 0.11 -v -5.01 26.92 0.11 -v -5.32 26.52 -0.63 -v -5.28 26.71 -0.63 -v -4.17 26.51 -0.63 -v -4.20 26.32 -0.63 -v -4.10 26.91 -0.11 -v -5.21 27.11 -0.11 -v -4.13 26.72 -0.11 -v -5.21 27.12 -0.00 -v -4.10 26.92 -0.00 -v -4.13 26.73 -0.00 -v -4.17 26.51 0.63 -v -5.28 26.71 0.63 -v -5.32 26.52 0.63 -v -4.20 26.32 0.63 -v -4.10 26.91 0.11 -v -5.21 27.11 0.11 -v -4.13 26.72 0.11 -v -4.32 26.27 -0.63 -v -4.30 26.46 -0.63 -v -3.18 26.32 -0.63 -v -3.20 26.13 -0.63 -v -3.13 26.72 -0.11 -v -4.25 26.86 -0.11 -v -3.15 26.53 -0.11 -v -4.25 26.87 -0.00 -v -3.13 26.73 -0.00 -v -3.15 26.54 -0.00 -v -3.18 26.32 0.63 -v -4.30 26.46 0.63 -v -4.32 26.27 0.63 -v -3.20 26.13 0.63 -v -3.13 26.72 0.11 -v -4.25 26.86 0.11 -v -3.15 26.53 0.11 -v -3.31 26.05 -0.63 -v -3.29 26.24 -0.63 -v -2.16 26.11 -0.63 -v -2.19 25.91 -0.63 -v -2.12 26.50 -0.11 -v -3.24 26.64 -0.11 -v -2.14 26.31 -0.11 -v -3.24 26.65 -0.00 -v -2.11 26.52 -0.00 -v -2.14 26.32 -0.00 -v -2.16 26.11 0.63 -v -3.29 26.24 0.63 -v -3.31 26.05 0.63 -v -2.19 25.91 0.63 -v -2.12 26.50 0.11 -v -3.24 26.64 0.11 -v -2.14 26.31 0.11 -v -2.21 25.88 -0.63 -v -2.20 26.08 -0.63 -v -1.07 26.04 -0.63 -v -1.07 25.84 -0.63 -v -1.05 26.44 -0.11 -v -2.19 26.48 -0.11 -v -1.06 26.25 -0.11 -v -2.19 26.49 -0.00 -v -1.05 26.45 -0.00 -v -1.06 26.26 -0.00 -v -1.07 26.04 0.63 -v -2.20 26.08 0.63 -v -2.21 25.88 0.63 -v -1.07 25.84 0.63 -v -1.05 26.44 0.11 -v -2.19 26.48 0.11 -v -1.06 26.25 0.11 -v -1.08 25.87 -0.63 -v -1.07 26.06 -0.63 -v 0.07 26.00 -0.63 -v 0.06 25.80 -0.63 -v 0.09 26.40 -0.11 -v -1.04 26.46 -0.11 -v 0.08 26.21 -0.11 -v -1.04 26.47 -0.00 -v 0.09 26.41 -0.00 -v 0.08 26.22 -0.00 -v 0.07 26.00 0.63 -v -1.07 26.06 0.63 -v -1.08 25.87 0.63 -v 0.06 25.80 0.63 -v 0.09 26.40 0.11 -v -1.04 26.46 0.11 -v 0.08 26.21 0.11 -v -8.19 27.32 -0.63 -v -8.15 27.51 -0.63 -v -7.04 27.28 -0.63 -v -7.08 27.09 -0.63 -v -6.96 27.67 -0.11 -v -8.07 27.90 -0.11 -v -7.00 27.48 -0.11 -v -8.06 27.92 -0.00 -v -6.95 27.68 -0.00 -v -6.99 27.49 -0.00 -v -7.04 27.28 0.63 -v -8.15 27.51 0.63 -v -8.19 27.32 0.63 -v -7.08 27.09 0.63 -v -6.96 27.67 0.11 -v -8.07 27.90 0.11 -v -7.00 27.48 0.11 -v -7.06 27.02 -0.63 -v -7.02 27.21 -0.63 -v -5.92 26.97 -0.63 -v -5.96 26.78 -0.63 -v -5.83 27.37 -0.11 -v -6.94 27.60 -0.11 -v -5.87 27.18 -0.11 -v -6.94 27.61 -0.00 -v -5.83 27.38 -0.00 -v -5.87 27.19 -0.00 -v -5.92 26.97 0.63 -v -7.02 27.21 0.63 -v -7.06 27.02 0.63 -v -5.96 26.78 0.63 -v -5.83 27.37 0.11 -v -6.94 27.60 0.11 -v -5.87 27.18 0.11 -v -9.18 27.83 -0.63 -v -8.10 27.48 -0.63 -v -8.16 27.29 -0.63 -v -9.24 27.64 -0.63 -v -9.05 28.21 -0.11 -v -7.98 27.86 -0.11 -v -9.11 28.02 -0.11 -v -7.97 27.87 -0.00 -v -9.05 28.22 -0.00 -v -9.11 28.04 -0.00 -v -8.16 27.29 0.63 -v -8.10 27.48 0.63 -v -9.18 27.83 0.63 -v -9.24 27.64 0.63 -v -7.98 27.86 0.11 -v -9.05 28.21 0.11 -v -9.11 28.02 0.11 -v 8.19 27.28 -0.63 -v 8.13 27.46 -0.63 -v 9.21 27.81 -0.63 -v 9.27 27.63 -0.63 -v 9.08 28.20 -0.11 -v 8.01 27.84 -0.11 -v 9.15 28.01 -0.11 -v 8.00 27.86 -0.00 -v 9.08 28.21 -0.00 -v 9.14 28.02 -0.00 -v 9.21 27.81 0.63 -v 8.13 27.46 0.63 -v 8.19 27.28 0.63 -v 9.27 27.63 0.63 -v 9.08 28.20 0.11 -v 8.01 27.84 0.11 -v 9.15 28.01 0.11 -v 9.46 12.70 7.57 -v 8.98 12.70 8.39 -v 8.27 14.28 7.98 -v 8.74 14.28 7.16 -v 8.44 17.34 6.98 -v 9.39 17.34 7.53 -v 7.97 17.34 7.80 -v 8.92 17.34 8.35 -v -15.48 7.80 6.90 -v -15.48 7.80 6.03 -v -17.46 7.80 6.03 -v -17.46 7.80 6.90 -v -15.48 6.95 6.90 -v -15.48 6.95 6.03 -v -17.46 6.95 6.03 -v -17.46 6.95 6.90 -v -18.47 7.80 6.90 -v -18.47 7.80 6.03 -v -20.45 7.80 6.03 -v -20.45 7.80 6.90 -v -18.47 6.95 6.90 -v -18.47 6.95 6.03 -v -20.45 6.95 6.03 -v -20.45 6.95 6.90 -v -21.45 7.80 6.90 -v -21.45 7.80 6.03 -v -23.44 7.80 6.03 -v -23.44 7.80 6.90 -v -21.45 6.95 6.90 -v -21.45 6.95 6.03 -v -23.44 6.95 6.03 -v -23.44 6.95 6.90 -v -23.40 7.80 5.50 -v -22.53 7.80 5.50 -v -22.53 7.80 3.51 -v -23.40 7.80 3.51 -v -23.40 6.95 5.50 -v -22.53 6.95 5.50 -v -22.53 6.95 3.51 -v -23.40 6.95 3.51 -v -23.40 7.80 2.51 -v -22.53 7.80 2.51 -v -22.53 7.80 0.53 -v -23.40 7.80 0.53 -v -23.40 6.95 2.51 -v -22.53 6.95 2.51 -v -22.53 6.95 0.53 -v -23.40 6.95 0.53 -v -23.40 7.80 -0.48 -v -22.53 7.80 -0.48 -v -22.53 7.80 -2.46 -v -23.40 7.80 -2.46 -v -23.40 6.95 -0.48 -v -22.53 6.95 -0.48 -v -22.53 6.95 -2.46 -v -23.40 6.95 -2.46 -v -23.40 7.80 -3.47 -v -22.53 7.80 -3.47 -v -22.53 7.80 -5.45 -v -23.40 7.80 -5.45 -v -23.40 6.95 -3.47 -v -22.53 6.95 -3.47 -v -22.53 6.95 -5.45 -v -23.40 6.95 -5.45 -v -21.45 7.80 -6.02 -v -21.45 7.80 -6.88 -v -23.44 7.80 -6.88 -v -23.44 7.80 -6.02 -v -21.45 6.95 -6.02 -v -21.45 6.95 -6.88 -v -23.44 6.95 -6.88 -v -23.44 6.95 -6.02 -v -18.47 7.80 -6.02 -v -18.47 7.80 -6.88 -v -20.45 7.80 -6.88 -v -20.45 7.80 -6.02 -v -18.47 6.95 -6.02 -v -18.47 6.95 -6.88 -v -20.45 6.95 -6.88 -v -20.45 6.95 -6.02 -v -15.48 7.80 -6.02 -v -15.48 7.80 -6.88 -v -17.46 7.80 -6.88 -v -17.46 7.80 -6.02 -v -15.48 6.95 -6.02 -v -15.48 6.95 -6.88 -v -17.46 6.95 -6.88 -v -17.46 6.95 -6.02 -v -7.10 7.80 -12.06 -v -7.10 7.80 -12.93 -v -9.08 7.80 -12.93 -v -9.08 7.80 -12.06 -v -7.10 6.95 -12.06 -v -7.10 6.95 -12.93 -v -9.08 6.95 -12.93 -v -9.08 6.95 -12.06 -v -4.46 7.80 -12.06 -v -4.46 7.80 -12.93 -v -6.45 7.80 -12.93 -v -6.45 7.80 -12.06 -v -4.46 6.95 -12.06 -v -4.46 6.95 -12.93 -v -6.45 6.95 -12.93 -v -6.45 6.95 -12.06 -v -1.83 7.80 -12.06 -v -1.83 7.80 -12.93 -v -3.81 7.80 -12.93 -v -3.81 7.80 -12.06 -v -1.83 6.95 -12.06 -v -1.83 6.95 -12.93 -v -3.81 6.95 -12.93 -v -3.81 6.95 -12.06 -v 0.81 7.80 -12.06 -v 0.81 7.80 -12.93 -v -1.17 7.80 -12.93 -v -1.17 7.80 -12.06 -v 0.81 6.95 -12.06 -v 0.81 6.95 -12.93 -v -1.17 6.95 -12.93 -v -1.17 6.95 -12.06 -v 3.44 7.80 -12.06 -v 3.44 7.80 -12.93 -v 1.46 7.80 -12.93 -v 1.46 7.80 -12.06 -v 3.44 6.95 -12.06 -v 3.44 6.95 -12.93 -v 1.46 6.95 -12.93 -v 1.46 6.95 -12.06 -v 6.08 7.80 -12.06 -v 6.08 7.80 -12.93 -v 4.10 7.80 -12.93 -v 4.10 7.80 -12.06 -v 6.08 6.95 -12.06 -v 6.08 6.95 -12.93 -v 4.10 6.95 -12.93 -v 4.10 6.95 -12.06 -v 8.72 7.80 -12.06 -v 8.72 7.80 -12.93 -v 6.74 7.80 -12.93 -v 6.74 7.80 -12.06 -v 8.72 6.95 -12.06 -v 8.72 6.95 -12.93 -v 6.74 6.95 -12.93 -v 6.74 6.95 -12.06 -v -4.39 18.64 -6.78 -v -4.39 18.64 -7.64 -v -6.37 18.64 -7.64 -v -6.37 18.64 -6.78 -v -4.39 17.79 -6.78 -v -4.39 17.79 -7.64 -v -6.37 17.79 -7.64 -v -6.37 17.79 -6.78 -v -1.66 18.64 -6.78 -v -1.66 18.64 -7.64 -v -3.64 18.64 -7.64 -v -3.64 18.64 -6.78 -v -1.66 17.79 -6.78 -v -1.66 17.79 -7.64 -v -3.64 17.79 -7.64 -v -3.64 17.79 -6.78 -v 1.06 18.64 -6.78 -v 1.06 18.64 -7.64 -v -0.92 18.64 -7.64 -v -0.92 18.64 -6.78 -v 1.06 17.79 -6.78 -v 1.06 17.79 -7.64 -v -0.92 17.79 -7.64 -v -0.92 17.79 -6.78 -v 3.79 18.64 -6.78 -v 3.79 18.64 -7.64 -v 1.80 18.64 -7.64 -v 1.80 18.64 -6.78 -v 3.79 17.79 -6.78 -v 3.79 17.79 -7.64 -v 1.80 17.79 -7.64 -v 1.80 17.79 -6.78 -v 6.51 18.64 -6.78 -v 6.51 18.64 -7.64 -v 4.53 18.64 -7.64 -v 4.53 18.64 -6.78 -v 6.51 17.79 -6.78 -v 6.51 17.79 -7.64 -v 4.53 17.79 -7.64 -v 4.53 17.79 -6.78 -v 9.24 18.64 -6.78 -v 9.24 18.64 -7.64 -v 7.25 18.64 -7.64 -v 7.25 18.64 -6.78 -v 9.24 17.79 -6.78 -v 9.24 17.79 -7.64 -v 7.25 17.79 -7.64 -v 7.25 17.79 -6.78 -v -7.11 18.64 -6.78 -v -7.11 18.64 -7.64 -v -9.09 18.64 -7.64 -v -9.09 18.64 -6.78 -v -7.11 17.79 -6.78 -v -7.11 17.79 -7.64 -v -9.09 17.79 -7.64 -v -9.09 17.79 -6.78 -v -9.92 18.64 -6.55 -v -10.78 18.64 -6.55 -v -10.78 18.64 -4.56 -v -9.92 18.64 -4.56 -v -9.92 17.79 -6.55 -v -10.78 17.79 -6.55 -v -10.78 17.79 -4.56 -v -9.92 17.79 -4.56 -v -9.92 18.64 -3.82 -v -10.78 18.64 -3.82 -v -10.78 18.64 -1.84 -v -9.92 18.64 -1.84 -v -9.92 17.79 -3.82 -v -10.78 17.79 -3.82 -v -10.78 17.79 -1.84 -v -9.92 17.79 -1.84 -v -9.92 18.64 -1.10 -v -10.78 18.64 -1.10 -v -10.78 18.64 0.88 -v -9.92 18.64 0.88 -v -9.92 17.79 -1.10 -v -10.78 17.79 -1.10 -v -10.78 17.79 0.88 -v -9.92 17.79 0.88 -v -9.92 18.64 1.63 -v -10.78 18.64 1.63 -v -10.78 18.64 3.61 -v -9.92 18.64 3.61 -v -9.92 17.79 1.63 -v -10.78 17.79 1.63 -v -10.78 17.79 3.61 -v -9.92 17.79 3.61 -v -7.11 18.64 7.48 -v -7.11 18.64 6.62 -v -9.09 18.64 6.62 -v -9.09 18.64 7.48 -v -7.11 17.79 7.48 -v -7.11 17.79 6.62 -v -9.09 17.79 6.62 -v -9.09 17.79 7.48 -v -4.39 18.64 7.48 -v -4.39 18.64 6.62 -v -6.37 18.64 6.62 -v -6.37 18.64 7.48 -v -4.39 17.79 7.48 -v -4.39 17.79 6.62 -v -6.37 17.79 6.62 -v -6.37 17.79 7.48 -v -1.66 18.64 7.48 -v -1.66 18.64 6.62 -v -3.64 18.64 6.62 -v -3.64 18.64 7.48 -v -1.66 17.79 7.48 -v -1.66 17.79 6.62 -v -3.64 17.79 6.62 -v -3.64 17.79 7.48 -v 1.06 18.64 7.48 -v 1.06 18.64 6.62 -v -0.92 18.64 6.62 -v -0.92 18.64 7.48 -v 1.06 17.79 7.48 -v 1.06 17.79 6.62 -v -0.92 17.79 6.62 -v -0.92 17.79 7.48 -v 3.79 18.64 7.48 -v 3.79 18.64 6.62 -v 1.80 18.64 6.62 -v 1.80 18.64 7.48 -v 3.79 17.79 7.48 -v 3.79 17.79 6.62 -v 1.80 17.79 6.62 -v 1.80 17.79 7.48 -v 9.24 18.64 7.48 -v 9.24 18.64 6.62 -v 7.25 18.64 6.62 -v 7.25 18.64 7.48 -v 9.24 17.79 7.48 -v 9.24 17.79 6.62 -v 7.25 17.79 6.62 -v 7.25 17.79 7.48 -v 6.51 18.64 7.48 -v 6.51 18.64 6.62 -v 4.53 18.64 6.62 -v 4.53 18.64 7.48 -v 6.51 17.79 7.48 -v 6.51 17.79 6.62 -v 4.53 17.79 6.62 -v 4.53 17.79 7.48 -v 10.85 18.64 -6.55 -v 9.99 18.64 -6.55 -v 9.99 18.64 -4.56 -v 10.85 18.64 -4.56 -v 10.85 17.79 -6.55 -v 9.99 17.79 -6.55 -v 9.99 17.79 -4.56 -v 10.85 17.79 -4.56 -v 10.85 18.64 -3.82 -v 9.99 18.64 -3.82 -v 9.99 18.64 -1.84 -v 10.85 18.64 -1.84 -v 10.85 17.79 -3.82 -v 9.99 17.79 -3.82 -v 9.99 17.79 -1.84 -v 10.85 17.79 -1.84 -v 10.85 18.64 -1.10 -v 9.99 18.64 -1.10 -v 9.99 18.64 0.88 -v 10.85 18.64 0.88 -v 10.85 17.79 -1.10 -v 9.99 17.79 -1.10 -v 9.99 17.79 0.88 -v 10.85 17.79 0.88 -v 10.85 18.64 1.63 -v 9.99 18.64 1.63 -v 9.99 18.64 3.61 -v 10.85 18.64 3.61 -v 10.85 17.79 1.63 -v 9.99 17.79 1.63 -v 9.99 17.79 3.61 -v 10.85 17.79 3.61 -v 10.85 18.64 4.35 -v 9.99 18.64 4.35 -v 9.99 18.64 6.33 -v 10.85 18.64 6.33 -v 10.85 17.79 4.35 -v 9.99 17.79 4.35 -v 9.99 17.79 6.33 -v 10.85 17.79 6.33 -v 11.17 6.95 -11.03 -v 11.17 6.95 -12.83 -v -11.17 6.95 -12.83 -v -11.17 6.95 -11.03 -v 11.17 -0.02 -12.83 -v -11.17 -0.02 -12.83 -v -19.96 4.66 -6.77 -v -19.60 5.22 -6.77 -v -19.60 2.88 -6.77 -v -19.96 2.92 -6.77 -v -20.24 2.96 -6.83 -v -20.24 2.71 -6.83 -v -20.24 2.71 -6.75 -v -20.24 2.96 -6.75 -v -19.60 5.63 -6.83 -v -20.15 4.82 -6.83 -v -20.15 4.82 -6.75 -v -19.60 5.63 -6.75 -v -18.96 2.71 -6.83 -v -18.96 2.96 -6.83 -v -18.96 2.96 -6.75 -v -18.96 2.71 -6.75 -v -19.60 2.63 -6.83 -v -19.05 2.71 -6.83 -v -19.05 2.71 -6.75 -v -19.60 2.63 -6.75 -v -20.15 2.71 -6.92 -v -20.15 2.96 -6.92 -v -19.96 2.92 -6.92 -v -19.60 5.22 -6.83 -v -19.96 4.66 -6.83 -v -19.05 2.96 -6.92 -v -19.05 2.71 -6.92 -v -19.24 2.94 -6.92 -v -19.60 2.63 -6.92 -v -19.60 2.88 -6.92 -v -19.24 4.66 -6.77 -v -19.24 2.94 -6.77 -v -19.05 4.82 -6.83 -v -19.05 4.82 -6.75 -v -20.15 2.71 -6.83 -v -20.15 2.71 -6.75 -v -19.24 4.66 -6.83 -v -19.96 2.92 -6.83 -v -19.24 2.94 -6.83 -v -19.60 2.88 -6.83 -v -19.05 2.96 -6.83 -v -19.05 2.96 -6.75 -v -20.15 2.96 -6.83 -v -20.15 2.96 -6.75 -v -20.24 2.96 -6.92 -v -20.24 2.71 -6.92 -v -18.96 2.71 -6.92 -v -18.96 2.96 -6.92 -v -6.81 4.66 -12.83 -v -6.45 5.22 -12.83 -v -6.45 2.88 -12.83 -v -6.81 2.92 -12.83 -v -7.09 2.96 -12.89 -v -7.09 2.71 -12.89 -v -7.09 2.71 -12.81 -v -7.09 2.96 -12.81 -v -6.45 5.63 -12.89 -v -6.99 4.82 -12.89 -v -6.99 4.82 -12.81 -v -6.45 5.63 -12.81 -v -5.81 2.71 -12.89 -v -5.81 2.96 -12.89 -v -5.81 2.96 -12.81 -v -5.81 2.71 -12.81 -v -6.45 2.63 -12.89 -v -5.90 2.71 -12.89 -v -5.90 2.71 -12.81 -v -6.45 2.63 -12.81 -v -6.99 2.71 -12.98 -v -6.99 2.96 -12.98 -v -6.81 2.92 -12.98 -v -6.45 5.22 -12.89 -v -6.81 4.66 -12.89 -v -5.90 2.96 -12.98 -v -5.90 2.71 -12.98 -v -6.09 2.94 -12.98 -v -6.45 2.63 -12.98 -v -6.45 2.88 -12.98 -v -6.09 4.66 -12.83 -v -6.09 2.94 -12.83 -v -5.90 4.82 -12.89 -v -5.90 4.82 -12.81 -v -6.99 2.71 -12.89 -v -6.99 2.71 -12.81 -v -6.09 4.66 -12.89 -v -6.81 2.92 -12.89 -v -6.09 2.94 -12.89 -v -6.45 2.88 -12.89 -v -5.90 2.96 -12.89 -v -5.90 2.96 -12.81 -v -6.99 2.96 -12.89 -v -6.99 2.96 -12.81 -v -7.09 2.96 -12.98 -v -7.09 2.71 -12.98 -v -5.81 2.71 -12.98 -v -5.81 2.96 -12.98 -v -4.17 10.56 -11.04 -v -3.81 11.12 -11.04 -v -3.81 8.77 -11.04 -v -4.17 8.82 -11.04 -v -4.45 8.86 -11.10 -v -4.45 8.61 -11.10 -v -4.45 8.61 -11.02 -v -4.45 8.86 -11.02 -v -3.81 11.53 -11.10 -v -4.36 10.72 -11.10 -v -4.36 10.72 -11.02 -v -3.81 11.53 -11.02 -v -3.17 8.61 -11.10 -v -3.17 8.86 -11.10 -v -3.17 8.86 -11.02 -v -3.17 8.61 -11.02 -v -3.81 8.52 -11.10 -v -3.27 8.61 -11.10 -v -3.27 8.61 -11.02 -v -3.81 8.52 -11.02 -v -4.36 8.61 -11.19 -v -4.36 8.86 -11.19 -v -4.17 8.82 -11.19 -v -3.81 11.12 -11.10 -v -4.17 10.56 -11.10 -v -3.27 8.86 -11.19 -v -3.27 8.61 -11.19 -v -3.45 8.83 -11.19 -v -3.81 8.52 -11.19 -v -3.81 8.77 -11.19 -v -3.45 10.56 -11.04 -v -3.45 8.83 -11.04 -v -3.27 10.72 -11.10 -v -3.27 10.72 -11.02 -v -4.36 8.61 -11.10 -v -4.36 8.61 -11.02 -v -3.45 10.56 -11.10 -v -4.17 8.82 -11.10 -v -3.45 8.83 -11.10 -v -3.81 8.77 -11.10 -v -3.27 8.86 -11.10 -v -3.27 8.86 -11.02 -v -4.36 8.86 -11.10 -v -4.36 8.86 -11.02 -v -4.45 8.86 -11.19 -v -4.45 8.61 -11.19 -v -3.17 8.61 -11.19 -v -3.17 8.86 -11.19 -v 3.09 10.56 -11.04 -v 3.44 11.12 -11.04 -v 3.44 8.77 -11.04 -v 3.09 8.82 -11.04 -v 2.81 8.86 -11.10 -v 2.81 8.61 -11.10 -v 2.81 8.61 -11.02 -v 2.81 8.86 -11.02 -v 3.44 11.53 -11.10 -v 2.90 10.72 -11.10 -v 2.90 10.72 -11.02 -v 3.44 11.53 -11.02 -v 4.08 8.61 -11.10 -v 4.08 8.86 -11.10 -v 4.08 8.86 -11.02 -v 4.08 8.61 -11.02 -v 3.44 8.52 -11.10 -v 3.99 8.61 -11.10 -v 3.99 8.61 -11.02 -v 3.44 8.52 -11.02 -v 2.90 8.61 -11.19 -v 2.90 8.86 -11.19 -v 3.09 8.82 -11.19 -v 3.44 11.12 -11.10 -v 3.09 10.56 -11.10 -v 3.99 8.86 -11.19 -v 3.99 8.61 -11.19 -v 3.80 8.83 -11.19 -v 3.44 8.52 -11.19 -v 3.44 8.77 -11.19 -v 3.80 10.56 -11.04 -v 3.80 8.83 -11.04 -v 3.99 10.72 -11.10 -v 3.99 10.72 -11.02 -v 2.90 8.61 -11.10 -v 2.90 8.61 -11.02 -v 3.80 10.56 -11.10 -v 3.09 8.82 -11.10 -v 3.80 8.83 -11.10 -v 3.44 8.77 -11.10 -v 3.99 8.86 -11.10 -v 3.99 8.86 -11.02 -v 2.90 8.86 -11.10 -v 2.90 8.86 -11.02 -v 2.81 8.86 -11.19 -v 2.81 8.61 -11.19 -v 4.08 8.61 -11.19 -v 4.08 8.86 -11.19 -v 5.72 4.66 -12.83 -v 6.08 5.22 -12.83 -v 6.08 2.88 -12.83 -v 5.72 2.92 -12.83 -v 5.44 2.96 -12.89 -v 5.44 2.71 -12.89 -v 5.44 2.71 -12.81 -v 5.44 2.96 -12.81 -v 6.08 5.63 -12.89 -v 5.54 4.82 -12.89 -v 5.54 4.82 -12.81 -v 6.08 5.63 -12.81 -v 6.72 2.71 -12.89 -v 6.72 2.96 -12.89 -v 6.72 2.96 -12.81 -v 6.72 2.71 -12.81 -v 6.08 2.63 -12.89 -v 6.63 2.71 -12.89 -v 6.63 2.71 -12.81 -v 6.08 2.63 -12.81 -v 5.54 2.71 -12.98 -v 5.54 2.96 -12.98 -v 5.72 2.92 -12.98 -v 6.08 5.22 -12.89 -v 5.72 4.66 -12.89 -v 6.63 2.96 -12.98 -v 6.63 2.71 -12.98 -v 6.44 2.94 -12.98 -v 6.08 2.63 -12.98 -v 6.08 2.88 -12.98 -v 6.44 4.66 -12.83 -v 6.44 2.94 -12.83 -v 6.63 4.82 -12.89 -v 6.63 4.82 -12.81 -v 5.54 2.71 -12.89 -v 5.54 2.71 -12.81 -v 6.44 4.66 -12.89 -v 5.72 2.92 -12.89 -v 6.44 2.94 -12.89 -v 6.08 2.88 -12.89 -v 6.63 2.96 -12.89 -v 6.63 2.96 -12.81 -v 5.54 2.96 -12.89 -v 5.54 2.96 -12.81 -v 5.44 2.96 -12.98 -v 5.44 2.71 -12.98 -v 6.72 2.71 -12.98 -v 6.72 2.96 -12.98 -v -6.30 20.76 -3.63 -v -5.94 21.32 -3.63 -v -5.94 18.98 -3.63 -v -6.30 19.02 -3.63 -v -6.58 19.06 -3.69 -v -6.58 18.81 -3.69 -v -6.58 18.81 -3.60 -v -6.58 19.06 -3.60 -v -5.94 21.73 -3.69 -v -6.49 20.92 -3.69 -v -6.49 20.92 -3.60 -v -5.94 21.73 -3.60 -v -5.30 18.81 -3.69 -v -5.30 19.06 -3.69 -v -5.30 19.06 -3.60 -v -5.30 18.81 -3.60 -v -5.94 18.73 -3.69 -v -5.40 18.81 -3.69 -v -5.40 18.81 -3.60 -v -5.94 18.73 -3.60 -v -6.49 18.81 -3.78 -v -6.49 19.06 -3.78 -v -6.30 19.02 -3.78 -v -5.94 21.32 -3.69 -v -6.30 20.76 -3.69 -v -5.40 19.06 -3.78 -v -5.40 18.81 -3.78 -v -5.58 19.04 -3.78 -v -5.94 18.73 -3.78 -v -5.94 18.98 -3.78 -v -5.58 20.76 -3.63 -v -5.58 19.04 -3.63 -v -5.40 20.92 -3.69 -v -5.40 20.92 -3.60 -v -6.49 18.81 -3.69 -v -6.49 18.81 -3.60 -v -5.58 20.76 -3.69 -v -6.30 19.02 -3.69 -v -5.58 19.04 -3.69 -v -5.94 18.98 -3.69 -v -5.40 19.06 -3.69 -v -5.40 19.06 -3.60 -v -6.49 19.06 -3.69 -v -6.49 19.06 -3.60 -v -6.58 19.06 -3.78 -v -6.58 18.81 -3.78 -v -5.30 18.81 -3.78 -v -5.30 19.06 -3.78 -v 5.89 20.76 -3.63 -v 6.25 21.32 -3.63 -v 6.25 18.98 -3.63 -v 5.89 19.02 -3.63 -v 5.61 19.06 -3.69 -v 5.61 18.81 -3.69 -v 5.61 18.81 -3.60 -v 5.61 19.06 -3.60 -v 6.25 21.73 -3.69 -v 5.70 20.92 -3.69 -v 5.70 20.92 -3.60 -v 6.25 21.73 -3.60 -v 6.89 18.81 -3.69 -v 6.89 19.06 -3.69 -v 6.89 19.06 -3.60 -v 6.89 18.81 -3.60 -v 6.25 18.73 -3.69 -v 6.79 18.81 -3.69 -v 6.79 18.81 -3.60 -v 6.25 18.73 -3.60 -v 5.70 18.81 -3.78 -v 5.70 19.06 -3.78 -v 5.89 19.02 -3.78 -v 6.25 21.32 -3.69 -v 5.89 20.76 -3.69 -v 6.79 19.06 -3.78 -v 6.79 18.81 -3.78 -v 6.61 19.04 -3.78 -v 6.25 18.73 -3.78 -v 6.25 18.98 -3.78 -v 6.61 20.76 -3.63 -v 6.61 19.04 -3.63 -v 6.79 20.92 -3.69 -v 6.79 20.92 -3.60 -v 5.70 18.81 -3.69 -v 5.70 18.81 -3.60 -v 6.61 20.76 -3.69 -v 5.89 19.02 -3.69 -v 6.61 19.04 -3.69 -v 6.25 18.98 -3.69 -v 6.79 19.06 -3.69 -v 6.79 19.06 -3.60 -v 5.70 19.06 -3.69 -v 5.70 19.06 -3.60 -v 5.61 19.06 -3.78 -v 5.61 18.81 -3.78 -v 6.89 18.81 -3.78 -v 6.89 19.06 -3.78 -v -8.76 20.76 0.36 -v -8.76 21.32 -0.00 -v -8.76 18.98 -0.00 -v -8.76 19.02 0.36 -v -8.82 19.06 0.64 -v -8.82 18.81 0.64 -v -8.74 18.81 0.64 -v -8.74 19.06 0.64 -v -8.82 21.73 -0.00 -v -8.82 20.92 0.55 -v -8.74 20.92 0.55 -v -8.74 21.73 -0.00 -v -8.82 18.81 -0.64 -v -8.82 19.06 -0.64 -v -8.74 19.06 -0.64 -v -8.74 18.81 -0.64 -v -8.82 18.73 -0.00 -v -8.82 18.81 -0.55 -v -8.74 18.81 -0.55 -v -8.74 18.73 -0.00 -v -8.91 18.81 0.55 -v -8.91 19.06 0.55 -v -8.91 19.02 0.36 -v -8.82 21.32 -0.00 -v -8.82 20.76 0.36 -v -8.91 19.06 -0.55 -v -8.91 18.81 -0.55 -v -8.91 19.04 -0.36 -v -8.91 18.73 -0.00 -v -8.91 18.98 -0.00 -v -8.76 20.76 -0.36 -v -8.76 19.04 -0.36 -v -8.82 20.92 -0.55 -v -8.74 20.92 -0.55 -v -8.82 18.81 0.55 -v -8.74 18.81 0.55 -v -8.82 20.76 -0.36 -v -8.82 19.02 0.36 -v -8.82 19.04 -0.36 -v -8.82 18.98 -0.00 -v -8.82 19.06 -0.55 -v -8.74 19.06 -0.55 -v -8.82 19.06 0.55 -v -8.74 19.06 0.55 -v -8.91 19.06 0.64 -v -8.91 18.81 0.64 -v -8.91 18.81 -0.64 -v -8.91 19.06 -0.64 -v -23.42 4.66 -0.35 -v -23.42 2.92 -0.35 -v -23.42 2.88 0.01 -v -23.42 5.22 0.01 -v -23.48 2.96 -0.63 -v -23.40 2.96 -0.63 -v -23.40 2.71 -0.63 -v -23.48 2.71 -0.63 -v -23.48 5.63 0.01 -v -23.40 5.63 0.01 -v -23.40 4.82 -0.54 -v -23.48 4.82 -0.54 -v -23.48 2.71 0.65 -v -23.40 2.71 0.65 -v -23.40 2.96 0.65 -v -23.48 2.96 0.65 -v -23.48 2.63 0.01 -v -23.40 2.63 0.01 -v -23.40 2.71 0.55 -v -23.48 2.71 0.55 -v -23.57 2.71 -0.54 -v -23.57 2.92 -0.35 -v -23.57 2.96 -0.54 -v -23.48 5.22 0.01 -v -23.48 4.66 -0.35 -v -23.57 2.96 0.55 -v -23.57 2.94 0.37 -v -23.57 2.71 0.55 -v -23.57 2.63 0.01 -v -23.57 2.88 0.01 -v -23.42 4.66 0.37 -v -23.42 2.94 0.37 -v -23.48 4.82 0.55 -v -23.40 4.82 0.55 -v -23.48 2.71 -0.54 -v -23.40 2.71 -0.54 -v -23.48 4.66 0.37 -v -23.48 2.92 -0.35 -v -23.48 2.94 0.37 -v -23.48 2.88 0.01 -v -23.48 2.96 0.55 -v -23.40 2.96 0.55 -v -23.40 2.96 -0.54 -v -23.48 2.96 -0.54 -v -23.57 2.71 -0.63 -v -23.57 2.96 -0.63 -v -23.57 2.96 0.65 -v -23.57 2.71 0.65 -v -19.96 4.66 6.78 -v -19.96 2.92 6.78 -v -19.60 2.88 6.78 -v -19.60 5.22 6.78 -v -20.24 2.96 6.85 -v -20.24 2.96 6.76 -v -20.24 2.71 6.76 -v -20.24 2.71 6.85 -v -19.60 5.63 6.85 -v -19.60 5.63 6.76 -v -20.15 4.82 6.76 -v -20.15 4.82 6.85 -v -18.96 2.71 6.85 -v -18.96 2.71 6.76 -v -18.96 2.96 6.76 -v -18.96 2.96 6.85 -v -19.60 2.63 6.85 -v -19.60 2.63 6.76 -v -19.05 2.71 6.76 -v -19.05 2.71 6.85 -v -20.15 2.71 6.94 -v -19.96 2.92 6.94 -v -20.15 2.96 6.94 -v -19.60 5.22 6.85 -v -19.96 4.66 6.85 -v -19.05 2.96 6.94 -v -19.24 2.94 6.94 -v -19.05 2.71 6.94 -v -19.60 2.63 6.94 -v -19.60 2.88 6.94 -v -19.24 4.66 6.78 -v -19.24 2.94 6.78 -v -19.05 4.82 6.85 -v -19.05 4.82 6.76 -v -20.15 2.71 6.85 -v -20.15 2.71 6.76 -v -19.24 4.66 6.85 -v -19.96 2.92 6.85 -v -19.24 2.94 6.85 -v -19.60 2.88 6.85 -v -19.05 2.96 6.85 -v -19.05 2.96 6.76 -v -20.15 2.96 6.76 -v -20.15 2.96 6.85 -v -20.24 2.71 6.94 -v -20.24 2.96 6.94 -v -18.96 2.96 6.94 -v -18.96 2.71 6.94 -v -5.42 9.62 11.04 -v -5.42 7.88 11.04 -v -5.06 7.83 11.04 -v -5.06 10.18 11.04 -v -5.70 7.92 11.10 -v -5.70 7.92 11.01 -v -5.70 7.67 11.01 -v -5.70 7.67 11.10 -v -5.06 10.59 11.10 -v -5.06 10.59 11.01 -v -5.61 9.78 11.01 -v -5.61 9.78 11.10 -v -4.43 7.67 11.10 -v -4.43 7.67 11.01 -v -4.43 7.92 11.01 -v -4.43 7.92 11.10 -v -5.06 7.58 11.10 -v -5.06 7.58 11.01 -v -4.52 7.67 11.01 -v -4.52 7.67 11.10 -v -5.61 7.67 11.19 -v -5.42 7.88 11.19 -v -5.61 7.92 11.19 -v -5.06 10.18 11.10 -v -5.42 9.62 11.10 -v -4.52 7.92 11.19 -v -4.71 7.89 11.19 -v -4.52 7.67 11.19 -v -5.06 7.58 11.19 -v -5.06 7.83 11.19 -v -4.71 9.62 11.04 -v -4.71 7.89 11.04 -v -4.52 9.78 11.10 -v -4.52 9.78 11.01 -v -5.61 7.67 11.10 -v -5.61 7.67 11.01 -v -4.71 9.62 11.10 -v -5.42 7.88 11.10 -v -4.71 7.89 11.10 -v -5.06 7.83 11.10 -v -4.52 7.92 11.10 -v -4.52 7.92 11.01 -v -5.61 7.92 11.01 -v -5.61 7.92 11.10 -v -5.70 7.67 11.19 -v -5.70 7.92 11.19 -v -4.43 7.92 11.19 -v -4.43 7.67 11.19 -v 3.43 9.62 11.04 -v 3.43 7.88 11.04 -v 3.79 7.83 11.04 -v 3.79 10.18 11.04 -v 3.15 7.92 11.10 -v 3.15 7.92 11.01 -v 3.15 7.67 11.01 -v 3.15 7.67 11.10 -v 3.79 10.59 11.10 -v 3.79 10.59 11.01 -v 3.24 9.78 11.01 -v 3.24 9.78 11.10 -v 4.43 7.67 11.10 -v 4.43 7.67 11.01 -v 4.43 7.92 11.01 -v 4.43 7.92 11.10 -v 3.79 7.58 11.10 -v 3.79 7.58 11.01 -v 4.33 7.67 11.01 -v 4.33 7.67 11.10 -v 3.24 7.67 11.19 -v 3.43 7.88 11.19 -v 3.24 7.92 11.19 -v 3.79 10.18 11.10 -v 3.43 9.62 11.10 -v 4.33 7.92 11.19 -v 4.15 7.89 11.19 -v 4.33 7.67 11.19 -v 3.79 7.58 11.19 -v 3.79 7.83 11.19 -v 4.15 9.62 11.04 -v 4.15 7.89 11.04 -v 4.33 9.78 11.10 -v 4.33 9.78 11.01 -v 3.24 7.67 11.10 -v 3.24 7.67 11.01 -v 4.15 9.62 11.10 -v 3.43 7.88 11.10 -v 4.15 7.89 11.10 -v 3.79 7.83 11.10 -v 4.33 7.92 11.10 -v 4.33 7.92 11.01 -v 3.24 7.92 11.01 -v 3.24 7.92 11.10 -v 3.15 7.67 11.19 -v 3.15 7.92 11.19 -v 4.43 7.92 11.19 -v 4.43 7.67 11.19 -v -0.84 4.66 11.04 -v -0.84 2.92 11.04 -v -0.48 2.88 11.04 -v -0.48 5.22 11.04 -v -1.12 2.96 11.10 -v -1.12 2.96 11.01 -v -1.12 2.71 11.01 -v -1.12 2.71 11.10 -v -0.48 5.63 11.10 -v -0.48 5.63 11.01 -v -1.03 4.82 11.01 -v -1.03 4.82 11.10 -v 0.15 2.71 11.10 -v 0.15 2.71 11.01 -v 0.15 2.96 11.01 -v 0.15 2.96 11.10 -v -0.48 2.63 11.10 -v -0.48 2.63 11.01 -v 0.06 2.71 11.01 -v 0.06 2.71 11.10 -v -1.03 2.71 11.19 -v -0.84 2.92 11.19 -v -1.03 2.96 11.19 -v -0.48 5.22 11.10 -v -0.84 4.66 11.10 -v 0.06 2.96 11.19 -v -0.13 2.94 11.19 -v 0.06 2.71 11.19 -v -0.48 2.63 11.19 -v -0.48 2.88 11.19 -v -0.13 4.66 11.04 -v -0.13 2.94 11.04 -v 0.06 4.82 11.10 -v 0.06 4.82 11.01 -v -1.03 2.71 11.10 -v -1.03 2.71 11.01 -v -0.13 4.66 11.10 -v -0.84 2.92 11.10 -v -0.13 2.94 11.10 -v -0.48 2.88 11.10 -v 0.06 2.96 11.10 -v 0.06 2.96 11.01 -v -1.03 2.96 11.01 -v -1.03 2.96 11.10 -v -1.12 2.71 11.19 -v -1.12 2.96 11.19 -v 0.15 2.96 11.19 -v 0.15 2.71 11.19 -v 0.43 20.76 3.64 -v 0.07 21.32 3.64 -v 0.07 18.98 3.64 -v 0.43 19.02 3.64 -v 0.71 19.06 3.70 -v 0.71 18.81 3.70 -v 0.71 18.81 3.61 -v 0.71 19.06 3.61 -v 0.07 21.73 3.70 -v 0.62 20.92 3.70 -v 0.62 20.92 3.61 -v 0.07 21.73 3.61 -v -0.57 18.81 3.70 -v -0.57 19.06 3.70 -v -0.57 19.06 3.61 -v -0.57 18.81 3.61 -v 0.07 18.73 3.70 -v -0.47 18.81 3.70 -v -0.47 18.81 3.61 -v 0.07 18.73 3.61 -v 0.62 18.81 3.79 -v 0.62 19.06 3.79 -v 0.43 19.02 3.79 -v 0.07 21.32 3.70 -v 0.43 20.76 3.70 -v -0.47 19.06 3.79 -v -0.47 18.81 3.79 -v -0.29 19.04 3.79 -v 0.07 18.73 3.79 -v 0.07 18.98 3.79 -v -0.29 20.76 3.64 -v -0.29 19.04 3.64 -v -0.47 20.92 3.70 -v -0.47 20.92 3.61 -v 0.62 18.81 3.70 -v 0.62 18.81 3.61 -v -0.29 20.76 3.70 -v 0.43 19.02 3.70 -v -0.29 19.04 3.70 -v 0.07 18.98 3.70 -v -0.47 19.06 3.70 -v -0.47 19.06 3.61 -v 0.62 19.06 3.70 -v 0.62 19.06 3.61 -v 0.71 19.06 3.79 -v 0.71 18.81 3.79 -v -0.57 18.81 3.79 -v -0.57 19.06 3.79 -v 6.58 20.76 3.64 -v 6.22 21.32 3.64 -v 6.22 18.98 3.64 -v 6.58 19.02 3.64 -v 6.86 19.06 3.70 -v 6.86 18.81 3.70 -v 6.86 18.81 3.61 -v 6.86 19.06 3.61 -v 6.22 21.73 3.70 -v 6.76 20.92 3.70 -v 6.76 20.92 3.61 -v 6.22 21.73 3.61 -v 5.58 18.81 3.70 -v 5.58 19.06 3.70 -v 5.58 19.06 3.61 -v 5.58 18.81 3.61 -v 6.22 18.73 3.70 -v 5.67 18.81 3.70 -v 5.67 18.81 3.61 -v 6.22 18.73 3.61 -v 6.76 18.81 3.79 -v 6.76 19.06 3.79 -v 6.58 19.02 3.79 -v 6.22 21.32 3.70 -v 6.58 20.76 3.70 -v 5.67 19.06 3.79 -v 5.67 18.81 3.79 -v 5.86 19.04 3.79 -v 6.22 18.73 3.79 -v 6.22 18.98 3.79 -v 5.86 20.76 3.64 -v 5.86 19.04 3.64 -v 5.67 20.92 3.70 -v 5.67 20.92 3.61 -v 6.76 18.81 3.70 -v 6.76 18.81 3.61 -v 5.86 20.76 3.70 -v 6.58 19.02 3.70 -v 5.86 19.04 3.70 -v 6.22 18.98 3.70 -v 5.67 19.06 3.70 -v 5.67 19.06 3.61 -v 6.76 19.06 3.70 -v 6.76 19.06 3.61 -v 6.86 19.06 3.79 -v 6.86 18.81 3.79 -v 5.58 18.81 3.79 -v 5.58 19.06 3.79 -v 12.89 4.66 -3.98 -v 12.89 5.22 -3.62 -v 12.89 2.88 -3.62 -v 12.89 2.92 -3.98 -v 12.96 2.96 -4.26 -v 12.96 2.71 -4.26 -v 12.87 2.71 -4.26 -v 12.87 2.96 -4.26 -v 12.96 5.63 -3.62 -v 12.96 4.82 -4.17 -v 12.87 4.82 -4.17 -v 12.87 5.63 -3.62 -v 12.96 2.71 -2.98 -v 12.96 2.96 -2.98 -v 12.87 2.96 -2.98 -v 12.87 2.71 -2.98 -v 12.96 2.63 -3.62 -v 12.96 2.71 -3.08 -v 12.87 2.71 -3.08 -v 12.87 2.63 -3.62 -v 13.05 2.71 -4.17 -v 13.05 2.96 -4.17 -v 13.05 2.92 -3.98 -v 12.96 5.22 -3.62 -v 12.96 4.66 -3.98 -v 13.05 2.96 -3.08 -v 13.05 2.71 -3.08 -v 13.05 2.94 -3.26 -v 13.05 2.63 -3.62 -v 13.05 2.88 -3.62 -v 12.89 4.66 -3.26 -v 12.89 2.94 -3.26 -v 12.96 4.82 -3.08 -v 12.87 4.82 -3.08 -v 12.96 2.71 -4.17 -v 12.87 2.71 -4.17 -v 12.96 4.66 -3.26 -v 12.96 2.92 -3.98 -v 12.96 2.94 -3.26 -v 12.96 2.88 -3.62 -v 12.96 2.96 -3.08 -v 12.87 2.96 -3.08 -v 12.96 2.96 -4.17 -v 12.87 2.96 -4.17 -v 13.05 2.96 -4.26 -v 13.05 2.71 -4.26 -v 13.05 2.71 -2.98 -v 13.05 2.96 -2.98 -v 12.89 4.66 3.26 -v 12.89 5.22 3.62 -v 12.89 2.88 3.62 -v 12.89 2.92 3.26 -v 12.96 2.96 2.98 -v 12.96 2.71 2.98 -v 12.87 2.71 2.98 -v 12.87 2.96 2.98 -v 12.96 5.63 3.62 -v 12.96 4.82 3.08 -v 12.87 4.82 3.08 -v 12.87 5.63 3.62 -v 12.96 2.71 4.26 -v 12.96 2.96 4.26 -v 12.87 2.96 4.26 -v 12.87 2.71 4.26 -v 12.96 2.63 3.62 -v 12.96 2.71 4.17 -v 12.87 2.71 4.17 -v 12.87 2.63 3.62 -v 13.05 2.71 3.08 -v 13.05 2.96 3.08 -v 13.05 2.92 3.26 -v 12.96 5.22 3.62 -v 12.96 4.66 3.26 -v 13.05 2.96 4.17 -v 13.05 2.71 4.17 -v 13.05 2.94 3.98 -v 13.05 2.63 3.62 -v 13.05 2.88 3.62 -v 12.89 4.66 3.98 -v 12.89 2.94 3.98 -v 12.96 4.82 4.17 -v 12.87 4.82 4.17 -v 12.96 2.71 3.08 -v 12.87 2.71 3.08 -v 12.96 4.66 3.98 -v 12.96 2.92 3.26 -v 12.96 2.94 3.98 -v 12.96 2.88 3.62 -v 12.96 2.96 4.17 -v 12.87 2.96 4.17 -v 12.96 2.96 3.08 -v 12.87 2.96 3.08 -v 13.05 2.96 2.98 -v 13.05 2.71 2.98 -v 13.05 2.71 4.26 -v 13.05 2.96 4.26 -v 8.75 20.76 0.36 -v 8.75 19.02 0.36 -v 8.75 18.98 -0.00 -v 8.75 21.32 -0.00 -v 8.81 19.06 0.64 -v 8.73 19.06 0.64 -v 8.73 18.81 0.64 -v 8.81 18.81 0.64 -v 8.81 21.73 -0.00 -v 8.73 21.73 -0.00 -v 8.73 20.92 0.55 -v 8.81 20.92 0.55 -v 8.81 18.81 -0.64 -v 8.73 18.81 -0.64 -v 8.73 19.06 -0.64 -v 8.81 19.06 -0.64 -v 8.81 18.73 -0.00 -v 8.73 18.73 -0.00 -v 8.73 18.81 -0.55 -v 8.81 18.81 -0.55 -v 8.90 18.81 0.55 -v 8.90 19.02 0.36 -v 8.90 19.06 0.55 -v 8.81 21.32 -0.00 -v 8.81 20.76 0.36 -v 8.90 19.06 -0.55 -v 8.90 19.04 -0.36 -v 8.90 18.81 -0.55 -v 8.90 18.73 -0.00 -v 8.90 18.98 -0.00 -v 8.75 20.76 -0.36 -v 8.75 19.04 -0.36 -v 8.81 20.92 -0.55 -v 8.73 20.92 -0.55 -v 8.81 18.81 0.55 -v 8.73 18.81 0.55 -v 8.81 20.76 -0.36 -v 8.81 19.02 0.36 -v 8.81 19.04 -0.36 -v 8.81 18.98 -0.00 -v 8.81 19.06 -0.55 -v 8.73 19.06 -0.55 -v 8.73 19.06 0.55 -v 8.81 19.06 0.55 -v 8.90 18.81 0.64 -v 8.90 19.06 0.64 -v 8.90 19.06 -0.64 -v 8.90 18.81 -0.64 -v -5.91 20.76 3.64 -v -6.27 21.32 3.64 -v -6.27 18.98 3.64 -v -5.91 19.02 3.64 -v -5.63 19.06 3.70 -v -5.63 18.81 3.70 -v -5.63 18.81 3.61 -v -5.63 19.06 3.61 -v -6.27 21.73 3.70 -v -5.73 20.92 3.70 -v -5.73 20.92 3.61 -v -6.27 21.73 3.61 -v -6.91 18.81 3.70 -v -6.91 19.06 3.70 -v -6.91 19.06 3.61 -v -6.91 18.81 3.61 -v -6.27 18.73 3.70 -v -6.82 18.81 3.70 -v -6.82 18.81 3.61 -v -6.27 18.73 3.61 -v -5.73 18.81 3.79 -v -5.73 19.06 3.79 -v -5.91 19.02 3.79 -v -6.27 21.32 3.70 -v -5.91 20.76 3.70 -v -6.82 19.06 3.79 -v -6.82 18.81 3.79 -v -6.63 19.04 3.79 -v -6.27 18.73 3.79 -v -6.27 18.98 3.79 -v -6.63 20.76 3.64 -v -6.63 19.04 3.64 -v -6.82 20.92 3.70 -v -6.82 20.92 3.61 -v -5.73 18.81 3.70 -v -5.73 18.81 3.61 -v -6.63 20.76 3.70 -v -5.91 19.02 3.70 -v -6.63 19.04 3.70 -v -6.27 18.98 3.70 -v -6.82 19.06 3.70 -v -6.82 19.06 3.61 -v -5.73 19.06 3.70 -v -5.73 19.06 3.61 -v -5.63 19.06 3.79 -v -5.63 18.81 3.79 -v -6.91 18.81 3.79 -v -6.91 19.06 3.79 -v 1.22 3.89 -13.04 -v 1.22 0.00 -13.04 -v 0.00 0.00 -13.04 -v 0.00 4.45 -13.04 -v -2.44 3.02 -13.04 -v -1.22 3.89 -13.04 -v -1.22 0.00 -13.04 -v -2.44 0.00 -13.04 -v 2.44 3.02 -13.04 -v 2.44 0.00 -13.04 -v 2.76 0.00 -12.61 -v 2.76 0.00 -13.28 -v 2.72 2.63 -13.28 -v 2.72 2.63 -12.61 -v 2.32 0.00 -13.28 -v 2.28 2.21 -13.28 -v 2.32 0.00 -12.61 -v 2.28 2.21 -12.61 -v 1.57 4.51 -13.28 -v 1.57 4.51 -12.61 -v 1.32 3.79 -13.28 -v 1.32 3.79 -12.61 -v 0.00 5.20 -13.28 -v 0.00 5.20 -12.61 -v 0.00 4.45 -13.28 -v 0.00 4.45 -12.61 -v -1.57 4.51 -13.28 -v -1.57 4.51 -12.61 -v -1.32 3.79 -13.28 -v -1.32 3.79 -12.61 -v -2.72 2.63 -13.28 -v -2.72 2.63 -12.61 -v -2.28 2.21 -13.28 -v -2.28 2.21 -12.61 -v -2.76 0.00 -13.28 -v -2.76 0.00 -12.61 -v -2.32 0.00 -13.28 -v -2.32 0.00 -12.61 -v -23.02 0.02 -7.19 -v -23.81 0.02 -7.26 -v -23.50 3.76 -6.94 -v -22.95 3.76 -6.89 -v -23.10 0.02 -6.35 -v -23.01 3.76 -6.25 -v -23.88 0.02 -6.42 -v -23.56 3.76 -6.30 -v -23.00 6.77 -7.20 -v -23.83 6.77 -7.27 -v -23.08 7.23 -6.33 -v -23.90 7.23 -6.41 -v -23.14 6.61 -6.66 -v -23.14 6.39 0.01 -v -23.82 6.39 0.01 -v -23.82 6.61 -6.66 -v -23.82 7.03 0.01 -v -23.82 7.24 -6.66 -v -23.14 7.03 0.01 -v -23.14 7.24 -6.66 -v -23.14 6.61 6.68 -v -23.82 6.61 6.68 -v -23.82 7.24 6.68 -v -23.14 7.24 6.68 -v -10.64 6.61 -6.65 -v -17.31 6.39 -6.65 -v -17.31 6.39 -7.33 -v -10.64 6.61 -7.33 -v -17.31 7.03 -7.33 -v -10.64 7.24 -7.33 -v -17.31 7.03 -6.65 -v -10.64 7.24 -6.65 -v -23.99 6.61 -6.65 -v -23.99 6.61 -7.33 -v -23.99 7.24 -7.33 -v -23.99 7.24 -6.65 -v -23.02 0.02 7.20 -v -22.95 3.76 6.91 -v -23.50 3.76 6.95 -v -23.81 0.02 7.27 -v -23.10 0.02 6.37 -v -23.01 3.76 6.27 -v -23.88 0.02 6.44 -v -23.56 3.76 6.32 -v -23.00 6.77 7.22 -v -23.83 6.77 7.29 -v -23.08 7.23 6.35 -v -23.90 7.23 6.42 -v -10.64 6.61 6.68 -v -10.64 6.61 7.36 -v -17.31 6.39 7.36 -v -17.31 6.39 6.68 -v -10.64 7.24 7.36 -v -17.31 7.03 7.36 -v -10.64 7.24 6.68 -v -17.31 7.03 6.68 -v -23.99 6.61 7.36 -v -23.99 6.61 6.68 -v -23.99 7.24 7.36 -v -23.99 7.24 6.68 -v 8.74 6.44 10.70 -v 8.74 6.44 11.59 -v 0.00 6.16 11.59 -v 0.00 6.16 10.70 -v 8.74 7.27 11.59 -v 0.00 6.98 11.59 -v 8.74 7.27 10.70 -v 0.00 6.98 10.70 -v -8.74 6.44 11.59 -v -8.74 6.44 10.70 -v -8.74 7.27 11.59 -v -8.74 7.27 10.70 -v 8.74 17.79 -0.00 -v 8.74 27.72 -0.00 -v 8.74 23.62 3.62 -v 0.00 17.79 -3.62 -v 0.00 23.02 -3.62 -v 8.74 23.62 -3.62 -v -8.74 17.79 -0.00 -v -8.74 27.60 -0.00 -v -8.74 23.62 -3.62 -v 0.00 17.79 3.62 -v 0.00 23.02 3.62 -v -8.74 23.62 3.62 -v 8.34 17.58 -3.11 -v 8.50 20.48 -3.15 -v 8.50 20.48 -3.73 -v 8.34 17.58 -3.92 -v 8.34 24.35 -3.11 -v 8.34 23.76 -3.83 -v 9.14 17.58 -3.11 -v 9.09 20.48 -3.15 -v 9.14 24.35 -3.11 -v 9.14 17.58 -3.92 -v 9.09 20.48 -3.73 -v 9.14 23.76 -3.83 -v -0.81 20.18 -3.56 -v -0.81 17.74 -3.56 -v -0.81 17.74 -3.74 -v -0.81 20.18 -3.74 -v -0.95 20.13 -3.74 -v -0.95 17.74 -3.74 -v -0.95 17.74 -3.56 -v -0.95 20.13 -3.56 -v -1.04 20.10 -3.76 -v -1.04 20.10 -3.58 -v -1.04 20.32 -3.58 -v -1.04 20.32 -3.76 -v 1.04 20.32 -3.58 -v 1.04 20.10 -3.58 -v 1.04 20.10 -3.76 -v 1.04 20.32 -3.76 -v -0.39 20.29 -3.76 -v -0.39 20.29 -3.58 -v -0.39 20.51 -3.76 -v -0.39 20.51 -3.58 -v 0.94 20.15 -3.56 -v 0.94 17.74 -3.56 -v 0.94 17.74 -3.74 -v 0.94 20.15 -3.74 -v 0.80 17.74 -3.74 -v 0.80 20.19 -3.74 -v 0.80 17.74 -3.56 -v 0.80 20.19 -3.56 -v 0.39 20.29 -3.76 -v 0.39 20.29 -3.58 -v 0.39 20.51 -3.76 -v 0.39 20.51 -3.58 -v 0.00 20.34 -3.76 -v 0.00 20.34 -3.58 -v 0.00 20.56 -3.76 -v 0.00 20.56 -3.58 -v -0.01 17.69 -4.00 -v 0.78 17.69 -4.00 -v 0.78 17.66 -3.95 -v -0.01 17.66 -3.95 -v -0.01 17.76 -4.01 -v 0.78 17.76 -4.01 -v 0.78 17.75 -3.95 -v 0.78 17.85 -3.95 -v 0.78 17.85 -3.64 -v 0.78 17.75 -3.64 -v 0.78 17.82 -4.00 -v 0.78 17.66 -3.64 -v -0.01 17.85 -3.95 -v -0.01 17.85 -3.64 -v -0.01 17.82 -4.00 -v -0.80 17.66 -3.95 -v -0.80 17.69 -4.00 -v -0.80 17.76 -4.01 -v -0.80 17.85 -3.64 -v -0.80 17.85 -3.95 -v -0.80 17.75 -3.95 -v -0.80 17.75 -3.64 -v -0.80 17.82 -4.00 -v -0.80 17.66 -3.64 -v 0.86 20.19 -3.66 -v 0.86 17.72 -3.66 -v 0.02 17.72 -3.66 -v 0.02 20.45 -3.66 -v -0.82 20.19 -3.66 -v -0.82 17.72 -3.66 -v -9.14 17.58 -3.11 -v -8.97 20.48 -3.15 -v -8.97 20.48 -3.73 -v -9.14 17.58 -3.92 -v -9.14 24.35 -3.11 -v -9.14 23.76 -3.83 -v -8.34 17.58 -3.11 -v -8.39 20.48 -3.15 -v -8.34 24.35 -3.11 -v -8.34 17.58 -3.92 -v -8.39 20.48 -3.73 -v -8.34 23.76 -3.83 -v -9.14 17.58 3.11 -v -9.14 17.58 3.92 -v -8.97 20.48 3.73 -v -8.97 20.48 3.15 -v -9.14 23.76 3.83 -v -9.14 24.35 3.11 -v -8.34 17.58 3.11 -v -8.39 20.48 3.15 -v -8.34 24.35 3.11 -v -8.39 20.48 3.73 -v -8.34 17.58 3.92 -v -8.34 23.76 3.83 -v 8.34 17.58 3.11 -v 8.34 17.58 3.92 -v 8.50 20.48 3.73 -v 8.50 20.48 3.15 -v 8.34 23.76 3.83 -v 8.34 24.35 3.11 -v 9.14 17.58 3.11 -v 9.09 20.48 3.15 -v 9.14 24.35 3.11 -v 9.09 20.48 3.73 -v 9.14 17.58 3.92 -v 9.14 23.76 3.83 -v 12.59 6.44 -8.74 -v 13.48 6.44 -8.74 -v 13.48 6.16 -0.00 -v 12.59 6.16 -0.00 -v 13.48 7.27 -8.74 -v 13.48 6.98 -0.00 -v 12.59 7.27 -8.74 -v 12.59 6.98 -0.00 -v 13.48 6.44 8.74 -v 12.59 6.44 8.74 -v 13.48 7.27 8.74 -v 12.59 7.27 8.74 -v -9.92 18.64 4.67 -v -10.78 18.64 4.67 -v -10.78 18.64 6.66 -v -9.92 18.64 6.66 -v -9.92 17.79 4.67 -v -10.78 17.79 4.67 -v -10.78 17.79 6.66 -v -9.92 17.79 6.66 -v -12.40 7.80 6.90 -v -12.40 7.80 6.03 -v -14.38 7.80 6.03 -v -14.38 7.80 6.90 -v -12.40 6.95 6.90 -v -12.40 6.95 6.03 -v -14.38 6.95 6.03 -v -14.38 6.95 6.90 -v -12.40 7.80 -5.99 -v -12.40 7.80 -6.86 -v -14.38 7.80 -6.86 -v -14.38 7.80 -5.99 -v -12.40 6.95 -5.99 -v -12.40 6.95 -6.86 -v -14.38 6.95 -6.86 -v -14.38 6.95 -5.99 -v -16.55 0.00 12.98 -v -16.55 7.76 12.98 -v -17.17 7.76 10.68 -v -17.17 0.00 10.68 -v -14.87 0.00 14.66 -v -14.87 7.76 14.66 -v -12.57 0.00 15.28 -v -12.57 7.76 15.28 -v -10.27 0.00 14.66 -v -10.27 7.76 14.66 -v -8.58 0.00 12.98 -v -8.58 7.76 12.98 -v -7.97 0.00 10.68 -v -7.97 7.76 10.68 -v -8.58 0.00 8.38 -v -8.58 7.76 8.38 -v -10.27 0.00 6.69 -v -10.27 7.76 6.69 -v -12.57 0.00 6.08 -v -12.57 7.76 6.08 -v -14.87 0.00 6.69 -v -14.87 7.76 6.69 -v -16.55 0.00 8.38 -v -16.55 7.76 8.38 -v -16.78 7.76 13.11 -v -16.78 8.57 13.11 -v -17.43 8.57 10.68 -v -17.43 7.76 10.68 -v -15.00 7.76 14.89 -v -15.00 8.57 14.89 -v -12.57 7.76 15.54 -v -12.57 8.57 15.54 -v -10.13 7.76 14.89 -v -10.13 8.57 14.89 -v -8.35 7.76 13.11 -v -8.35 8.57 13.11 -v -7.70 7.76 10.68 -v -7.70 8.57 10.68 -v -8.35 7.76 8.24 -v -8.35 8.57 8.24 -v -10.13 7.76 6.46 -v -10.13 8.57 6.46 -v -12.57 7.76 5.81 -v -12.57 8.57 5.81 -v -15.00 7.76 6.46 -v -15.00 8.57 6.46 -v -16.78 7.76 8.24 -v -16.78 8.57 8.24 -v -17.17 8.57 10.68 -v -16.55 8.57 12.98 -v -14.87 8.57 14.66 -v -12.57 8.57 15.28 -v -10.27 8.57 14.66 -v -8.58 8.57 12.98 -v -7.97 8.57 10.68 -v -8.58 8.57 8.38 -v -10.27 8.57 6.69 -v -12.57 8.57 6.08 -v -14.87 8.57 6.69 -v -16.55 8.57 8.38 -v -16.55 16.89 12.98 -v -17.17 16.89 10.68 -v -14.87 16.89 14.66 -v -12.57 16.89 15.28 -v -10.27 16.89 14.66 -v -8.58 16.89 12.98 -v -7.97 16.89 10.68 -v -8.58 16.89 8.38 -v -10.27 16.89 6.69 -v -12.57 16.89 6.08 -v -14.87 16.89 6.69 -v -16.55 16.89 8.38 -v -17.13 21.30 13.31 -v -17.47 21.30 13.51 -v -18.23 21.30 10.68 -v -17.83 21.30 10.68 -v -15.20 21.30 15.24 -v -15.40 21.30 15.58 -v -12.57 21.30 15.94 -v -12.57 21.30 16.34 -v -9.93 21.30 15.24 -v -9.73 21.30 15.58 -v -8.01 21.30 13.31 -v -7.66 21.30 13.51 -v -7.30 21.30 10.68 -v -6.90 21.30 10.68 -v -8.01 21.30 8.04 -v -7.66 21.30 7.84 -v -9.93 21.30 6.12 -v -9.73 21.30 5.77 -v -12.57 21.30 5.41 -v -12.57 21.30 5.01 -v -15.20 21.30 6.12 -v -15.40 21.30 5.77 -v -17.13 21.30 8.04 -v -17.47 21.30 7.84 -v -16.17 24.76 12.76 -v -16.72 24.76 10.68 -v -14.64 24.76 14.28 -v -12.57 24.76 14.83 -v -10.49 24.76 14.28 -v -8.97 24.76 12.76 -v -8.41 24.76 10.68 -v -8.97 24.76 8.60 -v -10.49 24.76 7.08 -v -12.57 24.76 6.52 -v -14.64 24.76 7.08 -v -16.17 24.76 8.60 -v -16.13 28.50 12.74 -v -16.69 28.50 10.68 -v -14.63 28.50 14.24 -v -12.57 28.50 14.80 -v -10.51 28.50 14.24 -v -9.00 28.50 12.74 -v -8.45 28.50 10.68 -v -9.00 28.50 8.62 -v -10.51 28.50 7.11 -v -12.57 28.50 6.56 -v -14.63 28.50 7.11 -v -16.13 28.50 8.62 -v -17.13 17.36 13.31 -v -17.83 17.36 10.68 -v -15.20 17.36 15.24 -v -12.57 17.36 15.94 -v -9.93 17.36 15.24 -v -8.01 17.36 13.31 -v -7.30 17.36 10.68 -v -8.01 17.36 8.04 -v -9.93 17.36 6.12 -v -12.57 17.36 5.41 -v -15.20 17.36 6.12 -v -17.13 17.36 8.04 -v -17.91 20.21 10.37 -v -17.91 19.23 10.37 -v -17.91 19.21 10.80 -v -17.91 20.52 10.80 -v -17.81 19.26 10.03 -v -17.81 19.12 10.03 -v -17.91 19.12 10.04 -v -17.91 19.26 10.04 -v -17.89 20.75 10.80 -v -17.84 20.29 10.15 -v -17.94 20.29 10.15 -v -17.98 20.75 10.81 -v -17.68 19.12 11.55 -v -17.68 19.26 11.55 -v -17.78 19.26 11.56 -v -17.78 19.12 11.56 -v -17.89 19.07 10.80 -v -17.73 19.12 11.45 -v -17.82 19.12 11.45 -v -17.98 19.07 10.81 -v -18.05 19.12 10.16 -v -18.08 19.23 10.39 -v -18.05 19.26 10.16 -v -17.98 20.21 10.38 -v -17.98 20.52 10.81 -v -17.93 19.26 11.46 -v -18.01 19.24 11.24 -v -17.93 19.12 11.46 -v -18.09 19.07 10.82 -v -18.09 19.21 10.82 -v -17.83 20.21 11.23 -v -17.83 19.24 11.23 -v -17.73 20.29 11.45 -v -17.82 20.29 11.45 -v -17.84 19.12 10.15 -v -17.94 19.12 10.15 -v -17.90 20.21 11.23 -v -17.98 19.23 10.38 -v -17.90 19.24 11.23 -v -17.98 19.21 10.81 -v -17.82 19.26 11.45 -v -17.73 19.26 11.45 -v -17.84 19.26 10.15 -v -17.94 19.26 10.15 -v -18.02 19.12 10.05 -v -18.02 19.26 10.05 -v -17.88 19.26 11.57 -v -17.88 19.12 11.57 -v -12.87 20.21 16.02 -v -12.87 19.23 16.02 -v -12.44 19.21 16.02 -v -12.44 20.52 16.02 -v -13.21 19.26 15.92 -v -13.21 19.12 15.92 -v -13.20 19.12 16.02 -v -13.20 19.26 16.02 -v -12.44 20.75 16.00 -v -13.10 20.29 15.95 -v -13.09 20.29 16.05 -v -12.43 20.75 16.10 -v -11.69 19.12 15.79 -v -11.69 19.26 15.79 -v -11.68 19.26 15.89 -v -11.68 19.12 15.89 -v -12.44 19.07 16.00 -v -11.80 19.12 15.84 -v -11.79 19.12 15.94 -v -12.43 19.07 16.10 -v -13.08 19.12 16.16 -v -12.85 19.23 16.20 -v -13.08 19.26 16.16 -v -12.86 20.21 16.09 -v -12.43 20.52 16.10 -v -11.78 19.26 16.04 -v -12.00 19.24 16.12 -v -11.78 19.12 16.04 -v -12.42 19.07 16.20 -v -12.42 19.21 16.20 -v -12.01 20.21 15.94 -v -12.01 19.24 15.94 -v -11.80 20.29 15.84 -v -11.79 20.29 15.94 -v -13.10 19.12 15.95 -v -13.09 19.12 16.05 -v -12.01 20.21 16.01 -v -12.86 19.23 16.09 -v -12.01 19.24 16.01 -v -12.43 19.21 16.10 -v -11.79 19.26 15.94 -v -11.80 19.26 15.84 -v -13.10 19.26 15.95 -v -13.09 19.26 16.05 -v -13.19 19.12 16.13 -v -13.19 19.26 16.13 -v -11.67 19.26 16.00 -v -11.67 19.12 16.00 -v -9.24 23.34 12.52 -v -8.56 24.92 12.99 -v -9.10 24.92 13.76 -v -9.78 23.34 13.29 -v -9.53 28.41 12.29 -v -8.63 28.41 12.92 -v -9.18 28.41 13.70 -v -10.08 28.41 13.07 -v -12.87 27.21 14.81 -v -12.87 26.24 14.81 -v -12.44 26.21 14.82 -v -12.44 27.52 14.82 -v -13.21 26.26 14.72 -v -13.21 26.12 14.72 -v -13.20 26.12 14.82 -v -13.20 26.26 14.82 -v -12.44 27.75 14.80 -v -13.10 27.30 14.75 -v -13.09 27.30 14.85 -v -12.43 27.75 14.89 -v -11.69 26.12 14.59 -v -11.69 26.26 14.59 -v -11.68 26.26 14.69 -v -11.68 26.12 14.69 -v -12.44 26.07 14.80 -v -11.80 26.12 14.64 -v -11.79 26.12 14.73 -v -12.43 26.07 14.89 -v -13.08 26.12 14.96 -v -12.85 26.24 14.99 -v -13.08 26.26 14.96 -v -12.86 27.21 14.89 -v -12.43 27.52 14.89 -v -11.78 26.26 14.84 -v -12.00 26.25 14.92 -v -11.78 26.12 14.84 -v -12.42 26.07 15.00 -v -12.42 26.21 15.00 -v -12.01 27.21 14.74 -v -12.01 26.25 14.74 -v -11.80 27.30 14.64 -v -11.79 27.30 14.73 -v -13.10 26.12 14.75 -v -13.09 26.12 14.85 -v -12.01 27.21 14.81 -v -12.86 26.24 14.89 -v -12.01 26.25 14.81 -v -12.43 26.21 14.89 -v -11.79 26.26 14.73 -v -11.80 26.26 14.64 -v -13.10 26.26 14.75 -v -13.09 26.26 14.85 -v -13.19 26.12 14.93 -v -13.19 26.26 14.93 -v -11.67 26.26 14.79 -v -11.67 26.12 14.79 -v -14.41 23.34 14.01 -v -14.88 24.92 14.68 -v -15.65 24.92 14.14 -v -15.18 23.34 13.46 -v -14.18 28.41 13.71 -v -14.81 28.41 14.61 -v -15.59 28.41 14.07 -v -14.96 28.41 13.17 -v -8.43 27.21 10.98 -v -8.43 26.24 10.98 -v -8.42 26.21 10.55 -v -8.42 27.52 10.55 -v -8.52 26.26 11.32 -v -8.52 26.12 11.32 -v -8.42 26.12 11.31 -v -8.42 26.26 11.31 -v -8.45 27.75 10.55 -v -8.49 27.30 11.21 -v -8.39 27.30 11.20 -v -8.35 27.75 10.54 -v -8.65 26.12 9.80 -v -8.65 26.26 9.80 -v -8.56 26.26 9.79 -v -8.56 26.12 9.79 -v -8.45 26.07 10.55 -v -8.61 26.12 9.91 -v -8.51 26.12 9.90 -v -8.35 26.07 10.54 -v -8.29 26.12 11.19 -v -8.25 26.24 10.96 -v -8.29 26.26 11.19 -v -8.35 27.21 10.97 -v -8.35 27.52 10.54 -v -8.40 26.26 9.89 -v -8.32 26.25 10.11 -v -8.40 26.12 9.89 -v -8.24 26.07 10.53 -v -8.24 26.21 10.53 -v -8.50 27.21 10.13 -v -8.50 26.25 10.13 -v -8.61 27.30 9.91 -v -8.51 27.30 9.90 -v -8.49 26.12 11.21 -v -8.39 26.12 11.20 -v -8.43 27.21 10.12 -v -8.35 26.24 10.97 -v -8.43 26.25 10.12 -v -8.35 26.21 10.54 -v -8.51 26.26 9.90 -v -8.61 26.26 9.91 -v -8.49 26.26 11.21 -v -8.39 26.26 11.20 -v -8.32 26.12 11.30 -v -8.32 26.26 11.30 -v -8.45 26.26 9.78 -v -8.45 26.12 9.78 -v -13.04 12.70 6.81 -v -13.04 14.28 5.99 -v -12.09 14.28 5.99 -v -12.09 12.70 6.81 -v -13.04 17.34 6.74 -v -13.04 17.34 5.64 -v -12.09 17.34 5.64 -v -12.09 17.34 6.74 -v -8.98 12.70 12.20 -v -8.27 14.28 12.61 -v -8.74 14.28 13.43 -v -9.46 12.70 13.02 -v -8.92 17.34 12.24 -v -7.97 17.34 12.79 -v -8.44 17.34 13.61 -v -9.39 17.34 13.06 -v -12.09 12.70 14.54 -v -12.09 14.28 15.36 -v -13.04 14.28 15.36 -v -13.04 12.70 14.54 -v -12.09 17.34 14.62 -v -12.09 17.34 15.71 -v -13.04 17.34 15.71 -v -13.04 17.34 14.62 -v -10.73 23.34 7.35 -v -10.25 24.92 6.67 -v -9.48 24.92 7.22 -v -9.95 23.34 7.89 -v -10.95 28.41 7.65 -v -10.32 28.41 6.74 -v -9.55 28.41 7.29 -v -10.18 28.41 8.19 -v -9.46 12.70 8.34 -v -8.74 14.28 7.92 -v -8.27 14.28 8.74 -v -8.98 12.70 9.15 -v -9.39 17.34 8.30 -v -8.44 17.34 7.75 -v -7.97 17.34 8.57 -v -8.92 17.34 9.12 -v -7.23 20.21 10.98 -v -7.23 19.23 10.98 -v -7.22 19.21 10.55 -v -7.22 20.52 10.55 -v -7.32 19.26 11.32 -v -7.32 19.12 11.32 -v -7.22 19.12 11.31 -v -7.22 19.26 11.31 -v -7.24 20.75 10.55 -v -7.29 20.29 11.21 -v -7.19 20.29 11.20 -v -7.15 20.75 10.54 -v -7.45 19.12 9.80 -v -7.45 19.26 9.80 -v -7.35 19.26 9.79 -v -7.35 19.12 9.79 -v -7.24 19.07 10.55 -v -7.41 19.12 9.91 -v -7.31 19.12 9.90 -v -7.15 19.07 10.54 -v -7.09 19.12 11.19 -v -7.05 19.23 10.96 -v -7.09 19.26 11.19 -v -7.15 20.21 10.97 -v -7.15 20.52 10.54 -v -7.20 19.26 9.89 -v -7.12 19.24 10.11 -v -7.20 19.12 9.89 -v -7.04 19.07 10.53 -v -7.04 19.21 10.53 -v -7.30 20.21 10.13 -v -7.30 19.24 10.13 -v -7.41 20.29 9.91 -v -7.31 20.29 9.90 -v -7.29 19.12 11.21 -v -7.19 19.12 11.20 -v -7.23 20.21 10.12 -v -7.15 19.23 10.97 -v -7.23 19.24 10.12 -v -7.15 19.21 10.54 -v -7.31 19.26 9.90 -v -7.41 19.26 9.91 -v -7.29 19.26 11.21 -v -7.19 19.26 11.20 -v -7.11 19.12 11.30 -v -7.11 19.26 11.30 -v -7.25 19.26 9.78 -v -7.25 19.12 9.78 -v -12.26 27.21 6.54 -v -12.26 26.24 6.54 -v -12.69 26.21 6.53 -v -12.69 27.52 6.53 -v -11.92 26.26 6.63 -v -11.92 26.12 6.63 -v -11.93 26.12 6.53 -v -11.93 26.26 6.53 -v -12.69 27.75 6.56 -v -12.03 27.30 6.60 -v -12.04 27.30 6.51 -v -12.70 27.75 6.46 -v -13.44 26.12 6.76 -v -13.44 26.26 6.76 -v -13.45 26.26 6.67 -v -13.45 26.12 6.67 -v -12.69 26.07 6.56 -v -13.34 26.12 6.72 -v -13.34 26.12 6.62 -v -12.70 26.07 6.46 -v -12.05 26.12 6.40 -v -12.28 26.24 6.36 -v -12.05 26.26 6.40 -v -12.27 27.21 6.47 -v -12.70 27.52 6.46 -v -13.35 26.26 6.51 -v -13.13 26.25 6.43 -v -13.35 26.12 6.51 -v -12.71 26.07 6.35 -v -12.71 26.21 6.35 -v -13.12 27.21 6.61 -v -13.12 26.25 6.61 -v -13.34 27.30 6.72 -v -13.34 27.30 6.62 -v -12.03 26.12 6.60 -v -12.04 26.12 6.51 -v -13.12 27.21 6.54 -v -12.27 26.24 6.47 -v -13.12 26.25 6.54 -v -12.70 26.21 6.46 -v -13.34 26.26 6.62 -v -13.34 26.26 6.72 -v -12.03 26.26 6.60 -v -12.04 26.26 6.51 -v -11.94 26.12 6.43 -v -11.94 26.26 6.43 -v -13.46 26.26 6.56 -v -13.46 26.12 6.56 -v -16.15 12.70 9.15 -v -16.86 14.28 8.74 -v -16.39 14.28 7.92 -v -15.67 12.70 8.34 -v -16.21 17.34 9.12 -v -17.17 17.34 8.57 -v -16.69 17.34 7.75 -v -15.74 17.34 8.30 -v -12.26 20.21 5.34 -v -12.26 19.23 5.34 -v -12.69 19.21 5.33 -v -12.69 20.52 5.33 -v -11.92 19.26 5.43 -v -11.92 19.12 5.43 -v -11.93 19.12 5.33 -v -11.93 19.26 5.33 -v -12.69 20.75 5.36 -v -12.03 20.29 5.40 -v -12.04 20.29 5.30 -v -12.70 20.75 5.26 -v -13.44 19.12 5.56 -v -13.44 19.26 5.56 -v -13.45 19.26 5.47 -v -13.45 19.12 5.47 -v -12.69 19.07 5.36 -v -13.34 19.12 5.52 -v -13.34 19.12 5.42 -v -12.70 19.07 5.26 -v -12.05 19.12 5.20 -v -12.28 19.23 5.16 -v -12.05 19.26 5.20 -v -12.27 20.21 5.26 -v -12.70 20.52 5.26 -v -13.35 19.26 5.31 -v -13.13 19.24 5.23 -v -13.35 19.12 5.31 -v -12.71 19.07 5.15 -v -12.71 19.21 5.15 -v -13.12 20.21 5.41 -v -13.12 19.24 5.41 -v -13.34 20.29 5.52 -v -13.34 20.29 5.42 -v -12.03 19.12 5.40 -v -12.04 19.12 5.30 -v -13.12 20.21 5.34 -v -12.27 19.23 5.26 -v -13.12 19.24 5.34 -v -12.70 19.21 5.26 -v -13.34 19.26 5.42 -v -13.34 19.26 5.52 -v -12.03 19.26 5.40 -v -12.04 19.26 5.30 -v -11.94 19.12 5.23 -v -11.94 19.26 5.23 -v -13.46 19.26 5.36 -v -13.46 19.12 5.36 -v -15.89 23.34 8.84 -v -16.57 24.92 8.36 -v -16.03 24.92 7.59 -v -15.35 23.34 8.06 -v -15.60 28.41 9.06 -v -16.50 28.41 8.43 -v -15.96 28.41 7.66 -v -15.06 28.41 8.29 -v -16.70 27.21 10.37 -v -16.70 26.24 10.37 -v -16.71 26.21 10.80 -v -16.71 27.52 10.80 -v -16.61 26.26 10.03 -v -16.61 26.12 10.03 -v -16.71 26.12 10.04 -v -16.71 26.26 10.04 -v -16.69 27.75 10.80 -v -16.64 27.30 10.15 -v -16.74 27.30 10.15 -v -16.78 27.75 10.81 -v -16.48 26.12 11.55 -v -16.48 26.26 11.55 -v -16.58 26.26 11.56 -v -16.58 26.12 11.56 -v -16.69 26.07 10.80 -v -16.53 26.12 11.45 -v -16.62 26.12 11.45 -v -16.78 26.07 10.81 -v -16.84 26.12 10.16 -v -16.88 26.24 10.39 -v -16.84 26.26 10.16 -v -16.78 27.21 10.38 -v -16.78 27.52 10.81 -v -16.73 26.26 11.46 -v -16.81 26.25 11.24 -v -16.73 26.12 11.46 -v -16.89 26.07 10.82 -v -16.89 26.21 10.82 -v -16.63 27.21 11.23 -v -16.63 26.25 11.23 -v -16.53 27.30 11.45 -v -16.62 27.30 11.45 -v -16.64 26.12 10.15 -v -16.74 26.12 10.15 -v -16.70 27.21 11.23 -v -16.78 26.24 10.38 -v -16.70 26.25 11.23 -v -16.78 26.21 10.81 -v -16.62 26.26 11.45 -v -16.53 26.26 11.45 -v -16.64 26.26 10.15 -v -16.74 26.26 10.15 -v -16.82 26.12 10.05 -v -16.82 26.26 10.05 -v -16.68 26.26 11.57 -v -16.68 26.12 11.57 -v -15.67 12.70 13.02 -v -16.39 14.28 13.43 -v -16.86 14.28 12.61 -v -16.15 12.70 12.20 -v -15.74 17.34 13.06 -v -16.69 17.34 13.61 -v -17.17 17.34 12.79 -v -16.21 17.34 12.24 -v -16.83 28.50 13.14 -v -16.83 30.29 13.14 -v -17.49 30.29 10.68 -v -17.49 28.50 10.68 -v -15.03 28.50 14.94 -v -15.03 30.29 14.94 -v -12.57 28.50 15.60 -v -12.57 30.29 15.60 -v -10.10 28.50 14.94 -v -10.10 30.29 14.94 -v -8.30 28.50 13.14 -v -8.30 30.29 13.14 -v -7.64 28.50 10.68 -v -7.64 30.29 10.68 -v -8.30 28.50 8.21 -v -8.30 30.29 8.21 -v -10.10 28.50 6.41 -v -10.10 30.29 6.41 -v -12.57 28.50 5.75 -v -12.57 30.29 5.75 -v -15.03 28.50 6.41 -v -15.03 30.29 6.41 -v -16.83 28.50 8.21 -v -16.83 30.29 8.21 -v -16.21 30.29 12.78 -v -16.78 30.29 10.68 -v -15.03 30.90 14.94 -v -14.67 30.90 14.32 -v -16.21 30.90 12.78 -v -16.83 30.90 13.14 -v -12.57 30.29 14.89 -v -14.67 30.29 14.32 -v -10.10 30.90 14.94 -v -10.46 30.90 14.32 -v -12.57 30.90 14.89 -v -12.57 30.90 15.60 -v -8.92 30.29 12.78 -v -10.46 30.29 14.32 -v -7.64 30.90 10.68 -v -8.36 30.90 10.68 -v -8.92 30.90 12.78 -v -8.30 30.90 13.14 -v -8.92 30.29 8.57 -v -8.36 30.29 10.68 -v -10.10 30.90 6.41 -v -10.46 30.90 7.03 -v -8.92 30.90 8.57 -v -8.30 30.90 8.21 -v -12.57 30.29 6.47 -v -10.46 30.29 7.03 -v -15.03 30.90 6.41 -v -14.67 30.90 7.03 -v -12.57 30.90 6.47 -v -12.57 30.90 5.75 -v -16.21 30.29 8.57 -v -14.67 30.29 7.03 -v -17.49 30.90 10.68 -v -16.78 30.90 10.68 -v -16.21 30.90 8.57 -v -16.83 30.90 8.21 -v -16.21 29.42 12.78 -v -16.78 29.42 10.68 -v -14.67 29.42 14.32 -v -12.57 29.42 14.89 -v -10.46 29.42 14.32 -v -8.92 29.42 12.78 -v -8.36 29.42 10.68 -v -8.92 29.42 8.57 -v -10.46 29.42 7.03 -v -12.57 29.42 6.47 -v -14.67 29.42 7.03 -v -16.21 29.42 8.57 -v -12.57 29.42 10.68 -v 17.17 7.76 10.68 -v 16.55 7.76 12.98 -v 16.55 0.00 12.98 -v 17.17 0.00 10.68 -v 14.87 7.76 14.66 -v 14.87 0.00 14.66 -v 12.57 7.76 15.28 -v 12.57 0.00 15.28 -v 10.27 7.76 14.66 -v 10.27 0.00 14.66 -v 8.58 7.76 12.98 -v 8.58 0.00 12.98 -v 7.97 7.76 10.68 -v 7.97 0.00 10.68 -v 8.58 7.76 8.38 -v 8.58 0.00 8.38 -v 10.27 7.76 6.69 -v 10.27 0.00 6.69 -v 12.57 7.76 6.08 -v 12.57 0.00 6.08 -v 14.87 7.76 6.69 -v 14.87 0.00 6.69 -v 16.55 7.76 8.38 -v 16.55 0.00 8.38 -v 16.78 7.76 13.11 -v 17.43 7.76 10.68 -v 17.43 8.57 10.68 -v 16.78 8.57 13.11 -v 15.00 7.76 14.89 -v 15.00 8.57 14.89 -v 12.57 7.76 15.54 -v 12.57 8.57 15.54 -v 10.13 7.76 14.89 -v 10.13 8.57 14.89 -v 8.35 7.76 13.11 -v 8.35 8.57 13.11 -v 7.70 7.76 10.68 -v 7.70 8.57 10.68 -v 8.35 7.76 8.24 -v 8.35 8.57 8.24 -v 10.13 7.76 6.46 -v 10.13 8.57 6.46 -v 12.57 7.76 5.81 -v 12.57 8.57 5.81 -v 15.00 7.76 6.46 -v 15.00 8.57 6.46 -v 16.78 7.76 8.24 -v 16.78 8.57 8.24 -v 17.17 8.57 10.68 -v 16.55 8.57 12.98 -v 14.87 8.57 14.66 -v 12.57 8.57 15.28 -v 10.27 8.57 14.66 -v 8.58 8.57 12.98 -v 7.97 8.57 10.68 -v 8.58 8.57 8.38 -v 10.27 8.57 6.69 -v 12.57 8.57 6.08 -v 14.87 8.57 6.69 -v 16.55 8.57 8.38 -v 17.17 16.89 10.68 -v 16.55 16.89 12.98 -v 14.87 16.89 14.66 -v 12.57 16.89 15.28 -v 10.27 16.89 14.66 -v 8.58 16.89 12.98 -v 7.97 16.89 10.68 -v 8.58 16.89 8.38 -v 10.27 16.89 6.69 -v 12.57 16.89 6.08 -v 14.87 16.89 6.69 -v 16.55 16.89 8.38 -v 17.13 21.30 13.31 -v 17.83 21.30 10.68 -v 18.23 21.30 10.68 -v 17.47 21.30 13.51 -v 15.20 21.30 15.24 -v 15.40 21.30 15.58 -v 12.57 21.30 15.94 -v 12.57 21.30 16.34 -v 9.93 21.30 15.24 -v 9.73 21.30 15.58 -v 8.01 21.30 13.31 -v 7.66 21.30 13.51 -v 7.30 21.30 10.68 -v 6.90 21.30 10.68 -v 8.01 21.30 8.04 -v 7.66 21.30 7.84 -v 9.93 21.30 6.12 -v 9.73 21.30 5.77 -v 12.57 21.30 5.41 -v 12.57 21.30 5.01 -v 15.20 21.30 6.12 -v 15.40 21.30 5.77 -v 17.13 21.30 8.04 -v 17.47 21.30 7.84 -v 16.72 24.76 10.68 -v 16.17 24.76 12.76 -v 14.64 24.76 14.28 -v 12.57 24.76 14.83 -v 10.49 24.76 14.28 -v 8.97 24.76 12.76 -v 8.41 24.76 10.68 -v 8.97 24.76 8.60 -v 10.49 24.76 7.08 -v 12.57 24.76 6.52 -v 14.64 24.76 7.08 -v 16.17 24.76 8.60 -v 16.69 28.50 10.68 -v 16.13 28.50 12.74 -v 14.63 28.50 14.24 -v 12.57 28.50 14.80 -v 10.51 28.50 14.24 -v 9.00 28.50 12.74 -v 8.45 28.50 10.68 -v 9.00 28.50 8.62 -v 10.51 28.50 7.11 -v 12.57 28.50 6.56 -v 14.63 28.50 7.11 -v 16.13 28.50 8.62 -v 17.83 17.36 10.68 -v 17.13 17.36 13.31 -v 15.20 17.36 15.24 -v 12.57 17.36 15.94 -v 9.93 17.36 15.24 -v 8.01 17.36 13.31 -v 7.30 17.36 10.68 -v 8.01 17.36 8.04 -v 9.93 17.36 6.12 -v 12.57 17.36 5.41 -v 15.20 17.36 6.12 -v 17.13 17.36 8.04 -v 17.91 20.21 10.37 -v 17.91 20.52 10.80 -v 17.91 19.21 10.80 -v 17.91 19.23 10.37 -v 17.81 19.26 10.03 -v 17.91 19.26 10.04 -v 17.91 19.12 10.04 -v 17.81 19.12 10.03 -v 17.89 20.75 10.80 -v 17.98 20.75 10.81 -v 17.94 20.29 10.15 -v 17.84 20.29 10.15 -v 17.68 19.12 11.55 -v 17.78 19.12 11.56 -v 17.78 19.26 11.56 -v 17.68 19.26 11.55 -v 17.89 19.07 10.80 -v 17.98 19.07 10.81 -v 17.82 19.12 11.45 -v 17.73 19.12 11.45 -v 18.05 19.12 10.16 -v 18.05 19.26 10.16 -v 18.08 19.23 10.39 -v 17.98 20.52 10.81 -v 17.98 20.21 10.38 -v 17.93 19.26 11.46 -v 17.93 19.12 11.46 -v 18.01 19.24 11.24 -v 18.09 19.07 10.82 -v 18.09 19.21 10.82 -v 17.83 20.21 11.23 -v 17.83 19.24 11.23 -v 17.73 20.29 11.45 -v 17.82 20.29 11.45 -v 17.84 19.12 10.15 -v 17.94 19.12 10.15 -v 17.90 20.21 11.23 -v 17.98 19.23 10.38 -v 17.90 19.24 11.23 -v 17.98 19.21 10.81 -v 17.82 19.26 11.45 -v 17.73 19.26 11.45 -v 17.94 19.26 10.15 -v 17.84 19.26 10.15 -v 18.02 19.26 10.05 -v 18.02 19.12 10.05 -v 17.88 19.12 11.57 -v 17.88 19.26 11.57 -v 12.87 20.21 16.02 -v 12.44 20.52 16.02 -v 12.44 19.21 16.02 -v 12.87 19.23 16.02 -v 13.21 19.26 15.92 -v 13.20 19.26 16.02 -v 13.20 19.12 16.02 -v 13.21 19.12 15.92 -v 12.44 20.75 16.00 -v 12.43 20.75 16.10 -v 13.09 20.29 16.05 -v 13.10 20.29 15.95 -v 11.69 19.12 15.79 -v 11.68 19.12 15.89 -v 11.68 19.26 15.89 -v 11.69 19.26 15.79 -v 12.44 19.07 16.00 -v 12.43 19.07 16.10 -v 11.79 19.12 15.94 -v 11.80 19.12 15.84 -v 13.08 19.12 16.16 -v 13.08 19.26 16.16 -v 12.85 19.23 16.20 -v 12.43 20.52 16.10 -v 12.86 20.21 16.09 -v 11.78 19.26 16.04 -v 11.78 19.12 16.04 -v 12.00 19.24 16.12 -v 12.42 19.07 16.20 -v 12.42 19.21 16.20 -v 12.01 20.21 15.94 -v 12.01 19.24 15.94 -v 11.80 20.29 15.84 -v 11.79 20.29 15.94 -v 13.10 19.12 15.95 -v 13.09 19.12 16.05 -v 12.01 20.21 16.01 -v 12.86 19.23 16.09 -v 12.01 19.24 16.01 -v 12.43 19.21 16.10 -v 11.79 19.26 15.94 -v 11.80 19.26 15.84 -v 13.09 19.26 16.05 -v 13.10 19.26 15.95 -v 13.19 19.26 16.13 -v 13.19 19.12 16.13 -v 11.67 19.12 16.00 -v 11.67 19.26 16.00 -v 9.24 23.34 12.52 -v 9.78 23.34 13.29 -v 9.10 24.92 13.76 -v 8.56 24.92 12.99 -v 8.63 28.41 12.92 -v 9.53 28.41 12.29 -v 9.18 28.41 13.70 -v 10.08 28.41 13.07 -v 12.87 27.21 14.81 -v 12.44 27.52 14.82 -v 12.44 26.21 14.82 -v 12.87 26.24 14.81 -v 13.21 26.26 14.72 -v 13.20 26.26 14.82 -v 13.20 26.12 14.82 -v 13.21 26.12 14.72 -v 12.44 27.75 14.80 -v 12.43 27.75 14.89 -v 13.09 27.30 14.85 -v 13.10 27.30 14.75 -v 11.69 26.12 14.59 -v 11.68 26.12 14.69 -v 11.68 26.26 14.69 -v 11.69 26.26 14.59 -v 12.44 26.07 14.80 -v 12.43 26.07 14.89 -v 11.79 26.12 14.73 -v 11.80 26.12 14.64 -v 13.08 26.12 14.96 -v 13.08 26.26 14.96 -v 12.85 26.24 14.99 -v 12.43 27.52 14.89 -v 12.86 27.21 14.89 -v 11.78 26.26 14.84 -v 11.78 26.12 14.84 -v 12.00 26.25 14.92 -v 12.42 26.07 15.00 -v 12.42 26.21 15.00 -v 12.01 27.21 14.74 -v 12.01 26.25 14.74 -v 11.80 27.30 14.64 -v 11.79 27.30 14.73 -v 13.10 26.12 14.75 -v 13.09 26.12 14.85 -v 12.01 27.21 14.81 -v 12.86 26.24 14.89 -v 12.01 26.25 14.81 -v 12.43 26.21 14.89 -v 11.79 26.26 14.73 -v 11.80 26.26 14.64 -v 13.09 26.26 14.85 -v 13.10 26.26 14.75 -v 13.19 26.26 14.93 -v 13.19 26.12 14.93 -v 11.67 26.12 14.79 -v 11.67 26.26 14.79 -v 14.41 23.34 14.01 -v 15.18 23.34 13.46 -v 15.65 24.92 14.14 -v 14.88 24.92 14.68 -v 14.81 28.41 14.61 -v 14.18 28.41 13.71 -v 15.59 28.41 14.07 -v 14.96 28.41 13.17 -v 8.43 27.21 10.98 -v 8.42 27.52 10.55 -v 8.42 26.21 10.55 -v 8.43 26.24 10.98 -v 8.52 26.26 11.32 -v 8.42 26.26 11.31 -v 8.42 26.12 11.31 -v 8.52 26.12 11.32 -v 8.45 27.75 10.55 -v 8.35 27.75 10.54 -v 8.39 27.30 11.20 -v 8.49 27.30 11.21 -v 8.65 26.12 9.80 -v 8.56 26.12 9.79 -v 8.56 26.26 9.79 -v 8.65 26.26 9.80 -v 8.45 26.07 10.55 -v 8.35 26.07 10.54 -v 8.51 26.12 9.90 -v 8.61 26.12 9.91 -v 8.29 26.12 11.19 -v 8.29 26.26 11.19 -v 8.25 26.24 10.96 -v 8.35 27.52 10.54 -v 8.35 27.21 10.97 -v 8.40 26.26 9.89 -v 8.40 26.12 9.89 -v 8.32 26.25 10.11 -v 8.24 26.07 10.53 -v 8.24 26.21 10.53 -v 8.50 27.21 10.13 -v 8.50 26.25 10.13 -v 8.61 27.30 9.91 -v 8.51 27.30 9.90 -v 8.49 26.12 11.21 -v 8.39 26.12 11.20 -v 8.43 27.21 10.12 -v 8.35 26.24 10.97 -v 8.43 26.25 10.12 -v 8.35 26.21 10.54 -v 8.51 26.26 9.90 -v 8.61 26.26 9.91 -v 8.39 26.26 11.20 -v 8.49 26.26 11.21 -v 8.32 26.26 11.30 -v 8.32 26.12 11.30 -v 8.45 26.12 9.78 -v 8.45 26.26 9.78 -v 13.04 12.70 6.81 -v 12.09 12.70 6.81 -v 12.09 14.28 5.99 -v 13.04 14.28 5.99 -v 13.04 17.34 5.64 -v 13.04 17.34 6.74 -v 12.09 17.34 5.64 -v 12.09 17.34 6.74 -v 8.98 12.70 12.20 -v 9.46 12.70 13.02 -v 8.74 14.28 13.43 -v 8.27 14.28 12.61 -v 7.97 17.34 12.79 -v 8.92 17.34 12.24 -v 8.44 17.34 13.61 -v 9.39 17.34 13.06 -v 12.09 12.70 14.54 -v 13.04 12.70 14.54 -v 13.04 14.28 15.36 -v 12.09 14.28 15.36 -v 12.09 17.34 15.71 -v 12.09 17.34 14.62 -v 13.04 17.34 15.71 -v 13.04 17.34 14.62 -v 10.73 23.34 7.35 -v 9.95 23.34 7.89 -v 9.48 24.92 7.22 -v 10.25 24.92 6.67 -v 10.32 28.41 6.74 -v 10.95 28.41 7.65 -v 9.55 28.41 7.29 -v 10.18 28.41 8.19 -v 9.46 12.70 8.34 -v 8.98 12.70 9.15 -v 8.27 14.28 8.74 -v 8.74 14.28 7.92 -v 8.44 17.34 7.75 -v 9.39 17.34 8.30 -v 7.97 17.34 8.57 -v 8.92 17.34 9.12 -v 7.23 20.21 10.98 -v 7.22 20.52 10.55 -v 7.22 19.21 10.55 -v 7.23 19.23 10.98 -v 7.32 19.26 11.32 -v 7.22 19.26 11.31 -v 7.22 19.12 11.31 -v 7.32 19.12 11.32 -v 7.24 20.75 10.55 -v 7.15 20.75 10.54 -v 7.19 20.29 11.20 -v 7.29 20.29 11.21 -v 7.45 19.12 9.80 -v 7.35 19.12 9.79 -v 7.35 19.26 9.79 -v 7.45 19.26 9.80 -v 7.24 19.07 10.55 -v 7.15 19.07 10.54 -v 7.31 19.12 9.90 -v 7.41 19.12 9.91 -v 7.09 19.12 11.19 -v 7.09 19.26 11.19 -v 7.05 19.23 10.96 -v 7.15 20.52 10.54 -v 7.15 20.21 10.97 -v 7.20 19.26 9.89 -v 7.20 19.12 9.89 -v 7.12 19.24 10.11 -v 7.04 19.07 10.53 -v 7.04 19.21 10.53 -v 7.30 20.21 10.13 -v 7.30 19.24 10.13 -v 7.41 20.29 9.91 -v 7.31 20.29 9.90 -v 7.29 19.12 11.21 -v 7.19 19.12 11.20 -v 7.23 20.21 10.12 -v 7.15 19.23 10.97 -v 7.23 19.24 10.12 -v 7.15 19.21 10.54 -v 7.31 19.26 9.90 -v 7.41 19.26 9.91 -v 7.19 19.26 11.20 -v 7.29 19.26 11.21 -v 7.11 19.26 11.30 -v 7.11 19.12 11.30 -v 7.25 19.12 9.78 -v 7.25 19.26 9.78 -v 12.26 27.21 6.54 -v 12.69 27.52 6.53 -v 12.69 26.21 6.53 -v 12.26 26.24 6.54 -v 11.92 26.26 6.63 -v 11.93 26.26 6.53 -v 11.93 26.12 6.53 -v 11.92 26.12 6.63 -v 12.69 27.75 6.56 -v 12.70 27.75 6.46 -v 12.04 27.30 6.51 -v 12.03 27.30 6.60 -v 13.44 26.12 6.76 -v 13.45 26.12 6.67 -v 13.45 26.26 6.67 -v 13.44 26.26 6.76 -v 12.69 26.07 6.56 -v 12.70 26.07 6.46 -v 13.34 26.12 6.62 -v 13.34 26.12 6.72 -v 12.05 26.12 6.40 -v 12.05 26.26 6.40 -v 12.28 26.24 6.36 -v 12.70 27.52 6.46 -v 12.27 27.21 6.47 -v 13.35 26.26 6.51 -v 13.35 26.12 6.51 -v 13.13 26.25 6.43 -v 12.71 26.07 6.35 -v 12.71 26.21 6.35 -v 13.12 27.21 6.61 -v 13.12 26.25 6.61 -v 13.34 27.30 6.72 -v 13.34 27.30 6.62 -v 12.03 26.12 6.60 -v 12.04 26.12 6.51 -v 13.12 27.21 6.54 -v 12.27 26.24 6.47 -v 13.12 26.25 6.54 -v 12.70 26.21 6.46 -v 13.34 26.26 6.62 -v 13.34 26.26 6.72 -v 12.04 26.26 6.51 -v 12.03 26.26 6.60 -v 11.94 26.26 6.43 -v 11.94 26.12 6.43 -v 13.46 26.12 6.56 -v 13.46 26.26 6.56 -v 16.15 12.70 9.15 -v 15.67 12.70 8.34 -v 16.39 14.28 7.92 -v 16.86 14.28 8.74 -v 17.17 17.34 8.57 -v 16.21 17.34 9.12 -v 16.69 17.34 7.75 -v 15.74 17.34 8.30 -v 12.26 20.21 5.34 -v 12.69 20.52 5.33 -v 12.69 19.21 5.33 -v 12.26 19.23 5.34 -v 11.92 19.26 5.43 -v 11.93 19.26 5.33 -v 11.93 19.12 5.33 -v 11.92 19.12 5.43 -v 12.69 20.75 5.36 -v 12.70 20.75 5.26 -v 12.04 20.29 5.30 -v 12.03 20.29 5.40 -v 13.44 19.12 5.56 -v 13.45 19.12 5.47 -v 13.45 19.26 5.47 -v 13.44 19.26 5.56 -v 12.69 19.07 5.36 -v 12.70 19.07 5.26 -v 13.34 19.12 5.42 -v 13.34 19.12 5.52 -v 12.05 19.12 5.20 -v 12.05 19.26 5.20 -v 12.28 19.23 5.16 -v 12.70 20.52 5.26 -v 12.27 20.21 5.26 -v 13.35 19.26 5.31 -v 13.35 19.12 5.31 -v 13.13 19.24 5.23 -v 12.71 19.07 5.15 -v 12.71 19.21 5.15 -v 13.12 20.21 5.41 -v 13.12 19.24 5.41 -v 13.34 20.29 5.52 -v 13.34 20.29 5.42 -v 12.03 19.12 5.40 -v 12.04 19.12 5.30 -v 13.12 20.21 5.34 -v 12.27 19.23 5.26 -v 13.12 19.24 5.34 -v 12.70 19.21 5.26 -v 13.34 19.26 5.42 -v 13.34 19.26 5.52 -v 12.04 19.26 5.30 -v 12.03 19.26 5.40 -v 11.94 19.26 5.23 -v 11.94 19.12 5.23 -v 13.46 19.12 5.36 -v 13.46 19.26 5.36 -v 15.89 23.34 8.84 -v 15.35 23.34 8.06 -v 16.03 24.92 7.59 -v 16.57 24.92 8.36 -v 16.50 28.41 8.43 -v 15.60 28.41 9.06 -v 15.96 28.41 7.66 -v 15.06 28.41 8.29 -v 16.70 27.21 10.37 -v 16.71 27.52 10.80 -v 16.71 26.21 10.80 -v 16.70 26.24 10.37 -v 16.61 26.26 10.03 -v 16.71 26.26 10.04 -v 16.71 26.12 10.04 -v 16.61 26.12 10.03 -v 16.69 27.75 10.80 -v 16.78 27.75 10.81 -v 16.74 27.30 10.15 -v 16.64 27.30 10.15 -v 16.48 26.12 11.55 -v 16.58 26.12 11.56 -v 16.58 26.26 11.56 -v 16.48 26.26 11.55 -v 16.69 26.07 10.80 -v 16.78 26.07 10.81 -v 16.62 26.12 11.45 -v 16.53 26.12 11.45 -v 16.84 26.12 10.16 -v 16.84 26.26 10.16 -v 16.88 26.24 10.39 -v 16.78 27.52 10.81 -v 16.78 27.21 10.38 -v 16.73 26.26 11.46 -v 16.73 26.12 11.46 -v 16.81 26.25 11.24 -v 16.89 26.07 10.82 -v 16.89 26.21 10.82 -v 16.63 27.21 11.23 -v 16.63 26.25 11.23 -v 16.53 27.30 11.45 -v 16.62 27.30 11.45 -v 16.64 26.12 10.15 -v 16.74 26.12 10.15 -v 16.70 27.21 11.23 -v 16.78 26.24 10.38 -v 16.70 26.25 11.23 -v 16.78 26.21 10.81 -v 16.62 26.26 11.45 -v 16.53 26.26 11.45 -v 16.74 26.26 10.15 -v 16.64 26.26 10.15 -v 16.82 26.26 10.05 -v 16.82 26.12 10.05 -v 16.68 26.12 11.57 -v 16.68 26.26 11.57 -v 15.67 12.70 13.02 -v 16.15 12.70 12.20 -v 16.86 14.28 12.61 -v 16.39 14.28 13.43 -v 16.69 17.34 13.61 -v 15.74 17.34 13.06 -v 17.17 17.34 12.79 -v 16.21 17.34 12.24 -v 16.83 28.50 13.14 -v 17.49 28.50 10.68 -v 17.49 30.29 10.68 -v 16.83 30.29 13.14 -v 15.03 28.50 14.94 -v 15.03 30.29 14.94 -v 12.57 28.50 15.60 -v 12.57 30.29 15.60 -v 10.10 28.50 14.94 -v 10.10 30.29 14.94 -v 8.30 28.50 13.14 -v 8.30 30.29 13.14 -v 7.64 28.50 10.68 -v 7.64 30.29 10.68 -v 8.30 28.50 8.21 -v 8.30 30.29 8.21 -v 10.10 28.50 6.41 -v 10.10 30.29 6.41 -v 12.57 28.50 5.75 -v 12.57 30.29 5.75 -v 15.03 28.50 6.41 -v 15.03 30.29 6.41 -v 16.83 28.50 8.21 -v 16.83 30.29 8.21 -v 16.78 30.29 10.68 -v 16.21 30.29 12.78 -v 15.03 30.90 14.94 -v 16.83 30.90 13.14 -v 16.21 30.90 12.78 -v 14.67 30.90 14.32 -v 14.67 30.29 14.32 -v 12.57 30.29 14.89 -v 10.10 30.90 14.94 -v 12.57 30.90 15.60 -v 12.57 30.90 14.89 -v 10.46 30.90 14.32 -v 10.46 30.29 14.32 -v 8.92 30.29 12.78 -v 7.64 30.90 10.68 -v 8.30 30.90 13.14 -v 8.92 30.90 12.78 -v 8.36 30.90 10.68 -v 8.36 30.29 10.68 -v 8.92 30.29 8.57 -v 10.10 30.90 6.41 -v 8.30 30.90 8.21 -v 8.92 30.90 8.57 -v 10.46 30.90 7.03 -v 10.46 30.29 7.03 -v 12.57 30.29 6.47 -v 15.03 30.90 6.41 -v 12.57 30.90 5.75 -v 12.57 30.90 6.47 -v 14.67 30.90 7.03 -v 14.67 30.29 7.03 -v 16.21 30.29 8.57 -v 17.49 30.90 10.68 -v 16.83 30.90 8.21 -v 16.21 30.90 8.57 -v 16.78 30.90 10.68 -v 16.78 29.42 10.68 -v 16.21 29.42 12.78 -v 14.67 29.42 14.32 -v 12.57 29.42 14.89 -v 10.46 29.42 14.32 -v 8.92 29.42 12.78 -v 8.36 29.42 10.68 -v 8.92 29.42 8.57 -v 10.46 29.42 7.03 -v 12.57 29.42 6.47 -v 14.67 29.42 7.03 -v 16.21 29.42 8.57 -v 12.57 29.42 10.68 -v 16.55 0.00 -12.98 -v 16.55 7.76 -12.98 -v 17.17 7.76 -10.68 -v 17.17 0.00 -10.68 -v 14.87 0.00 -14.66 -v 14.87 7.76 -14.66 -v 12.57 0.00 -15.28 -v 12.57 7.76 -15.28 -v 10.27 0.00 -14.66 -v 10.27 7.76 -14.66 -v 8.58 0.00 -12.98 -v 8.58 7.76 -12.98 -v 7.97 0.00 -10.68 -v 7.97 7.76 -10.68 -v 8.58 0.00 -8.38 -v 8.58 7.76 -8.38 -v 10.27 0.00 -6.69 -v 10.27 7.76 -6.69 -v 12.57 0.00 -6.08 -v 12.57 7.76 -6.08 -v 14.87 0.00 -6.69 -v 14.87 7.76 -6.69 -v 16.55 0.00 -8.38 -v 16.55 7.76 -8.38 -v 16.78 7.76 -13.11 -v 16.78 8.57 -13.11 -v 17.43 8.57 -10.68 -v 17.43 7.76 -10.68 -v 15.00 7.76 -14.89 -v 15.00 8.57 -14.89 -v 12.57 7.76 -15.54 -v 12.57 8.57 -15.54 -v 10.13 7.76 -14.89 -v 10.13 8.57 -14.89 -v 8.35 7.76 -13.11 -v 8.35 8.57 -13.11 -v 7.70 7.76 -10.68 -v 7.70 8.57 -10.68 -v 8.35 7.76 -8.24 -v 8.35 8.57 -8.24 -v 10.13 7.76 -6.46 -v 10.13 8.57 -6.46 -v 12.57 7.76 -5.81 -v 12.57 8.57 -5.81 -v 15.00 7.76 -6.46 -v 15.00 8.57 -6.46 -v 16.78 7.76 -8.24 -v 16.78 8.57 -8.24 -v 17.17 8.57 -10.68 -v 16.55 8.57 -12.98 -v 14.87 8.57 -14.66 -v 12.57 8.57 -15.28 -v 10.27 8.57 -14.66 -v 8.58 8.57 -12.98 -v 7.97 8.57 -10.68 -v 8.58 8.57 -8.38 -v 10.27 8.57 -6.69 -v 12.57 8.57 -6.08 -v 14.87 8.57 -6.69 -v 16.55 8.57 -8.38 -v 16.55 16.89 -12.98 -v 17.17 16.89 -10.68 -v 14.87 16.89 -14.66 -v 12.57 16.89 -15.28 -v 10.27 16.89 -14.66 -v 8.58 16.89 -12.98 -v 7.97 16.89 -10.68 -v 8.58 16.89 -8.38 -v 10.27 16.89 -6.69 -v 12.57 16.89 -6.08 -v 14.87 16.89 -6.69 -v 16.55 16.89 -8.38 -v 17.13 21.30 -13.31 -v 17.47 21.30 -13.51 -v 18.23 21.30 -10.68 -v 17.83 21.30 -10.68 -v 15.20 21.30 -15.24 -v 15.40 21.30 -15.58 -v 12.57 21.30 -15.94 -v 12.57 21.30 -16.34 -v 9.93 21.30 -15.24 -v 9.73 21.30 -15.58 -v 8.01 21.30 -13.31 -v 7.66 21.30 -13.51 -v 7.30 21.30 -10.68 -v 6.90 21.30 -10.68 -v 8.01 21.30 -8.04 -v 7.66 21.30 -7.84 -v 9.93 21.30 -6.12 -v 9.73 21.30 -5.77 -v 12.57 21.30 -5.41 -v 12.57 21.30 -5.01 -v 15.20 21.30 -6.12 -v 15.40 21.30 -5.77 -v 17.13 21.30 -8.04 -v 17.47 21.30 -7.84 -v 16.17 24.76 -12.76 -v 16.72 24.76 -10.68 -v 14.64 24.76 -14.28 -v 12.57 24.76 -14.83 -v 10.49 24.76 -14.28 -v 8.97 24.76 -12.76 -v 8.41 24.76 -10.68 -v 8.97 24.76 -8.60 -v 10.49 24.76 -7.08 -v 12.57 24.76 -6.52 -v 14.64 24.76 -7.08 -v 16.17 24.76 -8.60 -v 16.13 28.50 -12.74 -v 16.69 28.50 -10.68 -v 14.63 28.50 -14.24 -v 12.57 28.50 -14.80 -v 10.51 28.50 -14.24 -v 9.00 28.50 -12.74 -v 8.45 28.50 -10.68 -v 9.00 28.50 -8.62 -v 10.51 28.50 -7.11 -v 12.57 28.50 -6.56 -v 14.63 28.50 -7.11 -v 16.13 28.50 -8.62 -v 17.13 17.36 -13.31 -v 17.83 17.36 -10.68 -v 15.20 17.36 -15.24 -v 12.57 17.36 -15.94 -v 9.93 17.36 -15.24 -v 8.01 17.36 -13.31 -v 7.30 17.36 -10.68 -v 8.01 17.36 -8.04 -v 9.93 17.36 -6.12 -v 12.57 17.36 -5.41 -v 15.20 17.36 -6.12 -v 17.13 17.36 -8.04 -v 17.91 20.21 -10.37 -v 17.91 19.23 -10.37 -v 17.91 19.21 -10.80 -v 17.91 20.52 -10.80 -v 17.81 19.26 -10.03 -v 17.81 19.12 -10.03 -v 17.91 19.12 -10.04 -v 17.91 19.26 -10.04 -v 17.89 20.75 -10.80 -v 17.84 20.29 -10.15 -v 17.94 20.29 -10.15 -v 17.98 20.75 -10.81 -v 17.68 19.12 -11.55 -v 17.68 19.26 -11.55 -v 17.78 19.26 -11.56 -v 17.78 19.12 -11.56 -v 17.89 19.07 -10.80 -v 17.73 19.12 -11.45 -v 17.82 19.12 -11.45 -v 17.98 19.07 -10.81 -v 18.05 19.12 -10.16 -v 18.08 19.23 -10.39 -v 18.05 19.26 -10.16 -v 17.98 20.21 -10.38 -v 17.98 20.52 -10.81 -v 17.93 19.26 -11.46 -v 18.01 19.24 -11.24 -v 17.93 19.12 -11.46 -v 18.09 19.07 -10.82 -v 18.09 19.21 -10.82 -v 17.83 20.21 -11.23 -v 17.83 19.24 -11.23 -v 17.73 20.29 -11.45 -v 17.82 20.29 -11.45 -v 17.84 19.12 -10.15 -v 17.94 19.12 -10.15 -v 17.90 20.21 -11.23 -v 17.98 19.23 -10.38 -v 17.90 19.24 -11.23 -v 17.98 19.21 -10.81 -v 17.82 19.26 -11.45 -v 17.73 19.26 -11.45 -v 17.84 19.26 -10.15 -v 17.94 19.26 -10.15 -v 18.02 19.12 -10.05 -v 18.02 19.26 -10.05 -v 17.88 19.26 -11.57 -v 17.88 19.12 -11.57 -v 12.87 20.21 -16.02 -v 12.87 19.23 -16.02 -v 12.44 19.21 -16.02 -v 12.44 20.52 -16.02 -v 13.21 19.26 -15.92 -v 13.21 19.12 -15.92 -v 13.20 19.12 -16.02 -v 13.20 19.26 -16.02 -v 12.44 20.75 -16.00 -v 13.10 20.29 -15.95 -v 13.09 20.29 -16.05 -v 12.43 20.75 -16.10 -v 11.69 19.12 -15.79 -v 11.69 19.26 -15.79 -v 11.68 19.26 -15.89 -v 11.68 19.12 -15.89 -v 12.44 19.07 -16.00 -v 11.80 19.12 -15.84 -v 11.79 19.12 -15.94 -v 12.43 19.07 -16.10 -v 13.08 19.12 -16.16 -v 12.85 19.23 -16.20 -v 13.08 19.26 -16.16 -v 12.86 20.21 -16.09 -v 12.43 20.52 -16.10 -v 11.78 19.26 -16.04 -v 12.00 19.24 -16.12 -v 11.78 19.12 -16.04 -v 12.42 19.07 -16.20 -v 12.42 19.21 -16.20 -v 12.01 20.21 -15.94 -v 12.01 19.24 -15.94 -v 11.80 20.29 -15.84 -v 11.79 20.29 -15.94 -v 13.10 19.12 -15.95 -v 13.09 19.12 -16.05 -v 12.01 20.21 -16.01 -v 12.86 19.23 -16.09 -v 12.01 19.24 -16.01 -v 12.43 19.21 -16.10 -v 11.79 19.26 -15.94 -v 11.80 19.26 -15.84 -v 13.10 19.26 -15.95 -v 13.09 19.26 -16.05 -v 13.19 19.12 -16.13 -v 13.19 19.26 -16.13 -v 11.67 19.26 -16.00 -v 11.67 19.12 -16.00 -v 9.24 23.34 -12.52 -v 8.56 24.92 -12.99 -v 9.10 24.92 -13.76 -v 9.78 23.34 -13.29 -v 9.53 28.41 -12.29 -v 8.63 28.41 -12.92 -v 9.18 28.41 -13.70 -v 10.08 28.41 -13.07 -v 12.87 27.21 -14.81 -v 12.87 26.24 -14.81 -v 12.44 26.21 -14.82 -v 12.44 27.52 -14.82 -v 13.21 26.26 -14.72 -v 13.21 26.12 -14.72 -v 13.20 26.12 -14.82 -v 13.20 26.26 -14.82 -v 12.44 27.75 -14.80 -v 13.10 27.30 -14.75 -v 13.09 27.30 -14.85 -v 12.43 27.75 -14.89 -v 11.69 26.12 -14.59 -v 11.69 26.26 -14.59 -v 11.68 26.26 -14.69 -v 11.68 26.12 -14.69 -v 12.44 26.07 -14.80 -v 11.80 26.12 -14.64 -v 11.79 26.12 -14.73 -v 12.43 26.07 -14.89 -v 13.08 26.12 -14.96 -v 12.85 26.24 -14.99 -v 13.08 26.26 -14.96 -v 12.86 27.21 -14.89 -v 12.43 27.52 -14.89 -v 11.78 26.26 -14.84 -v 12.00 26.25 -14.92 -v 11.78 26.12 -14.84 -v 12.42 26.07 -15.00 -v 12.42 26.21 -15.00 -v 12.01 27.21 -14.74 -v 12.01 26.25 -14.74 -v 11.80 27.30 -14.64 -v 11.79 27.30 -14.73 -v 13.10 26.12 -14.75 -v 13.09 26.12 -14.85 -v 12.01 27.21 -14.81 -v 12.86 26.24 -14.89 -v 12.01 26.25 -14.81 -v 12.43 26.21 -14.89 -v 11.79 26.26 -14.73 -v 11.80 26.26 -14.64 -v 13.10 26.26 -14.75 -v 13.09 26.26 -14.85 -v 13.19 26.12 -14.93 -v 13.19 26.26 -14.93 -v 11.67 26.26 -14.79 -v 11.67 26.12 -14.79 -v 14.41 23.34 -14.01 -v 14.88 24.92 -14.68 -v 15.65 24.92 -14.14 -v 15.18 23.34 -13.46 -v 14.18 28.41 -13.71 -v 14.81 28.41 -14.61 -v 15.59 28.41 -14.07 -v 14.96 28.41 -13.17 -v 8.43 27.21 -10.98 -v 8.43 26.24 -10.98 -v 8.42 26.21 -10.55 -v 8.42 27.52 -10.55 -v 8.52 26.26 -11.32 -v 8.52 26.12 -11.32 -v 8.42 26.12 -11.31 -v 8.42 26.26 -11.31 -v 8.45 27.75 -10.55 -v 8.49 27.30 -11.21 -v 8.39 27.30 -11.20 -v 8.35 27.75 -10.54 -v 8.65 26.12 -9.80 -v 8.65 26.26 -9.80 -v 8.56 26.26 -9.79 -v 8.56 26.12 -9.79 -v 8.45 26.07 -10.55 -v 8.61 26.12 -9.91 -v 8.51 26.12 -9.90 -v 8.35 26.07 -10.54 -v 8.29 26.12 -11.19 -v 8.25 26.24 -10.96 -v 8.29 26.26 -11.19 -v 8.35 27.21 -10.97 -v 8.35 27.52 -10.54 -v 8.40 26.26 -9.89 -v 8.32 26.25 -10.11 -v 8.40 26.12 -9.89 -v 8.24 26.07 -10.53 -v 8.24 26.21 -10.53 -v 8.50 27.21 -10.13 -v 8.50 26.25 -10.13 -v 8.61 27.30 -9.91 -v 8.51 27.30 -9.90 -v 8.49 26.12 -11.21 -v 8.39 26.12 -11.20 -v 8.43 27.21 -10.12 -v 8.35 26.24 -10.97 -v 8.43 26.25 -10.12 -v 8.35 26.21 -10.54 -v 8.51 26.26 -9.90 -v 8.61 26.26 -9.91 -v 8.49 26.26 -11.21 -v 8.39 26.26 -11.20 -v 8.32 26.12 -11.30 -v 8.32 26.26 -11.30 -v 8.45 26.26 -9.78 -v 8.45 26.12 -9.78 -v 13.04 12.70 -6.81 -v 13.04 14.28 -5.99 -v 12.09 14.28 -5.99 -v 12.09 12.70 -6.81 -v 13.04 17.34 -6.74 -v 13.04 17.34 -5.64 -v 12.09 17.34 -5.64 -v 12.09 17.34 -6.74 -v 8.98 12.70 -12.20 -v 8.27 14.28 -12.61 -v 8.74 14.28 -13.43 -v 9.46 12.70 -13.02 -v 8.92 17.34 -12.24 -v 7.97 17.34 -12.79 -v 8.44 17.34 -13.61 -v 9.39 17.34 -13.06 -v 12.09 12.70 -14.54 -v 12.09 14.28 -15.36 -v 13.04 14.28 -15.36 -v 13.04 12.70 -14.54 -v 12.09 17.34 -14.62 -v 12.09 17.34 -15.71 -v 13.04 17.34 -15.71 -v 13.04 17.34 -14.62 -v 10.73 23.34 -7.35 -v 10.25 24.92 -6.67 -v 9.48 24.92 -7.22 -v 9.95 23.34 -7.89 -v 10.95 28.41 -7.65 -v 10.32 28.41 -6.74 -v 9.55 28.41 -7.29 -v 10.18 28.41 -8.19 -v 9.46 12.70 -8.34 -v 8.74 14.28 -7.92 -v 8.27 14.28 -8.74 -v 8.98 12.70 -9.15 -v 9.39 17.34 -8.30 -v 8.44 17.34 -7.75 -v 7.97 17.34 -8.57 -v 8.92 17.34 -9.12 -v 7.23 20.21 -10.98 -v 7.23 19.23 -10.98 -v 7.22 19.21 -10.55 -v 7.22 20.52 -10.55 -v 7.32 19.26 -11.32 -v 7.32 19.12 -11.32 -v 7.22 19.12 -11.31 -v 7.22 19.26 -11.31 -v 7.24 20.75 -10.55 -v 7.29 20.29 -11.21 -v 7.19 20.29 -11.20 -v 7.15 20.75 -10.54 -v 7.45 19.12 -9.80 -v 7.45 19.26 -9.80 -v 7.35 19.26 -9.79 -v 7.35 19.12 -9.79 -v 7.24 19.07 -10.55 -v 7.41 19.12 -9.91 -v 7.31 19.12 -9.90 -v 7.15 19.07 -10.54 -v 7.09 19.12 -11.19 -v 7.05 19.23 -10.96 -v 7.09 19.26 -11.19 -v 7.15 20.21 -10.97 -v 7.15 20.52 -10.54 -v 7.20 19.26 -9.89 -v 7.12 19.24 -10.11 -v 7.20 19.12 -9.89 -v 7.04 19.07 -10.53 -v 7.04 19.21 -10.53 -v 7.30 20.21 -10.13 -v 7.30 19.24 -10.13 -v 7.41 20.29 -9.91 -v 7.31 20.29 -9.90 -v 7.29 19.12 -11.21 -v 7.19 19.12 -11.20 -v 7.23 20.21 -10.12 -v 7.15 19.23 -10.97 -v 7.23 19.24 -10.12 -v 7.15 19.21 -10.54 -v 7.31 19.26 -9.90 -v 7.41 19.26 -9.91 -v 7.29 19.26 -11.21 -v 7.19 19.26 -11.20 -v 7.11 19.12 -11.30 -v 7.11 19.26 -11.30 -v 7.25 19.26 -9.78 -v 7.25 19.12 -9.78 -v 12.26 27.21 -6.54 -v 12.26 26.24 -6.54 -v 12.69 26.21 -6.53 -v 12.69 27.52 -6.53 -v 11.92 26.26 -6.63 -v 11.92 26.12 -6.63 -v 11.93 26.12 -6.53 -v 11.93 26.26 -6.53 -v 12.69 27.75 -6.56 -v 12.03 27.30 -6.60 -v 12.04 27.30 -6.51 -v 12.70 27.75 -6.46 -v 13.44 26.12 -6.76 -v 13.44 26.26 -6.76 -v 13.45 26.26 -6.67 -v 13.45 26.12 -6.67 -v 12.69 26.07 -6.56 -v 13.34 26.12 -6.72 -v 13.34 26.12 -6.62 -v 12.70 26.07 -6.46 -v 12.05 26.12 -6.40 -v 12.28 26.24 -6.36 -v 12.05 26.26 -6.40 -v 12.27 27.21 -6.47 -v 12.70 27.52 -6.46 -v 13.35 26.26 -6.51 -v 13.13 26.25 -6.43 -v 13.35 26.12 -6.51 -v 12.71 26.07 -6.35 -v 12.71 26.21 -6.35 -v 13.12 27.21 -6.61 -v 13.12 26.25 -6.61 -v 13.34 27.30 -6.72 -v 13.34 27.30 -6.62 -v 12.03 26.12 -6.60 -v 12.04 26.12 -6.51 -v 13.12 27.21 -6.54 -v 12.27 26.24 -6.47 -v 13.12 26.25 -6.54 -v 12.70 26.21 -6.46 -v 13.34 26.26 -6.62 -v 13.34 26.26 -6.72 -v 12.03 26.26 -6.60 -v 12.04 26.26 -6.51 -v 11.94 26.12 -6.43 -v 11.94 26.26 -6.43 -v 13.46 26.26 -6.56 -v 13.46 26.12 -6.56 -v 16.15 12.70 -9.15 -v 16.86 14.28 -8.74 -v 16.39 14.28 -7.92 -v 15.67 12.70 -8.34 -v 16.21 17.34 -9.12 -v 17.17 17.34 -8.57 -v 16.69 17.34 -7.75 -v 15.74 17.34 -8.30 -v 12.26 20.21 -5.34 -v 12.26 19.23 -5.34 -v 12.69 19.21 -5.33 -v 12.69 20.52 -5.33 -v 11.92 19.26 -5.43 -v 11.92 19.12 -5.43 -v 11.93 19.12 -5.33 -v 11.93 19.26 -5.33 -v 12.69 20.75 -5.36 -v 12.03 20.29 -5.40 -v 12.04 20.29 -5.30 -v 12.70 20.75 -5.26 -v 13.44 19.12 -5.56 -v 13.44 19.26 -5.56 -v 13.45 19.26 -5.47 -v 13.45 19.12 -5.47 -v 12.69 19.07 -5.36 -v 13.34 19.12 -5.52 -v 13.34 19.12 -5.42 -v 12.70 19.07 -5.26 -v 12.05 19.12 -5.20 -v 12.28 19.23 -5.16 -v 12.05 19.26 -5.20 -v 12.27 20.21 -5.26 -v 12.70 20.52 -5.26 -v 13.35 19.26 -5.31 -v 13.13 19.24 -5.23 -v 13.35 19.12 -5.31 -v 12.71 19.07 -5.15 -v 12.71 19.21 -5.15 -v 13.12 20.21 -5.41 -v 13.12 19.24 -5.41 -v 13.34 20.29 -5.52 -v 13.34 20.29 -5.42 -v 12.03 19.12 -5.40 -v 12.04 19.12 -5.30 -v 13.12 20.21 -5.34 -v 12.27 19.23 -5.26 -v 13.12 19.24 -5.34 -v 12.70 19.21 -5.26 -v 13.34 19.26 -5.42 -v 13.34 19.26 -5.52 -v 12.03 19.26 -5.40 -v 12.04 19.26 -5.30 -v 11.94 19.12 -5.23 -v 11.94 19.26 -5.23 -v 13.46 19.26 -5.36 -v 13.46 19.12 -5.36 -v 15.89 23.34 -8.84 -v 16.57 24.92 -8.36 -v 16.03 24.92 -7.59 -v 15.35 23.34 -8.06 -v 15.60 28.41 -9.06 -v 16.50 28.41 -8.43 -v 15.96 28.41 -7.66 -v 15.06 28.41 -8.29 -v 16.70 27.21 -10.37 -v 16.70 26.24 -10.37 -v 16.71 26.21 -10.80 -v 16.71 27.52 -10.80 -v 16.61 26.26 -10.03 -v 16.61 26.12 -10.03 -v 16.71 26.12 -10.04 -v 16.71 26.26 -10.04 -v 16.69 27.75 -10.80 -v 16.64 27.30 -10.15 -v 16.74 27.30 -10.15 -v 16.78 27.75 -10.81 -v 16.48 26.12 -11.55 -v 16.48 26.26 -11.55 -v 16.58 26.26 -11.56 -v 16.58 26.12 -11.56 -v 16.69 26.07 -10.80 -v 16.53 26.12 -11.45 -v 16.62 26.12 -11.45 -v 16.78 26.07 -10.81 -v 16.84 26.12 -10.16 -v 16.88 26.24 -10.39 -v 16.84 26.26 -10.16 -v 16.78 27.21 -10.38 -v 16.78 27.52 -10.81 -v 16.73 26.26 -11.46 -v 16.81 26.25 -11.24 -v 16.73 26.12 -11.46 -v 16.89 26.07 -10.82 -v 16.89 26.21 -10.82 -v 16.63 27.21 -11.23 -v 16.63 26.25 -11.23 -v 16.53 27.30 -11.45 -v 16.62 27.30 -11.45 -v 16.64 26.12 -10.15 -v 16.74 26.12 -10.15 -v 16.70 27.21 -11.23 -v 16.78 26.24 -10.38 -v 16.70 26.25 -11.23 -v 16.78 26.21 -10.81 -v 16.62 26.26 -11.45 -v 16.53 26.26 -11.45 -v 16.64 26.26 -10.15 -v 16.74 26.26 -10.15 -v 16.82 26.12 -10.05 -v 16.82 26.26 -10.05 -v 16.68 26.26 -11.57 -v 16.68 26.12 -11.57 -v 15.67 12.70 -13.02 -v 16.39 14.28 -13.43 -v 16.86 14.28 -12.61 -v 16.15 12.70 -12.20 -v 15.74 17.34 -13.06 -v 16.69 17.34 -13.61 -v 17.17 17.34 -12.79 -v 16.21 17.34 -12.24 -v 16.83 28.50 -13.14 -v 16.83 30.29 -13.14 -v 17.49 30.29 -10.68 -v 17.49 28.50 -10.68 -v 15.03 28.50 -14.94 -v 15.03 30.29 -14.94 -v 12.57 28.50 -15.60 -v 12.57 30.29 -15.60 -v 10.10 28.50 -14.94 -v 10.10 30.29 -14.94 -v 8.30 28.50 -13.14 -v 8.30 30.29 -13.14 -v 7.64 28.50 -10.68 -v 7.64 30.29 -10.68 -v 8.30 28.50 -8.21 -v 8.30 30.29 -8.21 -v 10.10 28.50 -6.41 -v 10.10 30.29 -6.41 -v 12.57 28.50 -5.75 -v 12.57 30.29 -5.75 -v 15.03 28.50 -6.41 -v 15.03 30.29 -6.41 -v 16.83 28.50 -8.21 -v 16.83 30.29 -8.21 -v 16.21 30.29 -12.78 -v 16.78 30.29 -10.68 -v 15.03 30.90 -14.94 -v 14.67 30.90 -14.32 -v 16.21 30.90 -12.78 -v 16.83 30.90 -13.14 -v 12.57 30.29 -14.89 -v 14.67 30.29 -14.32 -v 10.10 30.90 -14.94 -v 10.46 30.90 -14.32 -v 12.57 30.90 -14.89 -v 12.57 30.90 -15.60 -v 8.92 30.29 -12.78 -v 10.46 30.29 -14.32 -v 7.64 30.90 -10.68 -v 8.36 30.90 -10.68 -v 8.92 30.90 -12.78 -v 8.30 30.90 -13.14 -v 8.92 30.29 -8.57 -v 8.36 30.29 -10.68 -v 10.10 30.90 -6.41 -v 10.46 30.90 -7.03 -v 8.92 30.90 -8.57 -v 8.30 30.90 -8.21 -v 12.57 30.29 -6.47 -v 10.46 30.29 -7.03 -v 15.03 30.90 -6.41 -v 14.67 30.90 -7.03 -v 12.57 30.90 -6.47 -v 12.57 30.90 -5.75 -v 16.21 30.29 -8.57 -v 14.67 30.29 -7.03 -v 17.49 30.90 -10.68 -v 16.78 30.90 -10.68 -v 16.21 30.90 -8.57 -v 16.83 30.90 -8.21 -v 16.21 29.42 -12.78 -v 16.78 29.42 -10.68 -v 14.67 29.42 -14.32 -v 12.57 29.42 -14.89 -v 10.46 29.42 -14.32 -v 8.92 29.42 -12.78 -v 8.36 29.42 -10.68 -v 8.92 29.42 -8.57 -v 10.46 29.42 -7.03 -v 12.57 29.42 -6.47 -v 14.67 29.42 -7.03 -v 16.21 29.42 -8.57 -v 12.57 29.42 -10.68 -# 4553 vertices - -vn -1.00 0.00 -0.00 -vn -0.48 0.00 -0.88 -vn -0.17 0.00 -0.99 -vn 0.00 0.00 -1.00 -vn 0.17 0.00 -0.99 -vn 0.48 0.00 -0.88 -vn 1.00 0.00 -0.00 -vn 0.48 0.00 0.88 -vn 0.17 0.00 0.99 -vn 0.00 0.00 1.00 -vn -0.17 0.00 0.99 -vn -0.48 0.00 0.88 -vn -0.73 0.00 -0.69 -vn -0.27 0.00 -0.96 -vn -0.08 0.00 -1.00 -vn 0.08 0.00 -1.00 -vn 0.27 0.00 -0.96 -vn 0.73 0.00 -0.69 -vn 0.73 0.00 0.69 -vn 0.27 0.00 0.96 -vn 0.08 0.00 1.00 -vn -0.08 0.00 1.00 -vn -0.27 0.00 0.96 -vn -0.73 0.00 0.69 -vn -0.72 0.00 0.69 -vn 0.00 -1.00 -0.00 -vn 0.00 1.00 -0.00 -vn -0.60 0.56 -0.57 -vn -0.26 0.33 -0.91 -vn -0.07 0.25 -0.96 -vn 0.07 0.25 -0.96 -vn 0.26 0.33 -0.91 -vn 0.60 0.56 -0.57 -vn 0.60 0.56 0.57 -vn 0.26 0.33 0.91 -vn 0.07 0.25 0.96 -vn -0.07 0.25 0.96 -vn -0.26 0.33 0.91 -vn -0.60 0.56 0.57 -vn -0.73 0.01 -0.69 -vn -0.27 0.01 -0.96 -vn -0.08 0.01 -1.00 -vn -0.07 0.01 -1.00 -vn 0.08 0.01 -1.00 -vn 0.27 0.01 -0.96 -vn 0.73 0.01 -0.69 -vn 0.72 0.01 0.69 -vn 0.73 0.01 0.69 -vn 0.27 0.01 0.96 -vn 0.08 0.01 1.00 -vn -0.08 0.01 1.00 -vn -0.07 0.01 1.00 -vn -0.27 0.01 0.96 -vn -0.73 0.01 0.69 -vn -0.72 0.01 0.69 -vn -0.30 -0.91 -0.29 -vn -0.18 -0.75 -0.64 -vn -0.18 -0.74 -0.64 -vn -0.06 -0.65 -0.76 -vn 0.06 -0.65 -0.76 -vn 0.18 -0.75 -0.64 -vn 0.18 -0.74 -0.64 -vn 0.30 -0.91 -0.29 -vn 0.30 -0.91 0.29 -vn 0.18 -0.74 0.64 -vn 0.18 -0.75 0.64 -vn 0.06 -0.65 0.76 -vn -0.06 -0.65 0.76 -vn -0.18 -0.74 0.64 -vn -0.18 -0.75 0.64 -vn -0.30 -0.91 0.29 -vn -1.00 0.00 0.06 -vn -0.02 0.00 1.00 -vn -0.02 0.65 0.76 -vn 0.02 0.00 -1.00 -vn 0.00 -0.99 -0.12 -vn -0.85 0.00 0.52 -vn -0.95 0.12 0.30 -vn -0.62 0.00 -0.78 -vn -0.76 -0.16 -0.63 -vn -0.83 0.00 -0.56 -vn 0.02 0.66 -0.75 -vn -0.00 -0.99 0.12 -vn -0.72 0.09 -0.69 -vn -0.96 -0.21 0.19 -vn 0.02 -0.64 -0.77 -vn -0.02 -0.64 0.77 -vn -0.00 0.99 0.13 -vn 0.00 1.00 -0.10 -vn 0.00 0.99 -0.17 -vn 0.01 0.99 -0.17 -vn -0.00 0.99 0.10 -vn -0.74 0.00 0.67 -vn -0.75 0.00 0.67 -vn -0.54 0.00 -0.84 -vn -0.00 0.00 -1.00 -vn -0.96 0.00 -0.29 -vn -0.95 0.00 -0.30 -vn -0.31 0.95 -0.10 -vn 0.95 0.00 0.30 -vn 0.96 0.00 0.29 -vn 0.03 -1.00 0.01 -vn -0.05 0.00 -1.00 -vn -0.03 0.04 -1.00 -vn 0.10 0.00 -1.00 -vn 0.07 -0.06 -1.00 -vn 0.05 0.00 -1.00 -vn 0.31 0.95 0.10 -vn -0.04 -1.00 -0.01 -vn 0.08 0.04 -1.00 -vn -0.02 -0.06 -1.00 -vn 0.32 -0.94 0.10 -vn -0.32 -0.94 -0.10 -vn -0.04 1.00 -0.01 -vn 0.03 1.00 0.01 -vn 0.05 1.00 0.01 -vn -0.03 1.00 -0.01 -vn -0.07 0.00 -1.00 -vn 0.12 0.00 -0.99 -vn 0.33 -0.45 -0.83 -vn 0.19 -0.00 0.98 -vn 0.37 0.03 -0.93 -vn -0.19 0.00 -0.98 -vn -0.01 0.00 -1.00 -vn -0.96 0.00 -0.30 -vn 0.31 0.95 0.09 -vn -0.18 -0.35 -0.92 -vn 0.37 -0.00 -0.93 -vn -0.19 0.02 -0.98 -vn -0.37 0.00 0.93 -vn 1.00 0.00 -0.06 -vn 0.02 0.65 -0.76 -vn 0.85 0.00 -0.52 -vn 0.95 0.12 -0.30 -vn 0.62 0.00 0.78 -vn 0.76 -0.16 0.63 -vn 0.83 0.00 0.56 -vn 0.82 0.00 0.57 -vn -0.02 0.66 0.75 -vn 0.72 0.09 0.69 -vn 0.96 -0.21 -0.19 -vn 0.00 0.99 -0.13 -vn -0.00 1.00 0.10 -vn -0.00 0.99 0.17 -vn 0.00 0.99 -0.10 -vn 0.75 0.00 -0.67 -vn 0.54 0.00 0.84 -vn 0.00 -0.30 0.95 -vn 0.00 -0.07 1.00 -vn 0.38 -0.49 -0.78 -vn 0.16 0.00 0.99 -vn 0.44 -0.12 -0.89 -vn -0.16 0.00 -0.99 -vn 0.00 -0.30 -0.95 -vn 0.00 -0.07 -1.00 -vn 0.18 -0.35 0.92 -vn -0.37 -0.00 0.93 -vn 0.19 0.02 0.98 -vn 0.37 0.00 -0.93 -vn 0.38 -0.49 0.78 -vn -0.16 0.00 0.99 -vn 0.44 -0.12 0.89 -vn 0.16 0.00 -0.99 -vn 0.01 0.00 1.00 -vn 0.96 0.00 0.30 -vn -0.03 -1.00 -0.01 -vn 0.05 0.00 1.00 -vn 0.03 0.04 1.00 -vn -0.10 0.00 1.00 -vn -0.07 -0.06 1.00 -vn -0.05 0.00 1.00 -vn -0.31 0.95 -0.09 -vn 0.04 -1.00 0.01 -vn -0.08 0.04 1.00 -vn 0.02 -0.06 1.00 -vn 0.04 1.00 0.01 -vn -0.05 1.00 -0.02 -vn 0.07 0.00 1.00 -vn -0.12 0.00 0.99 -vn -0.38 -0.49 0.78 -vn -0.44 -0.12 0.89 -vn -0.43 -0.12 0.89 -vn -0.33 -0.45 0.83 -vn -0.19 -0.00 -0.98 -vn -0.37 0.03 0.93 -vn 0.19 0.00 0.98 -vn -0.38 -0.49 -0.78 -vn -0.44 -0.12 -0.89 -vn -0.43 -0.12 -0.89 -vn 0.72 0.00 0.69 -vn -0.07 0.00 1.00 -vn -0.72 0.00 -0.69 -vn 0.07 0.00 -1.00 -vn 0.72 0.00 -0.69 -vn 0.44 0.00 -0.90 -vn 0.44 0.00 0.90 -vn -0.44 0.00 0.90 -vn -0.44 0.00 -0.90 -vn 0.50 0.87 -0.00 -vn 0.00 0.45 -0.89 -vn -0.50 0.87 -0.00 -vn 0.00 0.42 0.91 -vn 0.08 1.00 -0.00 -vn 0.04 0.55 0.83 -vn -0.00 0.55 0.83 -vn 0.01 0.01 1.00 -vn -0.00 0.55 -0.83 -vn 0.04 0.55 -0.83 -vn 0.01 0.01 -1.00 -vn -0.08 1.00 -0.00 -vn -0.04 0.55 0.83 -vn -0.01 0.01 1.00 -vn -0.04 0.55 -0.83 -vn -0.01 0.01 -1.00 -vn -0.06 0.60 -0.79 -vn -0.91 -0.41 0.00 -vn -0.10 0.98 -0.19 -vn -0.06 0.60 0.79 -vn -0.91 -0.41 -0.00 -vn -0.10 0.98 0.19 -vn -0.05 0.61 -0.79 -vn -0.94 -0.35 -0.00 -vn -0.08 0.98 -0.19 -vn -0.05 0.61 0.79 -vn -0.08 0.98 0.19 -vn -0.04 0.61 -0.79 -vn -0.03 0.61 -0.79 -vn -0.97 -0.25 0.00 -vn -0.97 -0.25 -0.00 -vn -0.06 0.98 -0.19 -vn -0.04 0.61 0.79 -vn -0.03 0.61 0.79 -vn -0.06 0.98 0.19 -vn -0.01 0.61 -0.79 -vn -1.00 -0.07 -0.00 -vn -0.02 0.98 -0.19 -vn -0.01 0.61 0.79 -vn -0.02 0.98 0.19 -vn -1.00 -0.07 0.00 -vn -0.02 0.61 -0.79 -vn -0.99 -0.11 -0.00 -vn -0.02 0.61 0.79 -vn -0.99 -0.11 0.00 -vn 0.06 0.60 -0.79 -vn 0.91 -0.41 0.00 -vn 0.10 0.98 -0.19 -vn 0.06 0.60 0.79 -vn 0.91 -0.41 -0.00 -vn 0.10 0.98 0.19 -vn 0.05 0.61 -0.79 -vn 0.94 -0.35 -0.00 -vn 0.08 0.98 -0.19 -vn 0.05 0.61 0.79 -vn 0.94 -0.35 0.00 -vn 0.08 0.98 0.19 -vn 0.03 0.61 -0.79 -vn 0.04 0.61 -0.79 -vn 0.97 -0.25 0.00 -vn 0.06 0.98 -0.19 -vn 0.03 0.61 0.79 -vn 0.97 -0.25 -0.00 -vn 0.06 0.98 0.19 -vn 0.04 0.61 0.79 -vn 0.01 0.61 -0.79 -vn 1.00 -0.07 -0.00 -vn 0.02 0.98 -0.19 -vn 0.01 0.61 0.79 -vn 0.02 0.98 0.19 -vn 1.00 -0.07 0.00 -vn 0.02 0.61 -0.79 -vn 0.99 -0.11 -0.00 -vn 0.02 0.61 0.79 -vn 0.99 -0.11 0.00 -vn 0.10 0.98 -0.20 -vn 0.10 0.98 0.20 -vn 0.09 0.59 -0.80 -vn -0.82 0.57 0.00 -vn -0.82 0.57 -0.00 -vn 0.15 0.97 -0.20 -vn 0.09 0.59 0.80 -vn 0.15 0.97 0.20 -vn -0.09 0.59 -0.80 -vn 0.82 0.57 0.00 -vn -0.15 0.97 -0.20 -vn -0.09 0.59 0.80 -vn 0.82 0.57 -0.00 -vn -0.15 0.97 0.20 -vn -0.57 0.82 -0.00 -vn 0.08 -1.00 -0.00 -vn 0.57 0.82 -0.00 -vn -0.08 -1.00 -0.00 -vn 0.59 -0.81 -0.00 -vn -0.59 -0.81 -0.00 -vn 0.06 1.00 -0.00 -vn 0.10 0.99 -0.00 -vn -0.06 1.00 -0.00 -vn -0.07 -1.00 -0.00 -vn 0.07 -1.00 -0.00 -vn 0.00 0.37 0.93 -vn 0.00 -0.97 -0.26 -vn 0.00 0.37 -0.93 -vn 0.00 -0.97 0.26 -vn 0.00 -0.36 -0.93 -vn 0.00 -0.36 0.93 -vn 0.00 0.96 0.28 -vn 0.00 0.98 -0.21 -vn 0.00 0.94 -0.35 -vn 0.00 0.98 0.22 -vn 0.00 0.96 -0.28 -vn 0.00 0.98 0.21 -vn 0.00 0.94 0.35 -vn 0.00 0.98 -0.22 -vn 0.11 0.99 -0.00 -vn -0.10 0.99 -0.00 -vn 1.00 0.04 -0.00 -vn 0.87 0.50 -0.00 -vn -1.00 -0.04 -0.00 -vn -0.87 -0.50 -0.00 -vn 0.40 0.92 -0.00 -vn -0.42 -0.91 -0.00 -vn -0.40 0.92 -0.00 -vn 0.42 -0.91 -0.00 -vn -0.87 0.50 -0.00 -vn 0.87 -0.50 -0.00 -vn -1.00 0.04 -0.00 -vn 1.00 -0.04 -0.00 -vn 0.02 0.05 -1.00 -vn 0.95 -0.05 0.30 -vn -0.02 -0.01 1.00 -vn -0.94 0.18 -0.29 -vn 0.03 -0.06 -1.00 -vn 0.02 -0.06 -1.00 -vn 0.96 0.05 0.27 -vn -0.02 0.01 1.00 -vn -0.96 -0.22 -0.19 -vn 0.00 -1.00 -0.05 -vn 0.00 1.00 0.05 -vn 0.00 -1.00 0.05 -vn 0.00 1.00 -0.05 -vn 0.02 -1.00 -0.00 -vn -0.02 1.00 -0.00 -vn -0.01 1.00 -0.00 -vn -0.01 -1.00 -0.00 -vn 0.01 1.00 -0.00 -vn 0.02 0.05 1.00 -vn 0.95 -0.05 -0.30 -vn -0.02 -0.01 -1.00 -vn -0.94 0.18 0.29 -vn 0.03 -0.06 1.00 -vn 0.96 0.05 -0.27 -vn -0.02 0.01 -1.00 -vn -0.96 -0.22 0.19 -vn -0.96 -0.22 0.18 -vn 0.01 -1.00 -0.00 -vn -0.02 -1.00 -0.00 -vn 0.02 1.00 -0.00 -vn -0.99 0.12 -0.00 -vn -1.00 0.01 0.04 -vn -0.99 -0.10 0.07 -vn 0.00 0.01 1.00 -vn 0.00 -0.00 1.00 -vn 1.00 0.01 0.01 -vn 1.00 -0.03 0.02 -vn 0.00 0.04 -1.00 -vn 0.00 0.01 -1.00 -vn 0.00 -0.02 -1.00 -vn 0.13 -0.99 -0.00 -vn -0.13 0.99 -0.00 -vn -0.13 -0.99 -0.00 -vn 0.13 0.99 -0.00 -vn -0.07 1.00 -0.00 -vn 0.07 1.00 -0.00 -vn 0.00 -0.67 -0.74 -vn 0.00 -0.13 -0.99 -vn 0.00 0.67 -0.74 -vn 0.00 0.13 -0.99 -vn 0.00 0.12 -0.99 -vn -1.00 0.01 -0.04 -vn -0.99 -0.10 -0.07 -vn 0.00 -0.00 -1.00 -vn 1.00 0.01 -0.01 -vn 1.00 -0.03 -0.02 -vn 0.00 0.04 1.00 -vn 0.00 -0.02 1.00 -vn 0.72 0.01 -0.69 -vn -0.72 0.01 -0.69 -vn -1.00 0.00 -0.06 -vn -0.02 0.00 -1.00 -vn -0.02 0.65 -0.76 -vn 0.02 0.00 1.00 -vn 0.00 -0.99 0.12 -vn -0.85 0.00 -0.52 -vn -0.95 0.12 -0.30 -vn -0.62 0.00 0.78 -vn -0.76 -0.16 0.63 -vn -0.83 0.00 0.56 -vn 0.02 0.66 0.75 -vn -0.00 -0.99 -0.12 -vn -0.72 0.09 0.69 -vn -0.96 -0.21 -0.19 -vn 0.02 -0.64 0.77 -vn -0.02 -0.64 -0.77 -vn -0.00 0.99 -0.13 -vn 0.00 1.00 0.10 -vn 0.00 0.99 0.17 -vn 0.01 0.99 0.17 -vn -0.00 0.99 -0.10 -vn -0.74 0.00 -0.67 -vn -0.75 0.00 -0.67 -vn -0.54 0.00 0.84 -vn -0.00 0.00 1.00 -vn -0.96 0.00 0.29 -vn -0.95 0.00 0.30 -vn -0.31 0.95 0.10 -vn 0.95 0.00 -0.30 -vn 0.96 0.00 -0.29 -vn 0.03 -1.00 -0.01 -vn -0.03 0.04 1.00 -vn 0.10 0.00 1.00 -vn 0.07 -0.06 1.00 -vn 0.31 0.95 -0.10 -vn -0.04 -1.00 0.01 -vn 0.08 0.04 1.00 -vn -0.02 -0.06 1.00 -vn 0.32 -0.94 -0.10 -vn -0.32 -0.94 0.10 -vn -0.04 1.00 0.01 -vn 0.03 1.00 -0.01 -vn 0.05 1.00 -0.01 -vn -0.03 1.00 0.01 -vn 0.12 0.00 0.99 -vn 0.33 -0.45 0.83 -vn 0.19 -0.00 -0.98 -vn 0.37 0.03 0.93 -vn -0.19 0.00 0.98 -vn -0.01 0.00 1.00 -vn -0.96 0.00 0.30 -vn 0.31 0.95 -0.09 -vn -0.18 -0.35 0.92 -vn 0.37 -0.00 0.93 -vn -0.19 0.02 0.98 -vn -0.37 0.00 -0.93 -vn 1.00 0.00 0.06 -vn 0.02 0.65 0.76 -vn 0.85 0.00 0.52 -vn 0.95 0.12 0.30 -vn 0.62 0.00 -0.78 -vn 0.76 -0.16 -0.63 -vn 0.83 0.00 -0.56 -vn 0.82 0.00 -0.57 -vn -0.02 0.66 -0.75 -vn 0.72 0.09 -0.69 -vn 0.96 -0.21 0.19 -vn 0.00 0.99 0.13 -vn -0.00 1.00 -0.10 -vn -0.00 0.99 -0.17 -vn 0.00 0.99 0.10 -vn 0.75 0.00 0.67 -vn 0.54 0.00 -0.84 -vn 0.18 -0.35 -0.92 -vn -0.37 -0.00 -0.93 -vn 0.19 0.02 -0.98 -vn 0.37 0.00 0.93 -vn 0.01 0.00 -1.00 -vn 0.96 0.00 -0.30 -vn -0.03 -1.00 0.01 -vn 0.03 0.04 -1.00 -vn -0.10 0.00 -1.00 -vn -0.07 -0.06 -1.00 -vn -0.31 0.95 0.09 -vn 0.04 -1.00 -0.01 -vn -0.08 0.04 -1.00 -vn 0.04 1.00 -0.01 -vn -0.05 1.00 0.02 -vn -0.12 0.00 -0.99 -vn -0.33 -0.45 -0.83 -vn -0.19 -0.00 0.98 -vn -0.37 0.03 -0.93 -vn 0.19 0.00 -0.98 -vn 0.74 0.00 -0.67 -vn -0.05 1.00 -0.01 -vn -0.82 0.00 -0.57 -vn 0.05 1.00 0.02 -vn 0.74 0.00 0.67 -vn -0.05 1.00 0.01 -vn -0.82 0.00 0.57 -vn 0.05 1.00 -0.02 -# 487 vertex normals - -vt 0.10 0.10 0.00 -vt 0.07 0.10 0.00 -vt 0.07 0.01 0.00 -vt 0.10 0.01 0.00 -vt 0.05 0.10 0.00 -vt 0.05 0.01 0.00 -vt 0.02 0.10 0.00 -vt 0.02 0.01 0.00 -vt 0.38 0.10 0.00 -vt 0.35 0.10 0.00 -vt 0.35 0.01 0.00 -vt 0.38 0.01 0.00 -vt 0.32 0.10 0.00 -vt 0.32 0.01 0.00 -vt 0.29 0.10 0.00 -vt 0.29 0.01 0.00 -vt 0.27 0.10 0.00 -vt 0.27 0.01 0.00 -vt 0.24 0.10 0.00 -vt 0.24 0.01 0.00 -vt 0.21 0.10 0.00 -vt 0.21 0.01 0.00 -vt 0.17 0.10 0.00 -vt 0.17 0.01 0.00 -vt 0.13 0.10 0.00 -vt 0.13 0.01 0.00 -vt 0.34 0.56 0.00 -vt 0.37 0.56 0.00 -vt 0.37 0.57 0.00 -vt 0.34 0.57 0.00 -vt 0.30 0.56 0.00 -vt 0.30 0.57 0.00 -vt 0.27 0.56 0.00 -vt 0.27 0.57 0.00 -vt 0.61 0.56 0.00 -vt 0.64 0.56 0.00 -vt 0.64 0.57 0.00 -vt 0.61 0.57 0.00 -vt 0.58 0.56 0.00 -vt 0.58 0.57 0.00 -vt 0.55 0.56 0.00 -vt 0.55 0.57 0.00 -vt 0.52 0.56 0.00 -vt 0.52 0.57 0.00 -vt 0.49 0.56 0.00 -vt 0.49 0.57 0.00 -vt 0.46 0.56 0.00 -vt 0.46 0.57 0.00 -vt 0.43 0.56 0.00 -vt 0.43 0.57 0.00 -vt 0.40 0.56 0.00 -vt 0.40 0.57 0.00 -vt 0.97 0.27 0.00 -vt 0.96 0.28 0.00 -vt 0.94 0.27 0.00 -vt 0.93 0.26 0.00 -vt 0.93 0.25 0.00 -vt 0.93 0.24 0.00 -vt 0.93 0.23 0.00 -vt 0.94 0.23 0.00 -vt 0.94 0.22 0.00 -vt 0.96 0.22 0.00 -vt 0.97 0.23 0.00 -vt 0.97 0.22 0.00 -vt 0.98 0.24 0.00 -vt 0.98 0.23 0.00 -vt 0.99 0.25 0.00 -vt 0.98 0.26 0.00 -vt 0.81 0.06 0.00 -vt 0.81 0.16 0.00 -vt 0.78 0.16 0.00 -vt 0.78 0.06 0.00 -vt 0.76 0.16 0.00 -vt 0.76 0.06 0.00 -vt 0.73 0.16 0.00 -vt 0.73 0.06 0.00 -vt 0.71 0.16 0.00 -vt 0.71 0.06 0.00 -vt 0.69 0.16 0.00 -vt 0.69 0.06 0.00 -vt 0.98 0.06 0.00 -vt 0.98 0.16 0.00 -vt 0.95 0.16 0.00 -vt 0.95 0.06 0.00 -vt 0.93 0.16 0.00 -vt 0.93 0.06 0.00 -vt 0.91 0.16 0.00 -vt 0.91 0.06 0.00 -vt 0.88 0.16 0.00 -vt 0.88 0.06 0.00 -vt 0.86 0.16 0.00 -vt 0.86 0.07 0.00 -vt 0.83 0.16 0.00 -vt 0.83 0.07 0.00 -vt 0.98 0.28 0.00 -vt 0.96 0.29 0.00 -vt 0.99 0.27 0.00 -vt 1.00 0.25 0.00 -vt 0.99 0.23 0.00 -vt 0.98 0.22 0.00 -vt 0.96 0.21 0.00 -vt 0.92 0.23 0.00 -vt 0.92 0.25 0.00 -vt 0.93 0.27 0.00 -vt 0.92 0.27 0.00 -vt 0.94 0.28 0.00 -vt 0.11 0.23 0.00 -vt 0.09 0.22 0.00 -vt 0.10 0.18 0.00 -vt 0.13 0.19 0.00 -vt 0.14 0.24 0.00 -vt 0.15 0.19 0.00 -vt 0.17 0.24 0.00 -vt 0.18 0.20 0.00 -vt 0.21 0.24 0.00 -vt 0.20 0.20 0.00 -vt 0.24 0.24 0.00 -vt 0.23 0.19 0.00 -vt 0.27 0.23 0.00 -vt 0.25 0.19 0.00 -vt 0.30 0.22 0.00 -vt 0.28 0.18 0.00 -vt 0.32 0.21 0.00 -vt 0.30 0.17 0.00 -vt 0.35 0.19 0.00 -vt 0.32 0.16 0.00 -vt 0.03 0.19 0.00 -vt 0.01 0.17 0.00 -vt 0.04 0.14 0.00 -vt 0.06 0.16 0.00 -vt 0.06 0.21 0.00 -vt 0.08 0.17 0.00 -vt 0.12 0.14 0.00 -vt 0.14 0.15 0.00 -vt 0.16 0.15 0.00 -vt 0.18 0.16 0.00 -vt 0.20 0.16 0.00 -vt 0.22 0.15 0.00 -vt 0.24 0.15 0.00 -vt 0.26 0.14 0.00 -vt 0.28 0.13 0.00 -vt 0.31 0.12 0.00 -vt 0.06 0.11 0.00 -vt 0.08 0.12 0.00 -vt 0.10 0.13 0.00 -vt 0.14 0.12 0.00 -vt 0.12 0.12 0.00 -vt 0.12 0.11 0.00 -vt 0.14 0.11 0.00 -vt 0.10 0.12 0.00 -vt 0.10 0.11 0.00 -vt 0.35 0.12 0.00 -vt 0.33 0.12 0.00 -vt 0.33 0.11 0.00 -vt 0.35 0.11 0.00 -vt 0.31 0.11 0.00 -vt 0.29 0.12 0.00 -vt 0.29 0.11 0.00 -vt 0.27 0.12 0.00 -vt 0.27 0.11 0.00 -vt 0.24 0.12 0.00 -vt 0.24 0.11 0.00 -vt 0.22 0.12 0.00 -vt 0.22 0.11 0.00 -vt 0.20 0.12 0.00 -vt 0.20 0.11 0.00 -vt 0.18 0.12 0.00 -vt 0.18 0.11 0.00 -vt 0.16 0.12 0.00 -vt 0.16 0.11 0.00 -vt 0.67 0.06 0.00 -vt 0.64 0.06 0.00 -vt 0.64 0.01 0.00 -vt 0.67 0.01 0.00 -vt 0.60 0.06 0.00 -vt 0.60 0.01 0.00 -vt 0.99 0.06 0.00 -vt 0.96 0.06 0.00 -vt 0.96 0.01 0.00 -vt 0.99 0.01 0.00 -vt 0.93 0.01 0.00 -vt 0.89 0.06 0.00 -vt 0.89 0.01 0.00 -vt 0.86 0.06 0.00 -vt 0.86 0.01 0.00 -vt 0.83 0.06 0.00 -vt 0.83 0.01 0.00 -vt 0.80 0.06 0.00 -vt 0.80 0.01 0.00 -vt 0.77 0.06 0.00 -vt 0.77 0.01 0.00 -vt 0.73 0.01 0.00 -vt 0.70 0.06 0.00 -vt 0.70 0.01 0.00 -vt 0.95 0.87 0.00 -vt 0.93 0.89 0.00 -vt 0.92 0.82 0.00 -vt 0.95 0.82 0.00 -vt 0.92 0.79 0.00 -vt 0.90 0.79 0.00 -vt 0.90 0.77 0.00 -vt 0.92 0.77 0.00 -vt 0.99 0.56 0.00 -vt 0.98 0.56 0.00 -vt 0.98 0.52 0.00 -vt 0.99 0.52 0.00 -vt 0.93 0.78 0.00 -vt 0.96 0.78 0.00 -vt 0.96 0.79 0.00 -vt 0.96 0.81 0.00 -vt 0.94 0.81 0.00 -vt 0.93 0.90 0.00 -vt 0.95 0.88 0.00 -vt 0.96 0.88 0.00 -vt 0.89 0.79 0.00 -vt 0.89 0.81 0.00 -vt 0.90 0.87 0.00 -vt 0.90 0.82 0.00 -vt 0.99 0.60 0.00 -vt 0.98 0.60 0.00 -vt 0.99 0.66 0.00 -vt 0.99 0.59 0.00 -vt 0.99 0.46 0.00 -vt 0.92 0.76 0.00 -vt 0.86 0.76 0.00 -vt 0.86 0.77 0.00 -vt 0.96 0.83 0.00 -vt 0.95 0.83 0.00 -vt 0.98 0.66 0.00 -vt 0.98 0.46 0.00 -vt 0.96 0.76 0.00 -vt 0.92 0.75 0.00 -vt 0.96 0.75 0.00 -vt 0.86 0.75 0.00 -vt 0.93 0.77 0.00 -vt 0.96 0.77 0.00 -vt 0.97 0.76 0.00 -vt 0.97 0.77 0.00 -vt 0.97 0.75 0.00 -vt 0.97 0.79 0.00 -vt 0.98 0.80 0.00 -vt 0.97 0.78 0.00 -vt 0.62 0.90 0.00 -vt 0.63 0.90 0.00 -vt 0.63 0.93 0.00 -vt 0.62 0.93 0.00 -vt 0.66 0.90 0.00 -vt 0.64 0.93 0.00 -vt 0.64 0.98 0.00 -vt 0.66 0.98 0.00 -vt 0.63 0.99 0.00 -vt 0.62 0.99 0.00 -vt 0.60 0.18 0.00 -vt 0.63 0.18 0.00 -vt 0.63 0.20 0.00 -vt 0.60 0.20 0.00 -vt 0.56 0.18 0.00 -vt 0.56 0.20 0.00 -vt 0.53 0.18 0.00 -vt 0.53 0.20 0.00 -vt 0.89 0.18 0.00 -vt 0.92 0.18 0.00 -vt 0.92 0.20 0.00 -vt 0.89 0.20 0.00 -vt 0.86 0.18 0.00 -vt 0.86 0.20 0.00 -vt 0.82 0.18 0.00 -vt 0.82 0.20 0.00 -vt 0.79 0.18 0.00 -vt 0.79 0.20 0.00 -vt 0.76 0.18 0.00 -vt 0.76 0.20 0.00 -vt 0.73 0.18 0.00 -vt 0.73 0.20 0.00 -vt 0.69 0.18 0.00 -vt 0.69 0.20 0.00 -vt 0.66 0.18 0.00 -vt 0.66 0.20 0.00 -vt 0.86 0.88 0.00 -vt 0.83 0.89 0.00 -vt 0.83 0.88 0.00 -vt 0.85 0.88 0.00 -vt 0.88 0.87 0.00 -vt 0.87 0.86 0.00 -vt 0.88 0.84 0.00 -vt 0.88 0.81 0.00 -vt 0.87 0.82 0.00 -vt 0.86 0.79 0.00 -vt 0.85 0.80 0.00 -vt 0.83 0.79 0.00 -vt 0.83 0.80 0.00 -vt 0.81 0.79 0.00 -vt 0.81 0.80 0.00 -vt 0.79 0.81 0.00 -vt 0.79 0.82 0.00 -vt 0.78 0.84 0.00 -vt 0.79 0.84 0.00 -vt 0.79 0.87 0.00 -vt 0.79 0.86 0.00 -vt 0.81 0.88 0.00 -vt 0.60 0.67 0.00 -vt 0.58 0.67 0.00 -vt 0.58 0.66 0.00 -vt 0.61 0.66 0.00 -vt 0.64 0.67 0.00 -vt 0.64 0.66 0.00 -vt 0.68 0.67 0.00 -vt 0.68 0.66 0.00 -vt 0.72 0.67 0.00 -vt 0.72 0.66 0.00 -vt 0.76 0.67 0.00 -vt 0.76 0.66 0.00 -vt 0.79 0.67 0.00 -vt 0.79 0.66 0.00 -vt 0.81 0.67 0.00 -vt 0.81 0.66 0.00 -vt 0.84 0.67 0.00 -vt 0.84 0.66 0.00 -vt 0.88 0.67 0.00 -vt 0.88 0.66 0.00 -vt 0.53 0.67 0.00 -vt 0.49 0.67 0.00 -vt 0.50 0.66 0.00 -vt 0.53 0.66 0.00 -vt 0.56 0.67 0.00 -vt 0.56 0.66 0.00 -vt 0.66 0.16 0.00 -vt 0.63 0.17 0.00 -vt 0.63 0.12 0.00 -vt 0.68 0.14 0.00 -vt 0.68 0.12 0.00 -vt 0.68 0.09 0.00 -vt 0.66 0.07 0.00 -vt 0.63 0.07 0.00 -vt 0.61 0.07 0.00 -vt 0.59 0.09 0.00 -vt 0.59 0.12 0.00 -vt 0.59 0.14 0.00 -vt 0.61 0.16 0.00 -vt 0.60 0.21 0.00 -vt 0.56 0.21 0.00 -vt 0.64 0.68 0.00 -vt 0.60 0.68 0.00 -vt 0.92 0.21 0.00 -vt 0.89 0.21 0.00 -vt 0.72 0.68 0.00 -vt 0.68 0.68 0.00 -vt 0.86 0.21 0.00 -vt 0.82 0.21 0.00 -vt 0.79 0.68 0.00 -vt 0.76 0.68 0.00 -vt 0.79 0.21 0.00 -vt 0.76 0.21 0.00 -vt 0.84 0.68 0.00 -vt 0.81 0.68 0.00 -vt 0.73 0.21 0.00 -vt 0.69 0.21 0.00 -vt 0.53 0.68 0.00 -vt 0.49 0.68 0.00 -vt 0.66 0.21 0.00 -vt 0.63 0.21 0.00 -vt 0.58 0.68 0.00 -vt 0.56 0.68 0.00 -vt 0.24 0.62 0.00 -vt 0.00 0.62 0.00 -vt 0.05 0.71 0.00 -vt 0.19 0.71 0.00 -vt 0.00 0.41 0.00 -vt 0.28 0.41 0.00 -vt 0.24 0.49 0.00 -vt 0.05 0.49 0.00 -vt 0.01 0.52 0.00 -vt 0.29 0.52 0.00 -vt 0.24 0.59 0.00 -vt 0.05 0.59 0.00 -vt 0.38 0.32 0.00 -vt 0.53 0.32 0.00 -vt 0.53 0.42 0.00 -vt 0.38 0.42 0.00 -vt 0.67 0.21 0.00 -vt 0.49 0.21 0.00 -vt 0.49 0.30 0.00 -vt 0.67 0.30 0.00 -vt 0.46 0.89 0.00 -vt 0.27 0.89 0.00 -vt 0.27 0.99 0.00 -vt 0.46 0.99 0.00 -vt 0.62 0.80 0.00 -vt 0.77 0.80 0.00 -vt 0.77 0.88 0.00 -vt 0.62 0.88 0.00 -vt 0.24 0.73 0.00 -vt 0.32 0.73 0.00 -vt 0.31 0.72 0.00 -vt 0.24 0.72 0.00 -vt 0.32 0.63 0.00 -vt 0.31 0.64 0.00 -vt 0.24 0.63 0.00 -vt 0.24 0.64 0.00 -vt 0.19 0.33 0.00 -vt 0.19 0.25 0.00 -vt 0.20 0.27 0.00 -vt 0.20 0.31 0.00 -vt 0.31 0.25 0.00 -vt 0.30 0.27 0.00 -vt 0.31 0.33 0.00 -vt 0.30 0.31 0.00 -vt 0.14 0.26 0.00 -vt 0.14 0.40 0.00 -vt 0.18 0.34 0.00 -vt 0.18 0.26 0.00 -vt 0.36 0.40 0.00 -vt 0.32 0.34 0.00 -vt 0.36 0.26 0.00 -vt 0.32 0.26 0.00 -vt 0.49 0.15 0.00 -vt 0.49 0.25 0.00 -vt 0.36 0.25 0.00 -vt 0.36 0.15 0.00 -vt 0.41 0.01 0.00 -vt 0.58 0.01 0.00 -vt 0.58 0.14 0.00 -vt 0.41 0.14 0.00 -vt 0.58 0.42 0.00 -vt 0.58 0.54 0.00 -vt 0.45 0.53 0.00 -vt 0.45 0.45 0.00 -vt 0.71 0.95 0.00 -vt 0.66 0.89 0.00 -vt 0.14 0.94 0.00 -vt 0.01 0.95 0.00 -vt 0.76 0.89 0.00 -vt 0.32 0.41 0.00 -vt 0.32 0.53 0.00 -vt 0.27 0.95 0.00 -vt 0.80 0.98 0.00 -vt 0.80 0.93 0.00 -vt 0.81 0.93 0.00 -vt 0.81 0.98 0.00 -vt 0.78 0.98 0.00 -vt 0.78 0.93 0.00 -vt 0.77 0.93 0.00 -vt 0.77 0.98 0.00 -vt 0.77 0.99 0.00 -vt 0.78 0.99 0.00 -vt 0.73 0.93 0.00 -vt 0.74 0.93 0.00 -vt 0.74 0.98 0.00 -vt 0.73 0.98 0.00 -vt 0.76 0.98 0.00 -vt 0.86 0.48 0.00 -vt 0.86 0.45 0.00 -vt 0.94 0.45 0.00 -vt 0.94 0.48 0.00 -vt 0.95 0.40 0.00 -vt 0.99 0.40 0.00 -vt 0.99 0.45 0.00 -vt 0.95 0.45 0.00 -vt 0.99 0.35 0.00 -vt 0.90 0.35 0.00 -vt 0.90 0.39 0.00 -vt 0.99 0.39 0.00 -vt 0.68 0.24 0.00 -vt 0.71 0.24 0.00 -vt 0.71 0.62 0.00 -vt 0.68 0.62 0.00 -vt 0.61 0.69 0.00 -vt 0.80 0.69 0.00 -vt 0.80 0.76 0.00 -vt 0.61 0.76 0.00 -vt 0.87 0.95 0.00 -vt 0.86 0.97 0.00 -vt 0.86 0.91 0.00 -vt 0.87 0.91 0.00 -vt 0.90 0.94 0.00 -vt 0.90 0.91 0.00 -vt 0.91 0.91 0.00 -vt 0.91 0.94 0.00 -vt 0.98 0.83 0.00 -vt 0.98 0.76 0.00 -vt 0.89 0.94 0.00 -vt 0.89 0.91 0.00 -vt 0.95 0.93 0.00 -vt 0.97 0.93 0.00 -vt 0.97 0.94 0.00 -vt 0.97 0.97 0.00 -vt 0.97 0.99 0.00 -vt 0.96 0.99 0.00 -vt 0.86 0.98 0.00 -vt 0.87 0.97 0.00 -vt 0.88 0.97 0.00 -vt 0.86 0.99 0.00 -vt 0.90 0.99 0.00 -vt 0.90 0.97 0.00 -vt 0.91 0.99 0.00 -vt 0.93 0.97 0.00 -vt 0.93 0.98 0.00 -vt 0.85 0.95 0.00 -vt 0.85 0.91 0.00 -vt 0.98 0.90 0.00 -vt 0.93 0.93 0.00 -vt 0.84 0.97 0.00 -vt 0.85 0.97 0.00 -vt 0.99 0.78 0.00 -vt 0.99 0.67 0.00 -vt 0.99 0.83 0.00 -vt 0.99 0.89 0.00 -vt 0.99 0.99 0.00 -vt 0.93 0.95 0.00 -vt 0.93 0.96 0.00 -vt 0.90 0.96 0.00 -vt 0.90 0.95 0.00 -vt 0.96 0.95 0.00 -vt 0.96 0.96 0.00 -vt 0.84 0.92 0.00 -vt 0.85 0.92 0.00 -vt 0.98 0.99 0.00 -vt 0.98 0.67 0.00 -vt 0.88 0.92 0.00 -vt 0.97 0.95 0.00 -vt 0.89 0.95 0.00 -vt 0.95 0.92 0.00 -vt 0.97 0.92 0.00 -vt 0.93 0.92 0.00 -vt 0.98 0.95 0.00 -vt 0.98 0.96 0.00 -vt 0.97 0.96 0.00 -vt 0.98 0.94 0.00 -vt 0.89 0.99 0.00 -vt 0.89 0.97 0.00 -vt 0.88 0.96 0.00 -vt 0.88 0.95 0.00 -vt 0.89 0.96 0.00 -vt 0.04 0.35 0.00 -vt 0.04 0.25 0.00 -vt 0.07 0.25 0.00 -vt 0.07 0.36 0.00 -vt 0.13 0.33 0.00 -vt 0.10 0.35 0.00 -vt 0.10 0.25 0.00 -vt 0.13 0.25 0.00 -vt 0.01 0.33 0.00 -vt 0.01 0.25 0.00 -vt 0.93 0.52 0.00 -vt 0.94 0.52 0.00 -vt 0.94 0.58 0.00 -vt 0.93 0.58 0.00 -vt 0.92 0.49 0.00 -vt 0.91 0.49 0.00 -vt 0.91 0.54 0.00 -vt 0.92 0.55 0.00 -vt 0.97 0.52 0.00 -vt 0.95 0.52 0.00 -vt 0.95 0.58 0.00 -vt 0.97 0.58 0.00 -vt 0.94 0.64 0.00 -vt 0.93 0.64 0.00 -vt 0.89 0.58 0.00 -vt 0.89 0.59 0.00 -vt 0.95 0.64 0.00 -vt 0.97 0.64 0.00 -vt 0.94 0.69 0.00 -vt 0.93 0.69 0.00 -vt 0.86 0.59 0.00 -vt 0.86 0.61 0.00 -vt 0.95 0.69 0.00 -vt 0.97 0.69 0.00 -vt 0.83 0.58 0.00 -vt 0.83 0.59 0.00 -vt 0.81 0.54 0.00 -vt 0.80 0.55 0.00 -vt 0.81 0.49 0.00 -vt 0.80 0.49 0.00 -vt 0.82 0.22 0.00 -vt 0.85 0.22 0.00 -vt 0.84 0.39 0.00 -vt 0.81 0.39 0.00 -vt 0.76 0.22 0.00 -vt 0.80 0.22 0.00 -vt 0.79 0.38 0.00 -vt 0.76 0.38 0.00 -vt 0.82 0.52 0.00 -vt 0.85 0.52 0.00 -vt 0.80 0.51 0.00 -vt 0.76 0.53 0.00 -vt 0.18 0.92 0.00 -vt 0.09 0.92 0.00 -vt 0.09 0.93 0.00 -vt 0.18 0.93 0.00 -vt 0.00 0.90 0.00 -vt 0.10 0.89 0.00 -vt 0.10 0.90 0.00 -vt 0.00 0.91 0.00 -vt 0.00 0.92 0.00 -vt 0.00 0.93 0.00 -vt 0.20 0.90 0.00 -vt 0.20 0.91 0.00 -vt 0.20 0.93 0.00 -vt 0.23 0.90 0.00 -vt 0.23 0.93 0.00 -vt 0.26 0.76 0.00 -vt 0.26 0.90 0.00 -vt 0.22 0.84 0.00 -vt 0.22 0.76 0.00 -vt 0.11 0.81 0.00 -vt 0.11 0.87 0.00 -vt 0.02 0.88 0.00 -vt 0.02 0.81 0.00 -vt 0.31 0.84 0.00 -vt 0.31 0.76 0.00 -vt 0.11 0.74 0.00 -vt 0.11 0.80 0.00 -vt 0.01 0.80 0.00 -vt 0.01 0.74 0.00 -vt 0.20 0.81 0.00 -vt 0.20 0.88 0.00 -vt 0.20 0.74 0.00 -vt 0.20 0.80 0.00 -vt 0.36 0.65 0.00 -vt 0.36 0.75 0.00 -vt 0.34 0.75 0.00 -vt 0.33 0.65 0.00 -vt 0.36 0.89 0.00 -vt 0.33 0.87 0.00 -vt 0.45 0.67 0.00 -vt 0.45 0.76 0.00 -vt 0.43 0.76 0.00 -vt 0.42 0.67 0.00 -vt 0.45 0.89 0.00 -vt 0.42 0.89 0.00 -vt 0.41 0.66 0.00 -vt 0.38 0.66 0.00 -vt 0.39 0.77 0.00 -vt 0.41 0.77 0.00 -vt 0.38 0.88 0.00 -vt 0.41 0.88 0.00 -vt 0.72 0.62 0.00 -vt 0.72 0.52 0.00 -vt 0.73 0.52 0.00 -vt 0.73 0.62 0.00 -vt 0.74 0.62 0.00 -vt 0.74 0.43 0.00 -vt 0.73 0.43 0.00 -vt 0.59 0.58 0.00 -vt 0.64 0.58 0.00 -vt 0.64 0.63 0.00 -vt 0.59 0.63 0.00 -vt 0.75 0.42 0.00 -vt 0.73 0.42 0.00 -vt 0.73 0.36 0.00 -vt 0.75 0.36 0.00 -vt 0.92 0.71 0.00 -vt 0.97 0.71 0.00 -vt 0.92 0.73 0.00 -vt 0.73 0.29 0.00 -vt 0.73 0.24 0.00 -vt 0.75 0.24 0.00 -vt 0.75 0.29 0.00 -vt 0.86 0.72 0.00 -vt 0.86 0.73 0.00 -vt 0.81 0.72 0.00 -vt 0.81 0.70 0.00 -vt 0.73 0.33 0.00 -vt 0.75 0.33 0.00 -vt 0.89 0.74 0.00 -vt 0.89 0.72 0.00 -vt 0.83 0.62 0.00 -vt 0.92 0.62 0.00 -vt 0.92 0.61 0.00 -vt 0.83 0.61 0.00 -vt 0.83 0.63 0.00 -vt 0.92 0.63 0.00 -vt 0.71 0.65 0.00 -vt 0.71 0.66 0.00 -vt 0.75 0.66 0.00 -vt 0.75 0.65 0.00 -vt 0.71 0.64 0.00 -vt 0.75 0.64 0.00 -vt 0.58 0.64 0.00 -vt 0.62 0.66 0.00 -vt 0.62 0.64 0.00 -vt 0.92 0.64 0.00 -vt 0.83 0.64 0.00 -vt 0.75 0.61 0.00 -vt 0.75 0.62 0.00 -vt 0.75 0.63 0.00 -vt 0.67 0.66 0.00 -vt 0.67 0.64 0.00 -vt 0.41 0.65 0.00 -vt 0.41 0.57 0.00 -vt 0.44 0.57 0.00 -vt 0.44 0.66 0.00 -vt 0.48 0.65 0.00 -vt 0.48 0.57 0.00 -# 694 texture coords - -o castle -g castle -f 1/1/1 2/2/2 3/3/2 -f 3/3/2 4/4/1 1/1/1 -f 2/2/2 5/5/3 6/6/3 -f 6/6/3 3/3/2 2/2/2 -f 5/5/3 7/7/4 8/8/4 -f 8/8/4 6/6/3 5/5/3 -f 7/9/4 9/10/5 10/11/5 -f 10/11/5 8/12/4 7/9/4 -f 9/10/5 11/13/6 12/14/6 -f 12/14/6 10/11/5 9/10/5 -f 11/13/6 13/15/7 14/16/7 -f 14/16/7 12/14/6 11/13/6 -f 13/15/7 15/17/8 16/18/8 -f 16/18/8 14/16/7 13/15/7 -f 15/17/8 17/19/9 18/20/9 -f 18/20/9 16/18/8 15/17/8 -f 17/19/9 19/21/10 20/22/10 -f 20/22/10 18/20/9 17/19/9 -f 19/21/10 21/23/11 22/24/11 -f 22/24/11 20/22/10 19/21/10 -f 21/23/11 23/25/12 24/26/12 -f 24/26/12 22/24/11 21/23/11 -f 23/25/12 1/1/1 4/4/1 -f 4/4/1 24/26/12 23/25/12 -f 25/27/13 26/28/13 27/29/13 -f 27/29/13 28/30/13 25/27/13 -f 29/31/14 25/27/14 28/30/14 -f 28/30/14 30/32/14 29/31/14 -f 31/33/15 29/31/15 30/32/15 -f 30/32/15 32/34/15 31/33/15 -f 33/35/16 31/36/16 32/37/16 -f 32/37/16 34/38/16 33/35/16 -f 35/39/17 33/35/17 34/38/17 -f 34/38/17 36/40/17 35/39/17 -f 37/41/18 35/39/18 36/40/18 -f 36/40/18 38/42/18 37/41/18 -f 39/43/19 37/41/19 38/42/19 -f 38/42/19 40/44/19 39/43/19 -f 41/45/20 39/43/20 40/44/20 -f 40/44/20 42/46/20 41/45/20 -f 43/47/21 41/45/21 42/46/21 -f 42/46/21 44/48/21 43/47/21 -f 45/49/22 43/47/22 44/48/22 -f 44/48/22 46/50/22 45/49/22 -f 47/51/23 45/49/23 46/50/23 -f 46/50/23 48/52/23 47/51/23 -f 26/28/24 47/51/25 48/52/25 -f 48/52/25 27/29/24 26/28/24 -f 2/53/26 1/54/26 26/54/26 -f 26/54/26 25/53/26 2/53/26 -f 1/54/26 23/55/26 47/55/26 -f 47/55/26 26/54/26 1/54/26 -f 23/55/26 21/56/26 45/56/26 -f 45/56/26 47/55/26 23/55/26 -f 21/56/26 19/57/26 43/57/26 -f 43/57/26 45/56/26 21/56/26 -f 19/57/26 17/58/26 41/59/26 -f 41/59/26 43/57/26 19/57/26 -f 17/58/26 15/60/26 39/61/26 -f 39/61/26 41/59/26 17/58/26 -f 15/60/26 13/62/26 37/62/26 -f 37/62/26 39/61/26 15/60/26 -f 13/62/26 11/63/26 35/64/26 -f 35/64/26 37/62/26 13/62/26 -f 11/63/26 9/65/26 33/66/26 -f 33/66/26 35/64/26 11/63/26 -f 9/65/26 7/67/26 31/67/26 -f 31/67/26 33/66/26 9/65/26 -f 7/67/26 5/68/26 29/68/26 -f 29/68/26 31/67/26 7/67/26 -f 5/68/26 2/53/26 25/53/26 -f 25/53/26 29/68/26 5/68/26 -f 49/54/27 50/53/27 28/53/27 -f 28/53/27 27/54/27 49/54/27 -f 50/53/27 51/68/27 30/68/27 -f 30/68/27 28/53/27 50/53/27 -f 51/68/27 52/67/27 32/67/27 -f 32/67/27 30/68/27 51/68/27 -f 52/67/27 53/65/27 34/66/27 -f 34/66/27 32/67/27 52/67/27 -f 53/65/27 54/63/27 36/64/27 -f 36/64/27 34/66/27 53/65/27 -f 54/63/27 55/62/27 38/62/27 -f 38/62/27 36/64/27 54/63/27 -f 55/62/27 56/60/27 40/61/27 -f 40/61/27 38/62/27 55/62/27 -f 56/60/27 57/58/27 42/59/27 -f 42/59/27 40/61/27 56/60/27 -f 57/58/27 58/57/27 44/57/27 -f 44/57/27 42/59/27 57/58/27 -f 58/57/27 59/56/27 46/56/27 -f 46/56/27 44/57/27 58/57/27 -f 59/56/27 60/55/27 48/55/27 -f 48/55/27 46/56/27 59/56/27 -f 60/55/27 49/54/27 27/54/27 -f 27/54/27 48/55/27 60/55/27 -f 49/69/1 61/70/1 62/71/2 -f 62/71/2 50/72/2 49/69/1 -f 50/72/2 62/71/2 63/73/14 -f 63/73/14 51/74/14 50/72/2 -f 51/74/15 63/73/15 64/75/15 -f 64/75/15 52/76/15 51/74/15 -f 52/76/16 64/75/16 65/77/5 -f 65/77/5 53/78/5 52/76/16 -f 53/78/5 65/77/5 66/79/6 -f 66/79/6 54/80/6 53/78/5 -f 54/81/6 66/82/6 67/83/7 -f 67/83/7 55/84/7 54/81/6 -f 55/84/7 67/83/7 68/85/8 -f 68/85/8 56/86/8 55/84/7 -f 56/86/8 68/85/8 69/87/9 -f 69/87/9 57/88/9 56/86/8 -f 57/88/9 69/87/9 70/89/10 -f 70/89/10 58/90/10 57/88/9 -f 58/90/10 70/89/10 71/91/11 -f 71/91/11 59/92/11 58/90/10 -f 59/92/11 71/91/11 72/93/12 -f 72/93/12 60/94/12 59/92/11 -f 60/94/12 72/93/12 61/70/1 -f 61/70/1 49/69/1 60/94/12 -f 73/95/26 74/96/26 75/96/26 -f 75/96/26 76/95/26 73/95/26 -f 77/97/26 73/95/26 76/95/26 -f 76/95/26 78/97/26 77/97/26 -f 79/67/26 77/97/26 78/97/26 -f 78/97/26 80/98/26 79/67/26 -f 81/99/26 79/67/26 80/98/26 -f 80/98/26 82/99/26 81/99/26 -f 83/100/26 81/99/26 82/99/26 -f 82/99/26 84/100/26 83/100/26 -f 85/101/26 83/100/26 84/100/26 -f 84/100/26 86/101/26 85/101/26 -f 87/61/26 85/101/26 86/101/26 -f 86/101/26 88/61/26 87/61/26 -f 89/59/26 87/61/26 88/61/26 -f 88/61/26 90/102/26 89/59/26 -f 91/103/26 89/59/26 90/102/26 -f 90/102/26 92/103/26 91/103/26 -f 93/104/26 91/103/26 92/103/26 -f 92/103/26 94/105/26 93/104/26 -f 95/106/26 93/104/26 94/105/26 -f 94/105/26 96/106/26 95/106/26 -f 74/96/26 95/106/26 96/106/26 -f 96/106/26 75/96/26 74/96/26 -f 76/107/28 75/108/28 97/109/28 -f 97/109/28 98/110/28 76/107/28 -f 78/111/29 76/107/29 98/110/29 -f 98/110/29 99/112/29 78/111/29 -f 80/113/30 78/111/30 99/112/30 -f 99/112/30 100/114/30 80/113/30 -f 82/115/31 80/113/31 100/114/31 -f 100/114/31 101/116/31 82/115/31 -f 84/117/32 82/115/32 101/116/32 -f 101/116/32 102/118/32 84/117/32 -f 86/119/33 84/117/33 102/118/33 -f 102/118/33 103/120/33 86/119/33 -f 88/121/34 86/119/34 103/120/34 -f 103/120/34 104/122/34 88/121/34 -f 90/123/35 88/121/35 104/122/35 -f 104/122/35 105/124/35 90/123/35 -f 92/125/36 90/123/36 105/124/36 -f 105/124/36 106/126/36 92/125/36 -f 94/127/37 92/128/37 106/129/37 -f 106/129/37 107/130/37 94/127/37 -f 96/131/38 94/127/38 107/130/38 -f 107/130/38 108/132/38 96/131/38 -f 75/108/39 96/131/39 108/132/39 -f 108/132/39 97/109/39 75/108/39 -f 98/110/40 97/109/40 109/133/40 -f 109/133/40 110/134/40 98/110/40 -f 99/112/41 98/110/41 110/134/41 -f 110/134/41 111/135/41 99/112/41 -f 100/114/42 99/112/42 111/135/42 -f 111/135/42 112/136/43 100/114/42 -f 101/116/44 100/114/44 112/136/44 -f 112/136/44 113/137/44 101/116/44 -f 102/118/45 101/116/45 113/137/45 -f 113/137/45 114/138/45 102/118/45 -f 103/120/46 102/118/46 114/138/46 -f 114/138/46 115/139/46 103/120/46 -f 104/122/47 103/120/48 115/139/48 -f 115/139/48 116/140/48 104/122/47 -f 105/124/49 104/122/49 116/140/49 -f 116/140/49 117/141/49 105/124/49 -f 106/126/50 105/124/50 117/141/50 -f 117/141/50 118/142/50 106/126/50 -f 107/130/51 106/129/51 118/143/52 -f 118/143/52 119/144/51 107/130/51 -f 108/132/53 107/130/53 119/144/53 -f 119/144/53 120/145/53 108/132/53 -f 97/109/54 108/132/55 120/145/54 -f 120/145/54 109/133/54 97/109/54 -f 121/146/56 122/147/56 62/148/56 -f 62/148/56 61/149/56 121/146/56 -f 122/147/57 123/150/58 63/151/58 -f 63/151/58 62/148/57 122/147/57 -f 123/152/59 124/153/59 64/154/59 -f 64/154/59 63/155/59 123/152/59 -f 124/153/60 125/142/60 65/156/60 -f 65/156/60 64/154/60 124/153/60 -f 125/142/61 126/157/62 66/158/61 -f 66/158/61 65/156/62 125/142/61 -f 126/157/63 127/159/63 67/160/63 -f 67/160/63 66/158/63 126/157/63 -f 127/159/64 128/161/64 68/162/64 -f 68/162/64 67/160/64 127/159/64 -f 128/161/65 129/163/66 69/164/66 -f 69/164/66 68/162/66 128/161/65 -f 129/163/67 130/165/67 70/166/67 -f 70/166/67 69/164/67 129/163/67 -f 130/165/68 131/167/68 71/168/68 -f 71/168/68 70/166/68 130/165/68 -f 131/167/69 132/169/70 72/170/70 -f 72/170/70 71/168/70 131/167/69 -f 132/169/71 121/146/71 61/149/71 -f 61/149/71 72/170/71 132/169/71 -f 74/171/1 73/172/2 122/173/2 -f 122/173/2 121/174/1 74/171/1 -f 73/172/2 77/175/3 123/176/3 -f 123/176/3 122/173/2 73/172/2 -f 77/177/3 79/178/4 124/179/4 -f 124/179/4 123/180/3 77/177/3 -f 79/178/4 81/86/5 125/181/5 -f 125/181/5 124/179/4 79/178/4 -f 81/86/5 83/182/6 126/183/6 -f 126/183/6 125/181/5 81/86/5 -f 83/182/6 85/184/7 127/185/7 -f 127/185/7 126/183/6 83/182/6 -f 85/184/7 87/186/8 128/187/8 -f 128/187/8 127/185/7 85/184/7 -f 87/186/8 89/188/9 129/189/9 -f 129/189/9 128/187/8 87/186/8 -f 89/188/9 91/190/10 130/191/10 -f 130/191/10 129/189/9 89/188/9 -f 91/190/10 93/76/11 131/192/11 -f 131/192/11 130/191/10 91/190/10 -f 93/76/11 95/193/12 132/194/12 -f 132/194/12 131/192/11 93/76/11 -f 95/193/12 74/171/1 121/174/1 -f 121/174/1 132/194/12 95/193/12 -f 133/195/72 134/196/72 135/197/72 -f 135/197/72 136/198/72 133/195/72 -f 137/199/73 138/200/73 139/201/73 -f 139/201/73 140/202/73 137/199/73 -f 141/203/74 142/204/74 143/205/74 -f 143/205/74 144/206/74 141/203/74 -f 145/202/75 146/201/75 147/200/75 -f 147/200/75 148/199/75 145/202/75 -f 149/207/76 150/207/76 151/208/76 -f 151/208/76 152/209/76 149/207/76 -f 153/209/77 154/210/77 155/211/77 -f 142/212/78 156/196/78 157/213/78 -f 157/213/78 143/214/78 142/212/78 -f 158/210/79 159/209/79 160/211/79 -f 161/215/80 162/216/80 160/211/80 -f 160/211/80 159/209/80 161/215/80 -f 163/217/81 164/218/81 135/197/81 -f 135/197/81 134/196/81 163/217/81 -f 165/219/82 166/220/82 142/204/82 -f 142/204/82 141/203/82 165/219/82 -f 167/209/83 168/208/83 150/207/83 -f 150/207/83 149/207/83 167/209/83 -f 142/212/84 166/214/84 169/213/84 -f 169/213/84 156/196/84 142/212/84 -f 161/215/85 153/209/85 155/211/85 -f 155/211/85 162/216/85 161/215/85 -f 170/221/75 157/222/75 133/222/75 -f 133/222/75 136/221/75 170/221/75 -f 157/222/86 156/203/86 134/203/86 -f 134/203/86 133/222/86 157/222/86 -f 156/203/87 169/206/87 163/206/87 -f 163/206/87 134/203/87 156/203/87 -f 169/206/73 171/223/73 164/223/73 -f 164/223/73 163/206/73 169/206/73 -f 171/224/88 172/225/88 135/226/88 -f 135/226/88 164/224/88 171/224/88 -f 172/225/89 170/224/89 136/224/89 -f 136/224/89 135/226/89 172/225/89 -f 166/214/79 173/227/79 171/228/79 -f 171/228/79 169/213/79 166/214/79 -f 173/229/75 166/220/75 165/219/75 -f 165/219/75 174/221/75 173/229/75 -f 144/206/73 143/205/73 175/230/73 -f 175/230/73 176/223/73 144/206/73 -f 175/227/77 143/214/77 157/213/77 -f 157/213/77 170/228/77 175/227/77 -f 139/201/73 138/200/73 177/199/73 -f 177/199/73 178/202/73 139/201/73 -f 175/231/90 170/224/90 155/232/90 -f 155/232/90 154/233/91 175/231/90 -f 170/224/89 172/225/89 162/234/89 -f 162/234/89 155/232/89 170/224/89 -f 172/225/88 171/224/88 160/232/88 -f 160/232/88 162/234/88 172/225/88 -f 171/224/92 173/231/92 158/233/92 -f 158/233/92 160/232/92 171/224/92 -f 147/200/75 146/201/75 179/202/75 -f 179/202/75 180/199/75 147/200/75 -f 151/208/76 150/207/76 161/235/76 -f 161/235/76 159/236/76 151/208/76 -f 150/207/83 168/208/83 153/236/83 -f 153/236/83 161/235/83 150/207/83 -f 176/236/27 175/231/27 138/237/27 -f 138/237/27 137/238/27 176/236/27 -f 175/231/27 154/233/27 177/239/27 -f 177/239/27 138/237/27 175/231/27 -f 154/210/93 153/209/93 178/240/94 -f 178/240/94 177/241/94 154/210/93 -f 153/236/26 168/208/26 139/242/26 -f 139/242/26 178/238/26 153/236/26 -f 168/208/26 167/209/26 140/240/26 -f 140/240/26 139/242/26 168/208/26 -f 152/209/26 151/208/26 146/242/26 -f 146/242/26 145/240/26 152/209/26 -f 151/208/26 159/236/26 179/238/26 -f 179/238/26 146/242/26 151/208/26 -f 159/209/95 158/210/95 180/241/95 -f 180/241/95 179/240/95 159/209/95 -f 158/233/27 173/231/27 147/237/27 -f 147/237/27 180/239/27 158/233/27 -f 173/231/27 174/236/27 148/238/27 -f 148/238/27 147/237/27 173/231/27 -f 181/195/96 182/196/96 183/197/96 -f 183/197/96 184/198/96 181/195/96 -f 185/199/97 186/200/98 187/201/98 -f 187/201/98 188/202/97 185/199/97 -f 189/203/99 190/204/99 191/205/99 -f 191/205/99 192/206/99 189/203/99 -f 193/202/100 194/201/101 195/200/101 -f 195/200/101 196/199/100 193/202/100 -f 197/207/102 198/207/102 199/208/102 -f 199/208/102 200/209/102 197/207/102 -f 201/209/103 202/210/103 203/211/103 -f 190/212/104 204/196/104 205/213/104 -f 205/213/104 191/214/104 190/212/104 -f 206/210/105 207/209/105 208/211/105 -f 209/215/106 210/216/106 208/211/106 -f 208/211/106 207/209/106 209/215/106 -f 211/217/107 212/218/107 183/197/107 -f 183/197/107 182/196/107 211/217/107 -f 213/219/108 214/220/108 190/204/108 -f 190/204/108 189/203/108 213/219/108 -f 215/209/109 216/208/109 198/207/109 -f 198/207/109 197/207/109 215/209/109 -f 190/212/110 214/214/110 217/213/110 -f 217/213/110 204/196/110 190/212/110 -f 209/215/111 201/209/111 203/211/111 -f 203/211/111 210/216/111 209/215/111 -f 218/221/100 205/222/100 181/222/101 -f 181/222/101 184/221/101 218/221/100 -f 205/222/112 204/203/112 182/203/112 -f 182/203/112 181/222/112 205/222/112 -f 204/203/113 217/206/113 211/206/113 -f 211/206/113 182/203/113 204/203/113 -f 217/206/98 219/223/98 212/223/98 -f 212/223/98 211/206/98 217/206/98 -f 219/224/114 220/225/114 183/226/114 -f 183/226/114 212/224/114 219/224/114 -f 220/225/115 218/224/115 184/224/115 -f 184/224/115 183/226/115 220/225/115 -f 214/214/105 221/227/105 219/228/105 -f 219/228/105 217/213/105 214/214/105 -f 221/229/100 214/220/100 213/219/100 -f 213/219/100 222/221/100 221/229/100 -f 192/206/98 191/205/98 223/230/98 -f 223/230/98 224/223/98 192/206/98 -f 223/227/103 191/214/103 205/213/103 -f 205/213/103 218/228/103 223/227/103 -f 187/201/98 186/200/98 225/199/97 -f 225/199/97 226/202/97 187/201/98 -f 223/231/116 218/224/116 203/232/116 -f 203/232/116 202/233/116 223/231/116 -f 218/224/115 220/225/115 210/234/115 -f 210/234/115 203/232/115 218/224/115 -f 220/225/114 219/224/114 208/232/114 -f 208/232/114 210/234/114 220/225/114 -f 219/224/117 221/231/117 206/233/117 -f 206/233/117 208/232/117 219/224/117 -f 195/200/101 194/201/101 227/202/100 -f 227/202/100 228/199/100 195/200/101 -f 199/208/102 198/207/102 209/235/102 -f 209/235/102 207/236/102 199/208/102 -f 198/207/109 216/208/109 201/236/109 -f 201/236/109 209/235/109 198/207/109 -f 224/236/27 223/231/27 186/237/27 -f 186/237/27 185/238/27 224/236/27 -f 223/231/27 202/233/27 225/239/27 -f 225/239/27 186/237/27 223/231/27 -f 202/210/118 201/209/118 226/240/118 -f 226/240/118 225/241/118 202/210/118 -f 201/236/26 216/208/26 187/242/26 -f 187/242/26 226/238/26 201/236/26 -f 216/208/26 215/209/26 188/240/26 -f 188/240/26 187/242/26 216/208/26 -f 200/209/26 199/208/26 194/242/26 -f 194/242/26 193/240/26 200/209/26 -f 199/208/26 207/236/26 227/238/26 -f 227/238/26 194/242/26 199/208/26 -f 207/209/119 206/210/119 228/241/119 -f 228/241/119 227/240/119 207/209/119 -f 206/233/27 221/231/27 195/237/27 -f 195/237/27 228/239/27 206/233/27 -f 221/231/27 222/236/27 196/238/27 -f 196/238/27 195/237/27 221/231/27 -f 229/243/120 230/244/120 231/245/120 -f 231/245/120 232/246/120 229/243/120 -f 229/247/121 232/248/121 233/249/121 -f 233/249/121 234/250/121 229/247/121 -f 232/246/122 231/245/122 235/251/122 -f 235/251/122 233/252/122 232/246/122 -f 231/248/123 230/247/123 236/250/123 -f 236/250/123 235/249/123 231/248/123 -f 237/195/124 238/196/124 239/197/124 -f 239/197/124 240/198/124 237/195/124 -f 241/199/125 242/200/98 243/201/98 -f 243/201/98 244/202/125 241/199/125 -f 245/203/99 246/204/99 247/205/99 -f 247/205/99 248/206/99 245/203/99 -f 249/202/100 250/201/101 251/200/101 -f 251/200/101 252/199/100 249/202/100 -f 253/207/102 254/207/102 255/208/102 -f 255/208/102 256/209/102 253/207/102 -f 257/209/103 258/210/103 259/211/103 -f 246/212/104 260/196/104 261/213/104 -f 261/213/104 247/214/104 246/212/104 -f 262/210/105 263/209/105 264/211/105 -f 265/215/106 266/216/106 264/211/106 -f 264/211/106 263/209/106 265/215/106 -f 267/217/107 268/218/107 239/197/107 -f 239/197/107 238/196/107 267/217/107 -f 269/219/126 270/220/126 246/204/108 -f 246/204/108 245/203/108 269/219/126 -f 271/209/109 272/208/109 254/207/109 -f 254/207/109 253/207/109 271/209/109 -f 246/212/110 270/214/110 273/213/110 -f 273/213/110 260/196/110 246/212/110 -f 265/215/111 257/209/111 259/211/111 -f 259/211/111 266/216/111 265/215/111 -f 274/221/100 261/222/100 237/222/100 -f 237/222/100 240/221/100 274/221/100 -f 261/222/112 260/203/112 238/203/112 -f 238/203/112 237/222/112 261/222/112 -f 260/203/113 273/206/113 267/206/113 -f 267/206/113 238/203/113 260/203/113 -f 273/206/98 275/223/98 268/223/98 -f 268/223/98 267/206/98 273/206/98 -f 275/224/114 276/225/114 239/226/114 -f 239/226/114 268/224/114 275/224/114 -f 276/225/115 274/224/115 240/224/115 -f 240/224/115 239/226/115 276/225/115 -f 270/214/105 277/227/105 275/228/105 -f 275/228/105 273/213/105 270/214/105 -f 277/229/101 270/220/101 269/219/101 -f 269/219/101 278/221/101 277/229/101 -f 248/206/98 247/205/97 279/230/97 -f 279/230/97 280/223/98 248/206/98 -f 279/227/103 247/214/103 261/213/103 -f 261/213/103 274/228/103 279/227/103 -f 243/201/98 242/200/98 281/199/97 -f 281/199/97 282/202/97 243/201/98 -f 279/231/116 274/224/116 259/232/116 -f 259/232/116 258/233/116 279/231/116 -f 274/224/115 276/225/115 266/234/115 -f 266/234/115 259/232/115 274/224/115 -f 276/225/114 275/224/114 264/232/114 -f 264/232/114 266/234/114 276/225/114 -f 275/224/117 277/231/117 262/233/117 -f 262/233/117 264/232/117 275/224/117 -f 251/200/101 250/201/101 283/202/100 -f 283/202/100 284/199/100 251/200/101 -f 255/208/102 254/207/102 265/235/102 -f 265/235/102 263/236/102 255/208/102 -f 254/207/109 272/208/109 257/236/109 -f 257/236/109 265/235/109 254/207/109 -f 280/236/27 279/231/27 242/237/27 -f 242/237/27 241/238/27 280/236/27 -f 279/231/27 258/233/27 281/239/27 -f 281/239/27 242/237/27 279/231/27 -f 258/210/118 257/209/118 282/240/118 -f 282/240/118 281/241/118 258/210/118 -f 257/236/26 272/208/26 243/242/26 -f 243/242/26 282/238/26 257/236/26 -f 272/208/26 271/209/26 244/240/26 -f 244/240/26 243/242/26 272/208/26 -f 256/209/26 255/208/26 250/242/26 -f 250/242/26 249/240/26 256/209/26 -f 255/208/26 263/236/26 283/238/26 -f 283/238/26 250/242/26 255/208/26 -f 263/209/119 262/210/119 284/241/119 -f 284/241/119 283/240/119 263/209/119 -f 262/233/27 277/231/27 251/237/27 -f 251/237/27 284/239/27 262/233/27 -f 277/231/27 278/236/27 252/238/27 -f 252/238/27 251/237/27 277/231/27 -f 285/243/127 286/244/127 287/245/127 -f 287/245/127 288/246/127 285/243/127 -f 285/247/128 288/248/128 289/249/128 -f 289/249/128 290/250/128 285/247/128 -f 288/246/129 287/245/129 291/251/129 -f 291/251/129 289/252/129 288/246/129 -f 287/248/130 286/247/130 292/250/130 -f 292/250/130 291/249/130 287/248/130 -f 293/195/131 294/196/131 295/197/131 -f 295/197/131 296/198/131 293/195/131 -f 297/199/75 298/200/75 299/201/75 -f 299/201/75 300/202/75 297/199/75 -f 301/203/132 302/204/132 303/205/132 -f 303/205/132 304/206/132 301/203/132 -f 305/202/73 306/201/73 307/200/73 -f 307/200/73 308/199/73 305/202/73 -f 309/207/83 310/207/83 311/208/83 -f 311/208/83 312/209/83 309/207/83 -f 313/209/133 314/210/133 315/211/133 -f 302/212/134 316/196/134 317/213/134 -f 317/213/134 303/214/134 302/212/134 -f 318/210/135 319/209/135 320/211/135 -f 321/215/136 322/216/136 320/211/136 -f 320/211/136 319/209/136 321/215/136 -f 323/217/137 324/218/137 295/197/138 -f 295/197/138 294/196/138 323/217/137 -f 325/219/139 326/220/139 302/204/139 -f 302/204/139 301/203/139 325/219/139 -f 327/209/76 328/208/76 310/207/76 -f 310/207/76 309/207/76 327/209/76 -f 302/212/140 326/214/140 329/213/140 -f 329/213/140 316/196/140 302/212/140 -f 321/215/141 313/209/141 315/211/141 -f 315/211/141 322/216/141 321/215/141 -f 330/221/73 317/222/73 293/222/73 -f 293/222/73 296/221/73 330/221/73 -f 317/222/87 316/203/87 294/203/87 -f 294/203/87 293/222/87 317/222/87 -f 316/203/86 329/206/86 323/206/86 -f 323/206/86 294/203/86 316/203/86 -f 329/206/75 331/223/75 324/223/75 -f 324/223/75 323/206/75 329/206/75 -f 331/224/142 332/225/142 295/226/142 -f 295/226/142 324/224/142 331/224/142 -f 332/225/143 330/224/143 296/224/143 -f 296/224/143 295/226/143 332/225/143 -f 326/214/135 333/227/135 331/228/135 -f 331/228/135 329/213/135 326/214/135 -f 333/229/73 326/220/73 325/219/73 -f 325/219/73 334/221/73 333/229/73 -f 304/206/75 303/205/75 335/230/75 -f 335/230/75 336/223/75 304/206/75 -f 335/227/133 303/214/133 317/213/133 -f 317/213/133 330/228/133 335/227/133 -f 299/201/75 298/200/75 337/199/75 -f 337/199/75 338/202/75 299/201/75 -f 335/231/144 330/224/144 315/232/144 -f 315/232/144 314/233/144 335/231/144 -f 330/224/143 332/225/143 322/234/143 -f 322/234/143 315/232/143 330/224/143 -f 332/225/142 331/224/142 320/232/142 -f 320/232/142 322/234/142 332/225/142 -f 331/224/145 333/231/145 318/233/145 -f 318/233/145 320/232/145 331/224/145 -f 307/200/73 306/201/73 339/202/73 -f 339/202/73 340/199/73 307/200/73 -f 311/208/83 310/207/83 321/235/83 -f 321/235/83 319/236/83 311/208/83 -f 310/207/76 328/208/76 313/236/76 -f 313/236/76 321/235/76 310/207/76 -f 336/236/27 335/231/27 298/237/27 -f 298/237/27 297/238/27 336/236/27 -f 335/231/27 314/233/27 337/239/27 -f 337/239/27 298/237/27 335/231/27 -f 314/210/146 313/209/146 338/240/146 -f 338/240/146 337/241/146 314/210/146 -f 313/236/26 328/208/26 299/242/26 -f 299/242/26 338/238/26 313/236/26 -f 328/208/26 327/209/26 300/240/26 -f 300/240/26 299/242/26 328/208/26 -f 312/209/26 311/208/26 306/242/26 -f 306/242/26 305/240/26 312/209/26 -f 311/208/26 319/236/26 339/238/26 -f 339/238/26 306/242/26 311/208/26 -f 319/209/147 318/210/147 340/241/147 -f 340/241/147 339/240/147 319/209/147 -f 318/233/27 333/231/27 307/237/27 -f 307/237/27 340/239/27 318/233/27 -f 333/231/27 334/236/27 308/238/27 -f 308/238/27 307/237/27 333/231/27 -f 341/243/148 342/244/148 343/245/148 -f 343/245/148 344/246/148 341/243/148 -f 341/247/1 344/248/1 345/249/1 -f 345/249/1 346/250/1 341/247/1 -f 344/246/149 343/245/149 347/251/149 -f 347/251/149 345/252/149 344/246/149 -f 343/248/7 342/247/7 348/250/7 -f 348/250/7 347/249/7 343/248/7 -f 349/243/150 350/244/150 351/245/150 -f 351/245/150 352/246/150 349/243/150 -f 349/247/151 352/248/151 353/249/151 -f 353/249/151 354/250/151 349/247/151 -f 352/246/152 351/245/152 355/251/152 -f 355/251/152 353/252/152 352/246/152 -f 351/248/153 350/247/153 356/250/153 -f 356/250/153 355/249/153 351/248/153 -f 357/243/154 358/244/154 359/245/154 -f 359/245/154 360/246/154 357/243/154 -f 357/247/7 360/248/7 361/249/7 -f 361/249/7 362/250/7 357/247/7 -f 360/246/155 359/245/155 363/251/155 -f 363/251/155 361/252/155 360/246/155 -f 359/248/1 358/247/1 364/250/1 -f 364/250/1 363/249/1 359/248/1 -f 365/243/156 366/244/156 367/245/156 -f 367/245/156 368/246/156 365/243/156 -f 365/247/157 368/248/157 369/249/157 -f 369/249/157 370/250/157 365/247/157 -f 368/246/158 367/245/158 371/251/158 -f 371/251/158 369/252/158 368/246/158 -f 367/248/159 366/247/159 372/250/159 -f 372/250/159 371/249/159 367/248/159 -f 373/243/160 374/244/160 375/245/160 -f 375/245/160 376/246/160 373/243/160 -f 373/247/161 376/248/161 377/249/161 -f 377/249/161 378/250/161 373/247/161 -f 376/246/162 375/245/162 379/251/162 -f 379/251/162 377/252/162 376/246/162 -f 375/248/163 374/247/163 380/250/163 -f 380/250/163 379/249/163 375/248/163 -f 381/195/131 382/196/131 383/197/131 -f 383/197/131 384/198/131 381/195/131 -f 385/199/75 386/200/75 387/201/75 -f 387/201/75 388/202/75 385/199/75 -f 389/203/132 390/204/132 391/205/132 -f 391/205/132 392/206/132 389/203/132 -f 393/202/73 394/201/73 395/200/73 -f 395/200/73 396/199/73 393/202/73 -f 397/207/83 398/207/83 399/208/83 -f 399/208/83 400/209/83 397/207/83 -f 401/209/133 402/210/133 403/211/133 -f 390/212/134 404/196/134 405/213/134 -f 405/213/134 391/214/134 390/212/134 -f 406/210/135 407/209/135 408/211/135 -f 409/215/136 410/216/136 408/211/136 -f 408/211/136 407/209/136 409/215/136 -f 411/217/137 412/218/137 383/197/138 -f 383/197/138 382/196/138 411/217/137 -f 413/219/139 414/220/139 390/204/139 -f 390/204/139 389/203/139 413/219/139 -f 415/209/76 416/208/76 398/207/76 -f 398/207/76 397/207/76 415/209/76 -f 390/212/140 414/214/140 417/213/140 -f 417/213/140 404/196/140 390/212/140 -f 409/215/141 401/209/141 403/211/141 -f 403/211/141 410/216/141 409/215/141 -f 418/221/73 405/222/73 381/222/73 -f 381/222/73 384/221/73 418/221/73 -f 405/222/87 404/203/87 382/203/87 -f 382/203/87 381/222/87 405/222/87 -f 404/203/86 417/206/86 411/206/86 -f 411/206/86 382/203/86 404/203/86 -f 417/206/75 419/223/75 412/223/75 -f 412/223/75 411/206/75 417/206/75 -f 419/224/142 420/225/142 383/226/142 -f 383/226/142 412/224/142 419/224/142 -f 420/225/143 418/224/143 384/224/143 -f 384/224/143 383/226/143 420/225/143 -f 414/214/135 421/227/135 419/228/135 -f 419/228/135 417/213/135 414/214/135 -f 421/229/73 414/220/73 413/219/73 -f 413/219/73 422/221/73 421/229/73 -f 392/206/75 391/205/75 423/230/75 -f 423/230/75 424/223/75 392/206/75 -f 423/227/133 391/214/133 405/213/133 -f 405/213/133 418/228/133 423/227/133 -f 387/201/75 386/200/75 425/199/75 -f 425/199/75 426/202/75 387/201/75 -f 423/231/144 418/224/144 403/232/144 -f 403/232/144 402/233/144 423/231/144 -f 418/224/143 420/225/143 410/234/143 -f 410/234/143 403/232/143 418/224/143 -f 420/225/142 419/224/142 408/232/142 -f 408/232/142 410/234/142 420/225/142 -f 419/224/145 421/231/145 406/233/145 -f 406/233/145 408/232/145 419/224/145 -f 395/200/73 394/201/73 427/202/73 -f 427/202/73 428/199/73 395/200/73 -f 399/208/83 398/207/83 409/235/83 -f 409/235/83 407/236/83 399/208/83 -f 398/207/76 416/208/76 401/236/76 -f 401/236/76 409/235/76 398/207/76 -f 424/236/27 423/231/27 386/237/27 -f 386/237/27 385/238/27 424/236/27 -f 423/231/27 402/233/27 425/239/27 -f 425/239/27 386/237/27 423/231/27 -f 402/210/146 401/209/146 426/240/146 -f 426/240/146 425/241/146 402/210/146 -f 401/236/26 416/208/26 387/242/26 -f 387/242/26 426/238/26 401/236/26 -f 416/208/26 415/209/26 388/240/26 -f 388/240/26 387/242/26 416/208/26 -f 400/209/26 399/208/26 394/242/26 -f 394/242/26 393/240/26 400/209/26 -f 399/208/26 407/236/26 427/238/26 -f 427/238/26 394/242/26 399/208/26 -f 407/209/147 406/210/147 428/241/147 -f 428/241/147 427/240/147 407/209/147 -f 406/233/27 421/231/27 395/237/27 -f 395/237/27 428/239/27 406/233/27 -f 421/231/27 422/236/27 396/238/27 -f 396/238/27 395/237/27 421/231/27 -f 429/195/164 430/196/10 431/197/10 -f 431/197/10 432/198/164 429/195/164 -f 433/199/165 434/200/165 435/201/165 -f 435/201/165 436/202/165 433/199/165 -f 437/203/108 438/204/108 439/205/108 -f 439/205/108 440/206/108 437/203/108 -f 441/202/125 442/201/125 443/200/125 -f 443/200/125 444/199/125 441/202/125 -f 445/207/166 446/207/166 447/208/166 -f 447/208/166 448/209/166 445/207/166 -f 449/209/167 450/210/167 451/211/167 -f 438/212/168 452/196/168 453/213/168 -f 453/213/168 439/214/168 438/212/168 -f 454/210/169 455/209/169 456/211/169 -f 457/215/170 458/216/170 456/211/170 -f 456/211/170 455/209/170 457/215/170 -f 459/217/171 460/218/171 431/197/171 -f 431/197/171 430/196/171 459/217/171 -f 461/219/172 462/220/99 438/204/99 -f 438/204/99 437/203/99 461/219/172 -f 463/209/173 464/208/173 446/207/173 -f 446/207/173 445/207/173 463/209/173 -f 438/212/174 462/214/174 465/213/174 -f 465/213/174 452/196/174 438/212/174 -f 457/215/175 449/209/175 451/211/175 -f 451/211/175 458/216/175 457/215/175 -f 466/221/125 453/222/125 429/222/125 -f 429/222/125 432/221/125 466/221/125 -f 453/222/113 452/203/113 430/203/113 -f 430/203/113 429/222/113 453/222/113 -f 452/203/112 465/206/112 459/206/112 -f 459/206/112 430/203/112 452/203/112 -f 465/206/165 467/223/165 460/223/165 -f 460/223/165 459/206/165 465/206/165 -f 467/224/176 468/225/176 431/226/176 -f 431/226/176 460/224/176 467/224/176 -f 468/225/117 466/224/117 432/224/117 -f 432/224/117 431/226/117 468/225/117 -f 462/214/169 469/227/169 467/228/169 -f 467/228/169 465/213/169 462/214/169 -f 469/229/125 462/220/125 461/219/125 -f 461/219/125 470/221/125 469/229/125 -f 440/206/165 439/205/165 471/230/165 -f 471/230/165 472/223/165 440/206/165 -f 471/227/167 439/214/167 453/213/167 -f 453/213/167 466/228/167 471/227/167 -f 435/201/165 434/200/165 473/199/165 -f 473/199/165 474/202/165 435/201/165 -f 471/231/177 466/224/177 451/232/177 -f 451/232/177 450/233/177 471/231/177 -f 466/224/117 468/225/117 458/234/117 -f 458/234/117 451/232/117 466/224/117 -f 468/225/176 467/224/176 456/232/176 -f 456/232/176 458/234/176 468/225/176 -f 467/224/115 469/231/115 454/233/115 -f 454/233/115 456/232/115 467/224/115 -f 443/200/125 442/201/125 475/202/125 -f 475/202/125 476/199/125 443/200/125 -f 447/208/166 446/207/166 457/235/166 -f 457/235/166 455/236/166 447/208/166 -f 446/207/173 464/208/173 449/236/173 -f 449/236/173 457/235/173 446/207/173 -f 472/236/27 471/231/27 434/237/27 -f 434/237/27 433/238/27 472/236/27 -f 471/231/27 450/233/27 473/239/27 -f 473/239/27 434/237/27 471/231/27 -f 450/210/178 449/209/178 474/240/178 -f 474/240/178 473/241/178 450/210/178 -f 449/236/26 464/208/26 435/242/26 -f 435/242/26 474/238/26 449/236/26 -f 464/208/26 463/209/26 436/240/26 -f 436/240/26 435/242/26 464/208/26 -f 448/209/26 447/208/26 442/242/26 -f 442/242/26 441/240/26 448/209/26 -f 447/208/26 455/236/26 475/238/26 -f 475/238/26 442/242/26 447/208/26 -f 455/209/179 454/210/179 476/241/179 -f 476/241/179 475/240/179 455/209/179 -f 454/233/27 469/231/27 443/237/27 -f 443/237/27 476/239/27 454/233/27 -f 469/231/27 470/236/27 444/238/27 -f 444/238/27 443/237/27 469/231/27 -f 477/243/180 478/244/180 479/245/180 -f 479/245/180 480/246/180 477/243/180 -f 477/247/153 480/248/153 481/249/153 -f 481/249/153 482/250/153 477/247/153 -f 480/246/181 479/245/181 483/251/181 -f 483/251/181 481/252/182 480/246/181 -f 479/248/151 478/247/151 484/250/151 -f 484/250/151 483/249/151 479/248/151 -f 485/195/10 486/196/10 487/197/10 -f 487/197/10 488/198/10 485/195/10 -f 489/199/165 490/200/165 491/201/165 -f 491/201/165 492/202/165 489/199/165 -f 493/203/108 494/204/108 495/205/108 -f 495/205/108 496/206/108 493/203/108 -f 497/202/125 498/201/125 499/200/125 -f 499/200/125 500/199/125 497/202/125 -f 501/207/166 502/207/166 503/208/166 -f 503/208/166 504/209/166 501/207/166 -f 505/209/167 506/210/167 507/211/167 -f 494/212/168 508/196/168 509/213/168 -f 509/213/168 495/214/168 494/212/168 -f 510/210/169 511/209/169 512/211/169 -f 513/215/170 514/216/170 512/211/170 -f 512/211/170 511/209/170 513/215/170 -f 515/217/171 516/218/171 487/197/171 -f 487/197/171 486/196/171 515/217/171 -f 517/219/99 518/220/99 494/204/172 -f 494/204/172 493/203/99 517/219/99 -f 519/209/173 520/208/173 502/207/173 -f 502/207/173 501/207/173 519/209/173 -f 494/212/174 518/214/174 521/213/174 -f 521/213/174 508/196/174 494/212/174 -f 513/215/175 505/209/175 507/211/175 -f 507/211/175 514/216/175 513/215/175 -f 522/221/125 509/222/125 485/222/125 -f 485/222/125 488/221/125 522/221/125 -f 509/222/113 508/203/113 486/203/113 -f 486/203/113 485/222/113 509/222/113 -f 508/203/112 521/206/112 515/206/112 -f 515/206/112 486/203/112 508/203/112 -f 521/206/165 523/223/165 516/223/165 -f 516/223/165 515/206/165 521/206/165 -f 523/224/176 524/225/176 487/226/176 -f 487/226/176 516/224/176 523/224/176 -f 524/225/117 522/224/117 488/224/117 -f 488/224/117 487/226/117 524/225/117 -f 518/214/169 525/227/169 523/228/169 -f 523/228/169 521/213/169 518/214/169 -f 525/229/125 518/220/125 517/219/125 -f 517/219/125 526/221/125 525/229/125 -f 496/206/165 495/205/165 527/230/165 -f 527/230/165 528/223/165 496/206/165 -f 527/227/167 495/214/167 509/213/167 -f 509/213/167 522/228/167 527/227/167 -f 491/201/165 490/200/165 529/199/165 -f 529/199/165 530/202/165 491/201/165 -f 527/231/177 522/224/177 507/232/177 -f 507/232/177 506/233/177 527/231/177 -f 522/224/117 524/225/117 514/234/117 -f 514/234/117 507/232/117 522/224/117 -f 524/225/176 523/224/176 512/232/176 -f 512/232/176 514/234/176 524/225/176 -f 523/224/115 525/231/115 510/233/115 -f 510/233/115 512/232/115 523/224/115 -f 499/200/125 498/201/125 531/202/125 -f 531/202/125 532/199/125 499/200/125 -f 503/208/166 502/207/166 513/235/166 -f 513/235/166 511/236/166 503/208/166 -f 502/207/173 520/208/173 505/236/173 -f 505/236/173 513/235/173 502/207/173 -f 528/236/27 527/231/27 490/237/27 -f 490/237/27 489/238/27 528/236/27 -f 527/231/27 506/233/27 529/239/27 -f 529/239/27 490/237/27 527/231/27 -f 506/210/178 505/209/178 530/240/178 -f 530/240/178 529/241/178 506/210/178 -f 505/236/26 520/208/26 491/242/26 -f 491/242/26 530/238/26 505/236/26 -f 520/208/26 519/209/26 492/240/26 -f 492/240/26 491/242/26 520/208/26 -f 504/209/26 503/208/26 498/242/26 -f 498/242/26 497/240/26 504/209/26 -f 503/208/26 511/236/26 531/238/26 -f 531/238/26 498/242/26 503/208/26 -f 511/209/179 510/210/179 532/241/179 -f 532/241/179 531/240/179 511/209/179 -f 510/233/27 525/231/27 499/237/27 -f 499/237/27 532/239/27 510/233/27 -f 525/231/27 526/236/27 500/238/27 -f 500/238/27 499/237/27 525/231/27 -f 533/243/183 534/244/183 535/245/183 -f 535/245/183 536/246/183 533/243/183 -f 533/247/184 536/248/184 537/249/184 -f 537/249/184 538/250/184 533/247/184 -f 536/246/185 535/245/185 539/251/185 -f 539/251/185 537/252/185 536/246/185 -f 535/248/186 534/247/186 540/250/186 -f 540/250/186 539/249/186 535/248/186 -f 541/195/72 542/196/72 543/197/72 -f 543/197/72 544/198/72 541/195/72 -f 545/199/73 546/200/73 547/201/73 -f 547/201/73 548/202/73 545/199/73 -f 549/203/74 550/204/74 551/205/74 -f 551/205/74 552/206/74 549/203/74 -f 553/202/75 554/201/75 555/200/75 -f 555/200/75 556/199/75 553/202/75 -f 557/207/76 558/207/76 559/208/76 -f 559/208/76 560/209/76 557/207/76 -f 561/209/77 562/210/77 563/211/77 -f 550/212/78 564/196/78 565/213/78 -f 565/213/78 551/214/78 550/212/78 -f 566/210/79 567/209/79 568/211/79 -f 569/215/80 570/216/80 568/211/80 -f 568/211/80 567/209/80 569/215/80 -f 571/217/81 572/218/81 543/197/81 -f 543/197/81 542/196/81 571/217/81 -f 573/219/82 574/220/82 550/204/82 -f 550/204/82 549/203/82 573/219/82 -f 575/209/83 576/208/83 558/207/83 -f 558/207/83 557/207/83 575/209/83 -f 550/212/84 574/214/84 577/213/84 -f 577/213/84 564/196/84 550/212/84 -f 569/215/85 561/209/85 563/211/85 -f 563/211/85 570/216/85 569/215/85 -f 578/221/75 565/222/75 541/222/75 -f 541/222/75 544/221/75 578/221/75 -f 565/222/86 564/203/86 542/203/86 -f 542/203/86 541/222/86 565/222/86 -f 564/203/87 577/206/87 571/206/87 -f 571/206/87 542/203/87 564/203/87 -f 577/206/73 579/223/73 572/223/73 -f 572/223/73 571/206/73 577/206/73 -f 579/224/88 580/225/88 543/226/88 -f 543/226/88 572/224/88 579/224/88 -f 580/225/89 578/224/89 544/224/89 -f 544/224/89 543/226/89 580/225/89 -f 574/214/79 581/227/79 579/228/79 -f 579/228/79 577/213/79 574/214/79 -f 581/229/75 574/220/75 573/219/75 -f 573/219/75 582/221/75 581/229/75 -f 552/206/73 551/205/73 583/230/73 -f 583/230/73 584/223/73 552/206/73 -f 583/227/77 551/214/77 565/213/77 -f 565/213/77 578/228/77 583/227/77 -f 547/201/73 546/200/73 585/199/73 -f 585/199/73 586/202/73 547/201/73 -f 583/231/90 578/224/90 563/232/90 -f 563/232/90 562/233/90 583/231/90 -f 578/224/89 580/225/89 570/234/89 -f 570/234/89 563/232/89 578/224/89 -f 580/225/88 579/224/88 568/232/88 -f 568/232/88 570/234/88 580/225/88 -f 579/224/92 581/231/92 566/233/92 -f 566/233/92 568/232/92 579/224/92 -f 555/200/75 554/201/75 587/202/75 -f 587/202/75 588/199/75 555/200/75 -f 559/208/76 558/207/76 569/235/76 -f 569/235/76 567/236/76 559/208/76 -f 558/207/83 576/208/83 561/236/83 -f 561/236/83 569/235/83 558/207/83 -f 584/236/27 583/231/27 546/237/27 -f 546/237/27 545/238/27 584/236/27 -f 583/231/27 562/233/27 585/239/27 -f 585/239/27 546/237/27 583/231/27 -f 562/210/94 561/209/94 586/240/94 -f 586/240/94 585/241/94 562/210/94 -f 561/236/26 576/208/26 547/242/26 -f 547/242/26 586/238/26 561/236/26 -f 576/208/26 575/209/26 548/240/26 -f 548/240/26 547/242/26 576/208/26 -f 560/209/26 559/208/26 554/242/26 -f 554/242/26 553/240/26 560/209/26 -f 559/208/26 567/236/26 587/238/26 -f 587/238/26 554/242/26 559/208/26 -f 567/209/95 566/210/95 588/241/95 -f 588/241/95 587/240/95 567/209/95 -f 566/233/27 581/231/27 555/237/27 -f 555/237/27 588/239/27 566/233/27 -f 581/231/27 582/236/27 556/238/27 -f 556/238/27 555/237/27 581/231/27 -f 589/243/187 590/244/187 591/245/187 -f 591/245/187 592/246/187 589/243/187 -f 589/247/163 592/248/163 593/249/163 -f 593/249/163 594/250/163 589/247/163 -f 592/246/188 591/245/188 595/251/189 -f 595/251/189 593/252/188 592/246/188 -f 591/248/161 590/247/161 596/250/161 -f 596/250/161 595/249/161 591/248/161 -f 597/253/13 598/254/13 599/255/13 -f 599/255/13 600/256/13 597/253/13 -f 601/257/14 597/253/14 600/256/14 -f 600/256/14 602/258/14 601/257/14 -f 603/259/118 601/257/118 602/258/118 -f 602/258/118 604/260/15 603/259/118 -f 605/261/16 603/262/16 604/263/16 -f 604/263/16 606/264/16 605/261/16 -f 607/265/17 605/261/17 606/264/17 -f 606/264/17 608/266/17 607/265/17 -f 609/267/18 607/265/18 608/266/18 -f 608/266/18 610/268/18 609/267/18 -f 611/269/190 609/267/19 610/268/19 -f 610/268/19 612/270/190 611/269/190 -f 613/271/20 611/269/20 612/270/20 -f 612/270/20 614/272/20 613/271/20 -f 615/273/21 613/271/21 614/272/21 -f 614/272/21 616/274/21 615/273/21 -f 617/275/191 615/273/191 616/274/22 -f 616/274/22 618/276/191 617/275/191 -f 619/277/23 617/275/23 618/276/23 -f 618/276/23 620/278/23 619/277/23 -f 598/254/24 619/277/25 620/278/25 -f 620/278/25 599/255/24 598/254/24 -f 600/279/27 599/280/27 621/281/27 -f 621/281/27 622/282/27 600/279/27 -f 623/283/27 624/279/27 625/282/27 -f 625/282/27 626/284/27 623/283/27 -f 604/285/27 602/283/27 627/284/27 -f 627/284/27 628/285/27 604/285/27 -f 629/286/27 630/285/27 631/285/27 -f 631/285/27 632/287/27 629/286/27 -f 608/288/27 606/286/27 633/287/27 -f 633/287/27 634/289/27 608/288/27 -f 635/290/27 636/288/27 637/289/27 -f 637/289/27 638/291/27 635/290/27 -f 612/292/27 610/290/27 639/291/27 -f 639/291/27 640/293/27 612/292/27 -f 641/294/27 642/292/27 643/293/27 -f 643/293/27 644/295/27 641/294/27 -f 616/296/27 614/294/27 645/295/27 -f 645/295/27 646/297/27 616/296/27 -f 647/298/27 648/296/27 649/297/27 -f 649/297/27 650/299/27 647/298/27 -f 620/300/27 618/298/27 651/299/27 -f 651/299/27 652/300/27 620/300/27 -f 653/280/27 654/300/27 655/300/27 -f 655/300/27 656/281/27 653/280/27 -f 622/301/19 621/302/19 657/303/19 -f 657/303/19 658/304/19 622/301/19 -f 627/305/20 622/301/20 658/304/20 -f 658/304/20 659/306/20 627/305/20 -f 628/307/21 627/305/21 659/306/21 -f 659/306/21 660/308/21 628/307/21 -f 633/309/22 628/307/22 660/308/22 -f 660/308/22 661/310/22 633/309/22 -f 634/311/23 633/309/23 661/310/23 -f 661/310/23 662/312/23 634/311/23 -f 639/313/24 634/311/24 662/312/24 -f 662/312/24 663/314/24 639/313/24 -f 640/315/192 639/313/13 663/314/13 -f 663/314/13 664/316/192 640/315/192 -f 645/317/14 640/315/14 664/316/14 -f 664/316/14 665/318/14 645/317/14 -f 646/319/15 645/317/15 665/318/15 -f 665/318/15 666/320/15 646/319/15 -f 651/321/16 646/322/16 666/323/193 -f 666/323/193 667/324/16 651/321/16 -f 652/325/17 651/321/17 667/324/17 -f 667/324/17 668/326/17 652/325/17 -f 621/302/18 652/325/194 668/326/194 -f 668/326/194 657/303/18 621/302/18 -f 658/327/27 657/328/27 669/329/27 -f 659/330/27 658/327/27 669/329/27 -f 660/331/27 659/330/27 669/329/27 -f 661/332/27 660/331/27 669/329/27 -f 662/333/27 661/332/27 669/329/27 -f 663/334/27 662/333/27 669/329/27 -f 664/335/27 663/334/27 669/329/27 -f 665/336/27 664/335/27 669/329/27 -f 666/337/27 665/336/27 669/329/27 -f 667/338/27 666/337/27 669/329/27 -f 668/339/27 667/338/27 669/329/27 -f 657/328/27 668/339/27 669/329/27 -f 602/258/14 600/256/14 624/340/14 -f 624/340/14 623/341/14 602/258/14 -f 600/279/161 622/282/161 625/282/161 -f 625/282/161 624/279/161 600/279/161 -f 622/301/20 627/305/20 626/342/20 -f 626/342/20 625/343/20 622/301/20 -f 627/284/195 602/283/195 623/283/195 -f 623/283/195 626/284/195 627/284/195 -f 606/264/16 604/263/16 630/344/193 -f 630/344/193 629/345/16 606/264/16 -f 604/285/1 628/285/1 631/285/1 -f 631/285/1 630/285/1 604/285/1 -f 628/307/22 633/309/22 632/346/22 -f 632/346/22 631/347/22 628/307/22 -f 633/287/196 606/286/196 629/286/196 -f 629/286/196 632/287/196 633/287/196 -f 610/268/18 608/266/18 636/348/18 -f 636/348/18 635/349/18 610/268/18 -f 608/288/153 634/289/153 637/289/153 -f 637/289/153 636/288/153 608/288/153 -f 634/311/24 639/313/24 638/350/24 -f 638/350/24 637/351/24 634/311/24 -f 639/291/10 610/290/10 635/290/10 -f 635/290/10 638/291/10 639/291/10 -f 614/272/20 612/270/20 642/352/20 -f 642/352/20 641/353/20 614/272/20 -f 612/292/163 640/293/163 643/293/163 -f 643/293/163 642/292/163 612/292/163 -f 640/315/14 645/317/14 644/354/14 -f 644/354/14 643/355/14 640/315/14 -f 645/295/197 614/294/197 641/294/197 -f 641/294/197 644/295/197 645/295/197 -f 618/276/191 616/274/22 648/356/22 -f 648/356/22 647/357/22 618/276/191 -f 616/296/7 646/297/7 649/297/7 -f 649/297/7 648/296/7 616/296/7 -f 646/322/16 651/321/16 650/358/16 -f 650/358/16 649/359/16 646/322/16 -f 651/299/198 618/298/198 647/298/198 -f 647/298/198 650/299/198 651/299/198 -f 599/255/24 620/278/25 654/360/24 -f 654/360/24 653/361/24 599/255/24 -f 620/300/151 652/300/151 655/300/151 -f 655/300/151 654/300/151 620/300/151 -f 652/325/194 621/302/18 656/362/18 -f 656/362/18 655/363/194 652/325/194 -f 621/281/4 599/280/4 653/280/4 -f 653/280/4 656/281/4 621/281/4 -f 670/364/199 671/365/199 672/366/199 -f 672/366/199 673/367/199 670/364/199 -f 671/368/200 674/369/200 675/370/200 -f 675/370/200 672/371/200 671/368/200 -f 674/365/201 676/364/201 677/367/201 -f 677/367/201 675/366/201 674/365/201 -f 676/372/202 670/373/202 673/374/202 -f 673/374/202 677/375/202 676/372/202 -f 678/376/7 679/377/7 680/378/7 -f 680/378/7 681/379/7 678/376/7 -f 679/380/4 682/381/4 683/382/4 -f 683/382/4 680/383/4 679/380/4 -f 684/384/1 685/385/1 686/386/1 -f 686/386/1 687/387/1 684/384/1 -f 688/388/10 678/389/10 681/390/10 -f 681/390/10 689/391/10 688/388/10 -f 676/392/26 674/393/26 683/394/26 -f 683/394/26 689/395/26 676/392/26 -f 683/394/26 674/393/26 671/396/26 -f 671/396/26 680/397/26 683/394/26 -f 680/397/26 671/396/26 670/398/26 -f 670/398/26 681/399/26 680/397/26 -f 681/399/26 670/398/26 676/392/26 -f 676/392/26 689/395/26 681/399/26 -f 673/400/27 672/401/27 690/402/27 -f 690/402/27 691/403/27 673/400/27 -f 672/401/27 675/404/27 692/405/27 -f 692/405/27 690/402/27 672/401/27 -f 675/404/27 677/406/27 693/407/27 -f 693/407/27 692/405/27 675/404/27 -f 677/406/27 673/400/27 691/403/27 -f 691/403/27 693/407/27 677/406/27 -f 688/408/1 689/409/1 694/410/1 -f 694/410/1 695/411/1 688/408/1 -f 689/409/1 683/412/1 696/413/1 -f 696/413/1 694/410/1 689/409/1 -f 683/412/1 682/414/1 697/415/1 -f 697/415/1 696/413/1 683/412/1 -f 695/416/10 694/417/10 686/418/10 -f 686/418/10 685/419/10 695/416/10 -f 694/420/27 696/421/27 687/422/27 -f 687/422/27 686/423/27 694/420/27 -f 696/417/4 697/416/4 684/419/4 -f 684/419/4 687/418/4 696/417/4 -f 698/243/150 699/246/150 700/245/150 -f 700/245/150 701/244/150 698/243/150 -f 698/247/153 702/250/153 703/249/153 -f 703/249/153 699/248/153 698/247/153 -f 699/246/152 703/252/152 704/251/152 -f 704/251/152 700/245/152 699/246/152 -f 700/248/151 704/249/151 705/250/151 -f 705/250/151 701/247/151 700/248/151 -f 706/424/203 707/425/204 708/426/205 -f 708/426/205 709/427/27 706/424/203 -f 710/428/1 711/429/1 707/429/1 -f 707/429/1 706/428/1 710/428/1 -f 712/430/206 708/430/206 707/431/206 -f 707/431/206 711/431/206 712/430/206 -f 706/424/203 709/427/27 713/426/207 -f 713/426/207 714/425/208 706/424/203 -f 710/428/1 706/428/1 714/432/1 -f 714/432/1 715/432/1 710/428/1 -f 714/431/209 713/430/209 716/430/209 -f 716/430/209 715/431/209 714/431/209 -f 717/433/210 709/427/27 708/426/205 -f 708/426/205 718/434/211 717/433/210 -f 719/428/7 717/428/7 718/429/7 -f 718/429/7 720/429/7 719/428/7 -f 718/435/212 708/430/212 712/430/212 -f 712/430/212 720/435/212 718/435/212 -f 717/433/210 721/434/213 713/426/207 -f 713/426/207 709/427/27 717/433/210 -f 719/428/7 722/432/7 721/432/7 -f 721/432/7 717/428/7 719/428/7 -f 716/430/214 713/430/214 721/435/214 -f 721/435/214 722/435/214 716/430/214 -f 723/436/4 724/437/4 725/438/4 -f 725/438/4 726/439/4 723/436/4 -f 724/437/215 723/436/215 727/440/215 -f 727/440/215 728/441/215 724/437/215 -f 723/436/216 726/439/216 729/440/216 -f 729/440/216 727/440/216 723/436/216 -f 730/442/217 728/441/217 727/440/217 -f 727/440/217 731/443/217 730/442/217 -f 732/444/216 731/443/216 727/440/216 -f 727/440/216 729/445/216 732/444/216 -f 733/446/10 734/447/10 735/448/10 -f 735/448/10 736/449/10 733/446/10 -f 734/447/218 737/442/218 738/443/218 -f 738/443/218 735/448/218 734/447/218 -f 735/448/219 738/443/219 739/450/219 -f 739/450/219 736/449/219 735/448/219 -f 738/443/220 737/442/220 730/442/220 -f 730/442/220 731/443/220 738/443/220 -f 732/444/219 739/444/219 738/443/219 -f 738/443/219 731/443/219 732/444/219 -f 740/436/4 741/437/4 742/438/4 -f 742/438/4 743/439/4 740/436/4 -f 741/437/221 740/436/221 744/440/221 -f 744/440/221 745/441/221 741/437/221 -f 740/436/222 743/439/222 746/440/222 -f 746/440/222 744/440/222 740/436/222 -f 747/442/223 745/441/223 744/440/223 -f 744/440/223 748/443/223 747/442/223 -f 749/444/222 748/443/222 744/440/222 -f 744/440/222 746/445/222 749/444/222 -f 750/446/10 751/447/10 752/448/10 -f 752/448/10 753/449/10 750/446/10 -f 751/447/224 754/442/224 755/443/224 -f 755/443/224 752/448/224 751/447/224 -f 752/448/222 755/443/222 756/450/222 -f 756/450/222 753/449/222 752/448/222 -f 755/443/225 754/442/225 747/442/225 -f 747/442/225 748/443/225 755/443/225 -f 749/444/222 756/444/222 755/443/222 -f 755/443/222 748/443/222 749/444/222 -f 757/436/4 758/437/4 759/438/4 -f 759/438/4 760/439/4 757/436/4 -f 758/437/226 757/436/226 761/440/226 -f 761/440/226 762/441/227 758/437/226 -f 757/436/228 760/439/228 763/440/229 -f 763/440/229 761/440/229 757/436/228 -f 764/442/230 762/441/230 761/440/230 -f 761/440/230 765/443/230 764/442/230 -f 766/444/228 765/443/228 761/440/228 -f 761/440/228 763/445/228 766/444/228 -f 767/446/10 768/447/10 769/448/10 -f 769/448/10 770/449/10 767/446/10 -f 768/447/231 771/442/232 772/443/231 -f 772/443/231 769/448/232 768/447/231 -f 769/448/229 772/443/229 773/450/229 -f 773/450/229 770/449/229 769/448/229 -f 772/443/233 771/442/233 764/442/233 -f 764/442/233 765/443/233 772/443/233 -f 766/444/229 773/444/229 772/443/229 -f 772/443/229 765/443/229 766/444/229 -f 774/436/4 775/437/4 776/438/4 -f 776/438/4 777/439/4 774/436/4 -f 775/437/226 774/436/227 778/440/227 -f 778/440/227 779/441/227 775/437/226 -f 774/436/229 777/439/229 780/440/229 -f 780/440/229 778/440/229 774/436/229 -f 781/442/230 779/441/230 778/440/230 -f 778/440/230 782/443/230 781/442/230 -f 783/444/229 782/443/229 778/440/229 -f 778/440/229 780/445/229 783/444/229 -f 784/446/10 785/447/10 786/448/10 -f 786/448/10 787/449/10 784/446/10 -f 785/447/231 788/442/232 789/443/232 -f 789/443/232 786/448/231 785/447/231 -f 786/448/228 789/443/229 790/450/229 -f 790/450/229 787/449/228 786/448/228 -f 789/443/233 788/442/233 781/442/233 -f 781/442/233 782/443/233 789/443/233 -f 783/444/229 790/444/229 789/443/229 -f 789/443/229 782/443/229 783/444/229 -f 791/436/4 792/437/4 793/438/4 -f 793/438/4 794/439/4 791/436/4 -f 792/437/234 791/436/234 795/440/234 -f 795/440/234 796/441/234 792/437/234 -f 791/436/235 794/439/235 797/440/235 -f 797/440/235 795/440/235 791/436/235 -f 798/442/236 796/441/236 795/440/236 -f 795/440/236 799/443/236 798/442/236 -f 800/444/235 799/443/235 795/440/235 -f 795/440/235 797/445/235 800/444/235 -f 801/446/10 802/447/10 803/448/10 -f 803/448/10 804/449/10 801/446/10 -f 802/447/237 805/442/237 806/443/237 -f 806/443/237 803/448/237 802/447/237 -f 803/448/235 806/443/235 807/450/235 -f 807/450/235 804/449/235 803/448/235 -f 806/443/238 805/442/238 798/442/238 -f 798/442/238 799/443/238 806/443/238 -f 800/444/239 807/444/239 806/443/239 -f 806/443/239 799/443/239 800/444/239 -f 808/436/4 809/437/4 810/438/4 -f 810/438/4 811/439/4 808/436/4 -f 809/437/240 808/436/240 812/440/240 -f 812/440/240 813/441/240 809/437/240 -f 808/436/241 811/439/241 814/440/241 -f 814/440/241 812/440/241 808/436/241 -f 815/442/236 813/441/236 812/440/236 -f 812/440/236 816/443/236 815/442/236 -f 817/444/241 816/443/241 812/440/241 -f 812/440/241 814/445/241 817/444/241 -f 818/446/10 819/447/10 820/448/10 -f 820/448/10 821/449/10 818/446/10 -f 819/447/242 822/442/242 823/443/242 -f 823/443/242 820/448/242 819/447/242 -f 820/448/243 823/443/241 824/450/241 -f 824/450/241 821/449/243 820/448/243 -f 823/443/238 822/442/238 815/442/238 -f 815/442/238 816/443/238 823/443/238 -f 817/444/241 824/444/241 823/443/241 -f 823/443/241 816/443/241 817/444/241 -f 825/436/4 826/437/4 827/438/4 -f 827/438/4 828/439/4 825/436/4 -f 826/437/215 825/436/215 829/440/215 -f 829/440/215 830/441/215 826/437/215 -f 825/436/216 828/439/216 831/440/216 -f 831/440/216 829/440/216 825/436/216 -f 832/442/217 830/441/217 829/440/217 -f 829/440/217 833/443/217 832/442/217 -f 834/444/216 833/443/216 829/440/216 -f 829/440/216 831/445/216 834/444/216 -f 835/446/10 836/447/10 837/448/10 -f 837/448/10 838/449/10 835/446/10 -f 836/447/218 839/442/218 840/443/218 -f 840/443/218 837/448/218 836/447/218 -f 837/448/219 840/443/219 841/450/219 -f 841/450/219 838/449/219 837/448/219 -f 840/443/220 839/442/220 832/442/220 -f 832/442/220 833/443/220 840/443/220 -f 834/444/219 841/444/219 840/443/219 -f 840/443/219 833/443/219 834/444/219 -f 842/436/4 843/437/4 844/438/4 -f 844/438/4 845/439/4 842/436/4 -f 843/437/215 842/436/215 846/440/215 -f 846/440/215 847/441/215 843/437/215 -f 842/436/216 845/439/216 848/440/216 -f 848/440/216 846/440/216 842/436/216 -f 849/442/217 847/441/217 846/440/217 -f 846/440/217 850/443/217 849/442/217 -f 851/444/216 850/443/216 846/440/216 -f 846/440/216 848/445/216 851/444/216 -f 852/446/10 853/447/10 854/448/10 -f 854/448/10 855/449/10 852/446/10 -f 853/447/218 856/442/218 857/443/218 -f 857/443/218 854/448/218 853/447/218 -f 854/448/219 857/443/219 858/450/219 -f 858/450/219 855/449/219 854/448/219 -f 857/443/220 856/442/220 849/442/220 -f 849/442/220 850/443/220 857/443/220 -f 851/444/219 858/444/219 857/443/219 -f 857/443/219 850/443/219 851/444/219 -f 859/438/4 860/437/4 861/436/4 -f 861/436/4 862/439/4 859/438/4 -f 863/440/244 861/436/244 860/437/244 -f 860/437/244 864/441/244 863/440/244 -f 865/440/245 862/439/245 861/436/245 -f 861/436/245 863/440/245 865/440/245 -f 863/440/246 864/441/246 866/442/246 -f 866/442/246 867/443/246 863/440/246 -f 868/444/245 865/445/245 863/440/245 -f 863/440/245 867/443/245 868/444/245 -f 869/448/10 870/447/10 871/446/10 -f 871/446/10 872/449/10 869/448/10 -f 873/443/247 874/442/247 870/447/247 -f 870/447/247 869/448/247 873/443/247 -f 875/450/248 873/443/248 869/448/248 -f 869/448/248 872/449/248 875/450/248 -f 866/442/249 874/442/249 873/443/249 -f 873/443/249 867/443/249 866/442/249 -f 868/444/248 867/443/248 873/443/248 -f 873/443/248 875/444/248 868/444/248 -f 876/438/4 877/437/4 878/436/4 -f 878/436/4 879/439/4 876/438/4 -f 880/440/250 878/436/250 877/437/250 -f 877/437/250 881/441/250 880/440/250 -f 882/440/251 879/439/251 878/436/251 -f 878/436/251 880/440/251 882/440/251 -f 880/440/252 881/441/252 883/442/252 -f 883/442/252 884/443/252 880/440/252 -f 885/444/251 882/445/251 880/440/251 -f 880/440/251 884/443/251 885/444/251 -f 886/448/10 887/447/10 888/446/10 -f 888/446/10 889/449/10 886/448/10 -f 890/443/253 891/442/253 887/447/253 -f 887/447/253 886/448/253 890/443/253 -f 892/450/251 890/443/251 886/448/254 -f 886/448/254 889/449/254 892/450/251 -f 883/442/255 891/442/255 890/443/255 -f 890/443/255 884/443/255 883/442/255 -f 885/444/251 884/443/251 890/443/251 -f 890/443/251 892/444/251 885/444/251 -f 893/438/4 894/437/4 895/436/4 -f 895/436/4 896/439/4 893/438/4 -f 897/440/256 895/436/257 894/437/256 -f 894/437/256 898/441/256 897/440/256 -f 899/440/258 896/439/258 895/436/258 -f 895/436/258 897/440/258 899/440/258 -f 897/440/259 898/441/259 900/442/259 -f 900/442/259 901/443/259 897/440/259 -f 902/444/258 899/445/258 897/440/258 -f 897/440/258 901/443/258 902/444/258 -f 903/448/10 904/447/10 905/446/10 -f 905/446/10 906/449/10 903/448/10 -f 907/443/260 908/442/260 904/447/260 -f 904/447/260 903/448/260 907/443/260 -f 909/450/261 907/443/261 903/448/261 -f 903/448/261 906/449/261 909/450/261 -f 900/442/262 908/442/262 907/443/262 -f 907/443/262 901/443/262 900/442/262 -f 902/444/261 901/443/261 907/443/261 -f 907/443/261 909/444/261 902/444/261 -f 910/438/4 911/437/4 912/436/4 -f 912/436/4 913/439/4 910/438/4 -f 914/440/257 912/436/257 911/437/257 -f 911/437/257 915/441/256 914/440/257 -f 916/440/261 913/439/261 912/436/261 -f 912/436/261 914/440/261 916/440/261 -f 914/440/259 915/441/259 917/442/259 -f 917/442/259 918/443/259 914/440/259 -f 919/444/261 916/445/261 914/440/261 -f 914/440/261 918/443/261 919/444/261 -f 920/448/10 921/447/10 922/446/10 -f 922/446/10 923/449/10 920/448/10 -f 924/443/263 925/442/260 921/447/263 -f 921/447/263 920/448/263 924/443/263 -f 926/450/258 924/443/258 920/448/261 -f 920/448/261 923/449/261 926/450/258 -f 917/442/262 925/442/262 924/443/262 -f 924/443/262 918/443/262 917/442/262 -f 919/444/261 918/443/261 924/443/261 -f 924/443/261 926/444/261 919/444/261 -f 927/438/4 928/437/4 929/436/4 -f 929/436/4 930/439/4 927/438/4 -f 931/440/264 929/436/264 928/437/264 -f 928/437/264 932/441/264 931/440/264 -f 933/440/265 930/439/265 929/436/265 -f 929/436/265 931/440/265 933/440/265 -f 931/440/266 932/441/266 934/442/266 -f 934/442/266 935/443/266 931/440/266 -f 936/444/265 933/445/265 931/440/265 -f 931/440/265 935/443/265 936/444/265 -f 937/448/10 938/447/10 939/446/10 -f 939/446/10 940/449/10 937/448/10 -f 941/443/267 942/442/267 938/447/267 -f 938/447/267 937/448/267 941/443/267 -f 943/450/265 941/443/265 937/448/265 -f 937/448/265 940/449/265 943/450/265 -f 934/442/268 942/442/268 941/443/268 -f 941/443/268 935/443/268 934/442/268 -f 936/444/269 935/443/269 941/443/269 -f 941/443/269 943/444/269 936/444/269 -f 944/438/4 945/437/4 946/436/4 -f 946/436/4 947/439/4 944/438/4 -f 948/440/270 946/436/270 945/437/270 -f 945/437/270 949/441/270 948/440/270 -f 950/440/271 947/439/271 946/436/271 -f 946/436/271 948/440/271 950/440/271 -f 948/440/266 949/441/266 951/442/266 -f 951/442/266 952/443/266 948/440/266 -f 953/444/271 950/445/271 948/440/271 -f 948/440/271 952/443/271 953/444/271 -f 954/448/10 955/447/10 956/446/10 -f 956/446/10 957/449/10 954/448/10 -f 958/443/272 959/442/272 955/447/272 -f 955/447/272 954/448/272 958/443/272 -f 960/450/271 958/443/271 954/448/273 -f 954/448/273 957/449/273 960/450/271 -f 951/442/268 959/442/268 958/443/268 -f 958/443/268 952/443/268 951/442/268 -f 953/444/271 952/443/271 958/443/271 -f 958/443/271 960/444/271 953/444/271 -f 961/438/4 962/437/4 963/436/4 -f 963/436/4 964/439/4 961/438/4 -f 965/440/244 963/436/244 962/437/244 -f 962/437/244 966/441/244 965/440/244 -f 967/440/245 964/439/245 963/436/245 -f 963/436/245 965/440/245 967/440/245 -f 965/440/246 966/441/246 968/442/274 -f 968/442/274 969/443/246 965/440/246 -f 970/444/245 967/445/245 965/440/245 -f 965/440/245 969/443/245 970/444/245 -f 971/448/10 972/447/10 973/446/10 -f 973/446/10 974/449/10 971/448/10 -f 975/443/247 976/442/247 972/447/247 -f 972/447/247 971/448/247 975/443/247 -f 977/450/248 975/443/248 971/448/248 -f 971/448/248 974/449/248 977/450/248 -f 968/442/275 976/442/249 975/443/249 -f 975/443/249 969/443/249 968/442/275 -f 970/444/248 969/443/248 975/443/248 -f 975/443/248 977/444/248 970/444/248 -f 978/438/4 979/437/4 980/436/4 -f 980/436/4 981/439/4 978/438/4 -f 982/440/244 980/436/244 979/437/244 -f 979/437/244 983/441/244 982/440/244 -f 984/440/245 981/439/245 980/436/245 -f 980/436/245 982/440/245 984/440/245 -f 982/440/246 983/441/246 985/442/246 -f 985/442/246 986/443/246 982/440/246 -f 987/444/245 984/445/245 982/440/245 -f 982/440/245 986/443/245 987/444/245 -f 988/448/10 989/447/10 990/446/10 -f 990/446/10 991/449/10 988/448/10 -f 992/443/247 993/442/247 989/447/247 -f 989/447/247 988/448/247 992/443/247 -f 994/450/248 992/443/248 988/448/248 -f 988/448/248 991/449/248 994/450/248 -f 985/442/249 993/442/249 992/443/249 -f 992/443/249 986/443/249 985/442/249 -f 987/444/248 986/443/248 992/443/248 -f 992/443/248 994/444/248 987/444/248 -f 995/436/4 996/437/4 997/438/4 -f 997/438/4 998/439/4 995/436/4 -f 996/437/276 995/436/276 999/440/276 -f 999/440/276 1000/441/276 996/437/276 -f 995/436/277 998/439/277 1001/440/278 -f 1001/440/278 999/440/278 995/436/277 -f 1002/442/279 1000/441/279 999/440/279 -f 999/440/279 1003/443/279 1002/442/279 -f 1004/444/277 1003/443/277 999/440/277 -f 999/440/277 1001/445/277 1004/444/277 -f 1005/446/10 1006/447/10 1007/448/10 -f 1007/448/10 1008/449/10 1005/446/10 -f 1006/447/280 1009/442/280 1010/443/280 -f 1010/443/280 1007/448/280 1006/447/280 -f 1007/448/278 1010/443/278 1011/450/278 -f 1011/450/278 1008/449/278 1007/448/278 -f 1010/443/281 1009/442/281 1002/442/281 -f 1002/442/281 1003/443/281 1010/443/281 -f 1004/444/278 1011/444/278 1010/443/278 -f 1010/443/278 1003/443/278 1004/444/278 -f 1012/438/4 1013/437/4 1014/436/4 -f 1014/436/4 1015/439/4 1012/438/4 -f 1016/440/282 1014/436/282 1013/437/282 -f 1013/437/282 1017/441/282 1016/440/282 -f 1018/440/283 1015/439/283 1014/436/283 -f 1014/436/283 1016/440/283 1018/440/283 -f 1016/440/284 1017/441/284 1019/442/284 -f 1019/442/284 1020/443/284 1016/440/284 -f 1021/444/283 1018/445/283 1016/440/283 -f 1016/440/283 1020/443/283 1021/444/283 -f 1022/448/10 1023/447/10 1024/446/10 -f 1024/446/10 1025/449/10 1022/448/10 -f 1026/443/285 1027/442/285 1023/447/285 -f 1023/447/285 1022/448/285 1026/443/285 -f 1028/450/286 1026/443/286 1022/448/286 -f 1022/448/286 1025/449/286 1028/450/286 -f 1019/442/287 1027/442/287 1026/443/287 -f 1026/443/287 1020/443/287 1019/442/287 -f 1021/444/286 1020/443/286 1026/443/286 -f 1026/443/286 1028/444/286 1021/444/286 -f 1029/243/187 1030/244/187 1031/245/187 -f 1031/245/187 1032/246/187 1029/243/187 -f 1029/247/163 1032/248/163 1033/249/163 -f 1033/249/163 1034/250/163 1029/247/163 -f 1032/246/188 1031/245/188 1035/251/188 -f 1035/251/188 1033/252/188 1032/246/188 -f 1031/248/161 1030/247/161 1036/250/161 -f 1036/250/161 1035/249/161 1031/248/161 -f 1037/451/27 1038/452/27 1039/453/27 -f 1039/453/27 1040/454/27 1037/451/27 -f 1041/455/7 1042/456/7 1038/457/7 -f 1038/457/7 1037/458/7 1041/455/7 -f 1042/459/4 1043/460/4 1039/461/4 -f 1039/461/4 1038/462/4 1042/459/4 -f 1043/456/1 1044/455/1 1040/458/1 -f 1040/458/1 1039/457/1 1043/456/1 -f 1044/460/10 1041/459/10 1037/462/10 -f 1037/462/10 1040/461/10 1044/460/10 -f 1045/451/27 1046/452/27 1047/453/27 -f 1047/453/27 1048/454/27 1045/451/27 -f 1049/455/7 1050/456/7 1046/457/7 -f 1046/457/7 1045/458/7 1049/455/7 -f 1050/459/4 1051/460/4 1047/461/4 -f 1047/461/4 1046/462/4 1050/459/4 -f 1051/456/1 1052/455/1 1048/458/1 -f 1048/458/1 1047/457/1 1051/456/1 -f 1052/460/10 1049/459/10 1045/462/10 -f 1045/462/10 1048/461/10 1052/460/10 -f 1053/451/27 1054/452/27 1055/453/27 -f 1055/453/27 1056/454/27 1053/451/27 -f 1057/455/7 1058/456/7 1054/457/7 -f 1054/457/7 1053/458/7 1057/455/7 -f 1058/459/4 1059/460/4 1055/461/4 -f 1055/461/4 1054/462/4 1058/459/4 -f 1059/456/1 1060/455/1 1056/458/1 -f 1056/458/1 1055/457/1 1059/456/1 -f 1060/460/10 1057/459/10 1053/462/10 -f 1053/462/10 1056/461/10 1060/460/10 -f 1061/451/27 1062/452/27 1063/453/27 -f 1063/453/27 1064/454/27 1061/451/27 -f 1065/455/10 1066/456/10 1062/457/10 -f 1062/457/10 1061/458/10 1065/455/10 -f 1066/459/7 1067/460/7 1063/461/7 -f 1063/461/7 1062/462/7 1066/459/7 -f 1067/456/4 1068/455/4 1064/458/4 -f 1064/458/4 1063/457/4 1067/456/4 -f 1068/460/1 1065/459/1 1061/462/1 -f 1061/462/1 1064/461/1 1068/460/1 -f 1069/451/27 1070/452/27 1071/453/27 -f 1071/453/27 1072/454/27 1069/451/27 -f 1073/455/10 1074/456/10 1070/457/10 -f 1070/457/10 1069/458/10 1073/455/10 -f 1074/459/7 1075/460/7 1071/461/7 -f 1071/461/7 1070/462/7 1074/459/7 -f 1075/456/4 1076/455/4 1072/458/4 -f 1072/458/4 1071/457/4 1075/456/4 -f 1076/460/1 1073/459/1 1069/462/1 -f 1069/462/1 1072/461/1 1076/460/1 -f 1077/451/27 1078/452/27 1079/453/27 -f 1079/453/27 1080/454/27 1077/451/27 -f 1081/455/10 1082/456/10 1078/457/10 -f 1078/457/10 1077/458/10 1081/455/10 -f 1082/459/7 1083/460/7 1079/461/7 -f 1079/461/7 1078/462/7 1082/459/7 -f 1083/456/4 1084/455/4 1080/458/4 -f 1080/458/4 1079/457/4 1083/456/4 -f 1084/460/1 1081/459/1 1077/462/1 -f 1077/462/1 1080/461/1 1084/460/1 -f 1085/451/27 1086/452/27 1087/453/27 -f 1087/453/27 1088/454/27 1085/451/27 -f 1089/455/10 1090/456/10 1086/457/10 -f 1086/457/10 1085/458/10 1089/455/10 -f 1090/459/7 1091/460/7 1087/461/7 -f 1087/461/7 1086/462/7 1090/459/7 -f 1091/456/4 1092/455/4 1088/458/4 -f 1088/458/4 1087/457/4 1091/456/4 -f 1092/460/1 1089/459/1 1085/462/1 -f 1085/462/1 1088/461/1 1092/460/1 -f 1093/451/27 1094/452/27 1095/453/27 -f 1095/453/27 1096/454/27 1093/451/27 -f 1097/455/7 1098/456/7 1094/457/7 -f 1094/457/7 1093/458/7 1097/455/7 -f 1098/459/4 1099/460/4 1095/461/4 -f 1095/461/4 1094/462/4 1098/459/4 -f 1099/456/1 1100/455/1 1096/458/1 -f 1096/458/1 1095/457/1 1099/456/1 -f 1100/460/10 1097/459/10 1093/462/10 -f 1093/462/10 1096/461/10 1100/460/10 -f 1101/451/27 1102/452/27 1103/453/27 -f 1103/453/27 1104/454/27 1101/451/27 -f 1105/455/7 1106/456/7 1102/457/7 -f 1102/457/7 1101/458/7 1105/455/7 -f 1106/459/4 1107/460/4 1103/461/4 -f 1103/461/4 1102/462/4 1106/459/4 -f 1107/456/1 1108/455/1 1104/458/1 -f 1104/458/1 1103/457/1 1107/456/1 -f 1108/460/10 1105/459/10 1101/462/10 -f 1101/462/10 1104/461/10 1108/460/10 -f 1109/451/27 1110/452/27 1111/453/27 -f 1111/453/27 1112/454/27 1109/451/27 -f 1113/455/7 1114/456/7 1110/457/7 -f 1110/457/7 1109/458/7 1113/455/7 -f 1114/459/4 1115/460/4 1111/461/4 -f 1111/461/4 1110/462/4 1114/459/4 -f 1115/456/1 1116/455/1 1112/458/1 -f 1112/458/1 1111/457/1 1115/456/1 -f 1116/460/10 1113/459/10 1109/462/10 -f 1109/462/10 1112/461/10 1116/460/10 -f 1117/451/27 1118/452/27 1119/453/27 -f 1119/453/27 1120/454/27 1117/451/27 -f 1121/455/7 1122/456/7 1118/457/7 -f 1118/457/7 1117/458/7 1121/455/7 -f 1122/459/4 1123/460/4 1119/461/4 -f 1119/461/4 1118/462/4 1122/459/4 -f 1123/456/1 1124/455/1 1120/458/1 -f 1120/458/1 1119/457/1 1123/456/1 -f 1124/460/10 1121/459/10 1117/462/10 -f 1117/462/10 1120/461/10 1124/460/10 -f 1125/451/27 1126/452/27 1127/453/27 -f 1127/453/27 1128/454/27 1125/451/27 -f 1129/455/7 1130/456/7 1126/457/7 -f 1126/457/7 1125/458/7 1129/455/7 -f 1130/459/4 1131/460/4 1127/461/4 -f 1127/461/4 1126/462/4 1130/459/4 -f 1131/456/1 1132/455/1 1128/458/1 -f 1128/458/1 1127/457/1 1131/456/1 -f 1132/460/10 1129/459/10 1125/462/10 -f 1125/462/10 1128/461/10 1132/460/10 -f 1133/451/27 1134/452/27 1135/453/27 -f 1135/453/27 1136/454/27 1133/451/27 -f 1137/455/7 1138/456/7 1134/457/7 -f 1134/457/7 1133/458/7 1137/455/7 -f 1138/459/4 1139/460/4 1135/461/4 -f 1135/461/4 1134/462/4 1138/459/4 -f 1139/456/1 1140/455/1 1136/458/1 -f 1136/458/1 1135/457/1 1139/456/1 -f 1140/460/10 1137/459/10 1133/462/10 -f 1133/462/10 1136/461/10 1140/460/10 -f 1141/451/27 1142/452/27 1143/453/27 -f 1143/453/27 1144/454/27 1141/451/27 -f 1145/455/7 1146/456/7 1142/457/7 -f 1142/457/7 1141/458/7 1145/455/7 -f 1146/459/4 1147/460/4 1143/461/4 -f 1143/461/4 1142/462/4 1146/459/4 -f 1147/456/1 1148/455/1 1144/458/1 -f 1144/458/1 1143/457/1 1147/456/1 -f 1148/460/10 1145/459/10 1141/462/10 -f 1141/462/10 1144/461/10 1148/460/10 -f 1149/451/27 1150/452/27 1151/453/27 -f 1151/453/27 1152/454/27 1149/451/27 -f 1153/455/7 1154/456/7 1150/457/7 -f 1150/457/7 1149/458/7 1153/455/7 -f 1154/459/4 1155/460/4 1151/461/4 -f 1151/461/4 1150/462/4 1154/459/4 -f 1155/456/1 1156/455/1 1152/458/1 -f 1152/458/1 1151/457/1 1155/456/1 -f 1156/460/10 1153/459/10 1149/462/10 -f 1149/462/10 1152/461/10 1156/460/10 -f 1157/451/27 1158/452/27 1159/453/27 -f 1159/453/27 1160/454/27 1157/451/27 -f 1161/455/7 1162/456/7 1158/457/7 -f 1158/457/7 1157/458/7 1161/455/7 -f 1162/459/4 1163/460/4 1159/461/4 -f 1159/461/4 1158/462/4 1162/459/4 -f 1163/456/1 1164/455/1 1160/458/1 -f 1160/458/1 1159/457/1 1163/456/1 -f 1164/460/10 1161/459/10 1157/462/10 -f 1157/462/10 1160/461/10 1164/460/10 -f 1165/451/27 1166/452/27 1167/453/27 -f 1167/453/27 1168/454/27 1165/451/27 -f 1169/455/7 1170/456/7 1166/457/7 -f 1166/457/7 1165/458/7 1169/455/7 -f 1170/459/4 1171/460/4 1167/461/4 -f 1167/461/4 1166/462/4 1170/459/4 -f 1171/456/1 1172/455/1 1168/458/1 -f 1168/458/1 1167/457/1 1171/456/1 -f 1172/460/10 1169/459/10 1165/462/10 -f 1165/462/10 1168/461/10 1172/460/10 -f 1173/451/27 1174/452/27 1175/453/27 -f 1175/453/27 1176/454/27 1173/451/27 -f 1177/455/7 1178/456/7 1174/457/7 -f 1174/457/7 1173/458/7 1177/455/7 -f 1178/459/4 1179/460/4 1175/461/4 -f 1175/461/4 1174/462/4 1178/459/4 -f 1179/456/1 1180/455/1 1176/458/1 -f 1176/458/1 1175/457/1 1179/456/1 -f 1180/460/10 1177/459/10 1173/462/10 -f 1173/462/10 1176/461/10 1180/460/10 -f 1181/451/27 1182/452/27 1183/453/27 -f 1183/453/27 1184/454/27 1181/451/27 -f 1185/455/7 1186/456/7 1182/457/7 -f 1182/457/7 1181/458/7 1185/455/7 -f 1186/459/4 1187/460/4 1183/461/4 -f 1183/461/4 1182/462/4 1186/459/4 -f 1187/456/1 1188/455/1 1184/458/1 -f 1184/458/1 1183/457/1 1187/456/1 -f 1188/460/10 1185/459/10 1181/462/10 -f 1181/462/10 1184/461/10 1188/460/10 -f 1189/451/27 1190/452/27 1191/453/27 -f 1191/453/27 1192/454/27 1189/451/27 -f 1193/455/7 1194/456/7 1190/457/7 -f 1190/457/7 1189/458/7 1193/455/7 -f 1194/459/4 1195/460/4 1191/461/4 -f 1191/461/4 1190/462/4 1194/459/4 -f 1195/456/1 1196/455/1 1192/458/1 -f 1192/458/1 1191/457/1 1195/456/1 -f 1196/460/10 1193/459/10 1189/462/10 -f 1189/462/10 1192/461/10 1196/460/10 -f 1197/451/27 1198/452/27 1199/453/27 -f 1199/453/27 1200/454/27 1197/451/27 -f 1201/455/7 1202/456/7 1198/457/7 -f 1198/457/7 1197/458/7 1201/455/7 -f 1202/459/4 1203/460/4 1199/461/4 -f 1199/461/4 1198/462/4 1202/459/4 -f 1203/456/1 1204/455/1 1200/458/1 -f 1200/458/1 1199/457/1 1203/456/1 -f 1204/460/10 1201/459/10 1197/462/10 -f 1197/462/10 1200/461/10 1204/460/10 -f 1205/451/27 1206/452/27 1207/453/27 -f 1207/453/27 1208/454/27 1205/451/27 -f 1209/455/7 1210/456/7 1206/457/7 -f 1206/457/7 1205/458/7 1209/455/7 -f 1210/459/4 1211/460/4 1207/461/4 -f 1207/461/4 1206/462/4 1210/459/4 -f 1211/456/1 1212/455/1 1208/458/1 -f 1208/458/1 1207/457/1 1211/456/1 -f 1212/460/10 1209/459/10 1205/462/10 -f 1205/462/10 1208/461/10 1212/460/10 -f 1213/451/27 1214/452/27 1215/453/27 -f 1215/453/27 1216/454/27 1213/451/27 -f 1217/455/7 1218/456/7 1214/457/7 -f 1214/457/7 1213/458/7 1217/455/7 -f 1218/459/4 1219/460/4 1215/461/4 -f 1215/461/4 1214/462/4 1218/459/4 -f 1219/456/1 1220/455/1 1216/458/1 -f 1216/458/1 1215/457/1 1219/456/1 -f 1220/460/10 1217/459/10 1213/462/10 -f 1213/462/10 1216/461/10 1220/460/10 -f 1221/451/27 1222/452/27 1223/453/27 -f 1223/453/27 1224/454/27 1221/451/27 -f 1225/455/7 1226/456/7 1222/457/7 -f 1222/457/7 1221/458/7 1225/455/7 -f 1226/459/4 1227/460/4 1223/461/4 -f 1223/461/4 1222/462/4 1226/459/4 -f 1227/456/1 1228/455/1 1224/458/1 -f 1224/458/1 1223/457/1 1227/456/1 -f 1228/460/10 1225/459/10 1221/462/10 -f 1221/462/10 1224/461/10 1228/460/10 -f 1229/451/27 1230/452/27 1231/453/27 -f 1231/453/27 1232/454/27 1229/451/27 -f 1233/455/4 1234/456/4 1230/457/4 -f 1230/457/4 1229/458/4 1233/455/4 -f 1234/459/1 1235/460/1 1231/461/1 -f 1231/461/1 1230/462/1 1234/459/1 -f 1235/456/10 1236/455/10 1232/458/10 -f 1232/458/10 1231/457/10 1235/456/10 -f 1236/460/7 1233/459/7 1229/462/7 -f 1229/462/7 1232/461/7 1236/460/7 -f 1237/451/27 1238/452/27 1239/453/27 -f 1239/453/27 1240/454/27 1237/451/27 -f 1241/455/4 1242/456/4 1238/457/4 -f 1238/457/4 1237/458/4 1241/455/4 -f 1242/459/1 1243/460/1 1239/461/1 -f 1239/461/1 1238/462/1 1242/459/1 -f 1243/456/10 1244/455/10 1240/458/10 -f 1240/458/10 1239/457/10 1243/456/10 -f 1244/460/7 1241/459/7 1237/462/7 -f 1237/462/7 1240/461/7 1244/460/7 -f 1245/451/27 1246/452/27 1247/453/27 -f 1247/453/27 1248/454/27 1245/451/27 -f 1249/455/4 1250/456/4 1246/457/4 -f 1246/457/4 1245/458/4 1249/455/4 -f 1250/459/1 1251/460/1 1247/461/1 -f 1247/461/1 1246/462/1 1250/459/1 -f 1251/456/10 1252/455/10 1248/458/10 -f 1248/458/10 1247/457/10 1251/456/10 -f 1252/460/7 1249/459/7 1245/462/7 -f 1245/462/7 1248/461/7 1252/460/7 -f 1253/451/27 1254/452/27 1255/453/27 -f 1255/453/27 1256/454/27 1253/451/27 -f 1257/455/4 1258/456/4 1254/457/4 -f 1254/457/4 1253/458/4 1257/455/4 -f 1258/459/1 1259/460/1 1255/461/1 -f 1255/461/1 1254/462/1 1258/459/1 -f 1259/456/10 1260/455/10 1256/458/10 -f 1256/458/10 1255/457/10 1259/456/10 -f 1260/460/7 1257/459/7 1253/462/7 -f 1253/462/7 1256/461/7 1260/460/7 -f 1261/451/27 1262/452/27 1263/453/27 -f 1263/453/27 1264/454/27 1261/451/27 -f 1265/455/7 1266/456/7 1262/457/7 -f 1262/457/7 1261/458/7 1265/455/7 -f 1266/459/4 1267/460/4 1263/461/4 -f 1263/461/4 1262/462/4 1266/459/4 -f 1267/456/1 1268/455/1 1264/458/1 -f 1264/458/1 1263/457/1 1267/456/1 -f 1268/460/10 1265/459/10 1261/462/10 -f 1261/462/10 1264/461/10 1268/460/10 -f 1269/451/27 1270/452/27 1271/453/27 -f 1271/453/27 1272/454/27 1269/451/27 -f 1273/455/7 1274/456/7 1270/457/7 -f 1270/457/7 1269/458/7 1273/455/7 -f 1274/459/4 1275/460/4 1271/461/4 -f 1271/461/4 1270/462/4 1274/459/4 -f 1275/456/1 1276/455/1 1272/458/1 -f 1272/458/1 1271/457/1 1275/456/1 -f 1276/460/10 1273/459/10 1269/462/10 -f 1269/462/10 1272/461/10 1276/460/10 -f 1277/451/27 1278/452/27 1279/453/27 -f 1279/453/27 1280/454/27 1277/451/27 -f 1281/455/7 1282/456/7 1278/457/7 -f 1278/457/7 1277/458/7 1281/455/7 -f 1282/459/4 1283/460/4 1279/461/4 -f 1279/461/4 1278/462/4 1282/459/4 -f 1283/456/1 1284/455/1 1280/458/1 -f 1280/458/1 1279/457/1 1283/456/1 -f 1284/460/10 1281/459/10 1277/462/10 -f 1277/462/10 1280/461/10 1284/460/10 -f 1285/451/27 1286/452/27 1287/453/27 -f 1287/453/27 1288/454/27 1285/451/27 -f 1289/455/7 1290/456/7 1286/457/7 -f 1286/457/7 1285/458/7 1289/455/7 -f 1290/459/4 1291/460/4 1287/461/4 -f 1287/461/4 1286/462/4 1290/459/4 -f 1291/456/1 1292/455/1 1288/458/1 -f 1288/458/1 1287/457/1 1291/456/1 -f 1292/460/10 1289/459/10 1285/462/10 -f 1285/462/10 1288/461/10 1292/460/10 -f 1293/451/27 1294/452/27 1295/453/27 -f 1295/453/27 1296/454/27 1293/451/27 -f 1297/455/7 1298/456/7 1294/457/7 -f 1294/457/7 1293/458/7 1297/455/7 -f 1298/459/4 1299/460/4 1295/461/4 -f 1295/461/4 1294/462/4 1298/459/4 -f 1299/456/1 1300/455/1 1296/458/1 -f 1296/458/1 1295/457/1 1299/456/1 -f 1300/460/10 1297/459/10 1293/462/10 -f 1293/462/10 1296/461/10 1300/460/10 -f 1301/451/27 1302/452/27 1303/453/27 -f 1303/453/27 1304/454/27 1301/451/27 -f 1305/455/7 1306/456/7 1302/457/7 -f 1302/457/7 1301/458/7 1305/455/7 -f 1306/459/4 1307/460/4 1303/461/4 -f 1303/461/4 1302/462/4 1306/459/4 -f 1307/456/1 1308/455/1 1304/458/1 -f 1304/458/1 1303/457/1 1307/456/1 -f 1308/460/10 1305/459/10 1301/462/10 -f 1301/462/10 1304/461/10 1308/460/10 -f 1309/451/27 1310/452/27 1311/453/27 -f 1311/453/27 1312/454/27 1309/451/27 -f 1313/455/7 1314/456/7 1310/457/7 -f 1310/457/7 1309/458/7 1313/455/7 -f 1314/459/4 1315/460/4 1311/461/4 -f 1311/461/4 1310/462/4 1314/459/4 -f 1315/456/1 1316/455/1 1312/458/1 -f 1312/458/1 1311/457/1 1315/456/1 -f 1316/460/10 1313/459/10 1309/462/10 -f 1309/462/10 1312/461/10 1316/460/10 -f 1317/451/27 1318/452/27 1319/453/27 -f 1319/453/27 1320/454/27 1317/451/27 -f 1321/455/4 1322/456/4 1318/457/4 -f 1318/457/4 1317/458/4 1321/455/4 -f 1322/459/1 1323/460/1 1319/461/1 -f 1319/461/1 1318/462/1 1322/459/1 -f 1323/456/10 1324/455/10 1320/458/10 -f 1320/458/10 1319/457/10 1323/456/10 -f 1324/460/7 1321/459/7 1317/462/7 -f 1317/462/7 1320/461/7 1324/460/7 -f 1325/451/27 1326/452/27 1327/453/27 -f 1327/453/27 1328/454/27 1325/451/27 -f 1329/455/4 1330/456/4 1326/457/4 -f 1326/457/4 1325/458/4 1329/455/4 -f 1330/459/1 1331/460/1 1327/461/1 -f 1327/461/1 1326/462/1 1330/459/1 -f 1331/456/10 1332/455/10 1328/458/10 -f 1328/458/10 1327/457/10 1331/456/10 -f 1332/460/7 1329/459/7 1325/462/7 -f 1325/462/7 1328/461/7 1332/460/7 -f 1333/451/27 1334/452/27 1335/453/27 -f 1335/453/27 1336/454/27 1333/451/27 -f 1337/455/4 1338/456/4 1334/457/4 -f 1334/457/4 1333/458/4 1337/455/4 -f 1338/459/1 1339/460/1 1335/461/1 -f 1335/461/1 1334/462/1 1338/459/1 -f 1339/456/10 1340/455/10 1336/458/10 -f 1336/458/10 1335/457/10 1339/456/10 -f 1340/460/7 1337/459/7 1333/462/7 -f 1333/462/7 1336/461/7 1340/460/7 -f 1341/451/27 1342/452/27 1343/453/27 -f 1343/453/27 1344/454/27 1341/451/27 -f 1345/455/4 1346/456/4 1342/457/4 -f 1342/457/4 1341/458/4 1345/455/4 -f 1346/459/1 1347/460/1 1343/461/1 -f 1343/461/1 1342/462/1 1346/459/1 -f 1347/456/10 1348/455/10 1344/458/10 -f 1344/458/10 1343/457/10 1347/456/10 -f 1348/460/7 1345/459/7 1341/462/7 -f 1341/462/7 1344/461/7 1348/460/7 -f 1349/451/27 1350/452/27 1351/453/27 -f 1351/453/27 1352/454/27 1349/451/27 -f 1353/455/4 1354/456/4 1350/457/4 -f 1350/457/4 1349/458/4 1353/455/4 -f 1354/459/1 1355/460/1 1351/461/1 -f 1351/461/1 1350/462/1 1354/459/1 -f 1355/456/10 1356/455/10 1352/458/10 -f 1352/458/10 1351/457/10 1355/456/10 -f 1356/460/7 1353/459/7 1349/462/7 -f 1349/462/7 1352/461/7 1356/460/7 -f 1357/463/27 1358/464/27 1359/465/27 -f 1359/465/27 1360/466/27 1357/463/27 -f 1361/467/4 1362/468/4 1359/469/4 -f 1359/469/4 1358/470/4 1361/467/4 -f 1363/471/4 1364/472/4 1365/473/4 -f 1365/473/4 1366/474/4 1363/471/4 -f 1367/475/1 1368/476/1 1369/477/1 -f 1369/477/1 1370/478/1 1367/475/1 -f 1371/479/27 1372/480/288 1373/480/288 -f 1373/480/288 1374/479/27 1371/479/27 -f 1375/476/7 1376/475/7 1377/481/7 -f 1377/481/7 1378/482/7 1375/476/7 -f 1379/483/26 1380/484/289 1381/485/289 -f 1381/485/289 1382/483/26 1379/483/26 -f 1383/486/4 1384/487/4 1385/488/4 -f 1386/489/4 1387/490/4 1372/491/4 -f 1372/491/4 1371/492/4 1386/489/4 -f 1388/493/4 1389/494/4 1390/495/4 -f 1391/496/4 1392/497/4 1390/495/4 -f 1390/495/4 1389/494/4 1391/496/4 -f 1393/498/4 1394/499/4 1365/473/4 -f 1365/473/4 1364/472/4 1393/498/4 -f 1395/500/290 1371/479/27 1374/479/27 -f 1374/479/27 1396/500/290 1395/500/290 -f 1397/501/291 1379/483/26 1382/483/26 -f 1382/483/26 1398/501/291 1397/501/291 -f 1395/502/4 1399/503/4 1386/489/4 -f 1386/489/4 1371/492/4 1395/502/4 -f 1391/496/4 1383/486/4 1385/488/4 -f 1385/488/4 1392/497/4 1391/496/4 -f 1387/504/7 1363/504/7 1366/505/7 -f 1366/505/7 1400/505/7 1387/504/7 -f 1386/506/292 1364/506/292 1363/504/292 -f 1363/504/292 1387/504/292 1386/506/292 -f 1399/507/293 1393/507/293 1364/506/293 -f 1364/506/293 1386/506/293 1399/507/293 -f 1401/508/1 1394/508/1 1393/507/1 -f 1393/507/1 1399/507/1 1401/508/1 -f 1402/509/210 1365/510/210 1394/511/210 -f 1394/511/210 1401/512/210 1402/509/210 -f 1400/513/294 1366/514/294 1365/510/294 -f 1365/510/294 1402/509/294 1400/513/294 -f 1403/515/4 1401/516/4 1399/503/4 -f 1399/503/4 1395/502/4 1403/515/4 -f 1395/500/7 1396/500/7 1404/517/7 -f 1404/517/7 1403/517/7 1395/500/7 -f 1372/480/1 1405/518/1 1406/518/1 -f 1406/518/1 1373/480/1 1372/480/1 -f 1405/519/4 1372/491/4 1387/490/4 -f 1387/490/4 1400/474/4 1405/519/4 -f 1367/475/1 1407/481/1 1408/482/1 -f 1408/482/1 1368/476/1 1367/475/1 -f 1400/513/295 1385/513/295 1384/485/295 -f 1384/485/295 1405/520/295 1400/513/295 -f 1402/509/294 1392/509/294 1385/513/294 -f 1385/513/294 1400/513/294 1402/509/294 -f 1401/512/210 1390/512/210 1392/509/210 -f 1392/509/210 1402/509/210 1401/512/210 -f 1403/521/296 1388/521/296 1390/512/296 -f 1390/512/296 1401/512/296 1403/521/296 -f 1375/476/7 1409/477/7 1410/478/7 -f 1410/478/7 1376/475/7 1375/476/7 -f 1379/483/289 1391/522/289 1389/523/289 -f 1389/523/289 1380/484/289 1379/483/289 -f 1397/501/291 1383/524/291 1391/522/291 -f 1391/522/291 1379/483/291 1397/501/291 -f 1405/520/27 1367/525/27 1370/526/27 -f 1370/526/27 1406/527/27 1405/520/27 -f 1384/485/27 1407/528/27 1367/525/27 -f 1367/525/27 1405/520/27 1384/485/27 -f 1383/486/4 1408/486/4 1407/487/4 -f 1407/487/4 1384/487/4 1383/486/4 -f 1397/501/26 1368/501/26 1408/524/26 -f 1408/524/26 1383/524/26 1397/501/26 -f 1398/501/26 1369/501/26 1368/501/26 -f 1368/501/26 1397/501/26 1398/501/26 -f 1380/484/26 1375/484/26 1378/485/26 -f 1378/485/26 1381/485/26 1380/484/26 -f 1389/523/26 1409/523/26 1375/484/26 -f 1375/484/26 1380/484/26 1389/523/26 -f 1388/493/4 1410/529/4 1409/530/4 -f 1409/530/4 1389/494/4 1388/493/4 -f 1403/521/27 1376/531/27 1410/532/27 -f 1410/532/27 1388/521/27 1403/521/27 -f 1404/533/27 1377/531/27 1376/531/27 -f 1376/531/27 1403/521/27 1404/533/27 -f 1411/471/4 1412/472/4 1413/473/4 -f 1413/473/4 1414/474/4 1411/471/4 -f 1415/475/1 1416/476/1 1417/477/1 -f 1417/477/1 1418/478/1 1415/475/1 -f 1419/479/27 1420/480/288 1421/480/288 -f 1421/480/288 1422/479/27 1419/479/27 -f 1423/476/7 1424/475/7 1425/481/7 -f 1425/481/7 1426/482/7 1423/476/7 -f 1427/483/26 1428/484/289 1429/485/289 -f 1429/485/289 1430/483/26 1427/483/26 -f 1431/486/4 1432/487/4 1433/488/4 -f 1434/489/4 1435/490/4 1420/491/4 -f 1420/491/4 1419/492/4 1434/489/4 -f 1436/493/4 1437/494/4 1438/495/4 -f 1439/496/4 1440/497/4 1438/495/4 -f 1438/495/4 1437/494/4 1439/496/4 -f 1441/498/4 1442/499/4 1413/473/4 -f 1413/473/4 1412/472/4 1441/498/4 -f 1443/500/290 1419/479/27 1422/479/27 -f 1422/479/27 1444/500/290 1443/500/290 -f 1445/501/291 1427/483/26 1430/483/26 -f 1430/483/26 1446/501/291 1445/501/291 -f 1443/502/4 1447/503/4 1434/489/4 -f 1434/489/4 1419/492/4 1443/502/4 -f 1439/496/4 1431/486/4 1433/488/4 -f 1433/488/4 1440/497/4 1439/496/4 -f 1435/504/7 1411/504/7 1414/505/7 -f 1414/505/7 1448/505/7 1435/504/7 -f 1434/506/292 1412/506/292 1411/504/292 -f 1411/504/292 1435/504/292 1434/506/292 -f 1447/507/293 1441/507/293 1412/506/293 -f 1412/506/293 1434/506/293 1447/507/293 -f 1449/508/1 1442/508/1 1441/507/1 -f 1441/507/1 1447/507/1 1449/508/1 -f 1450/509/210 1413/510/210 1442/511/210 -f 1442/511/210 1449/512/210 1450/509/210 -f 1448/513/294 1414/514/294 1413/510/294 -f 1413/510/294 1450/509/294 1448/513/294 -f 1451/515/4 1449/516/4 1447/503/4 -f 1447/503/4 1443/502/4 1451/515/4 -f 1443/500/7 1444/500/7 1452/517/7 -f 1452/517/7 1451/517/7 1443/500/7 -f 1420/480/1 1453/518/1 1454/518/1 -f 1454/518/1 1421/480/1 1420/480/1 -f 1453/519/4 1420/491/4 1435/490/4 -f 1435/490/4 1448/474/4 1453/519/4 -f 1415/475/1 1455/481/1 1456/482/1 -f 1456/482/1 1416/476/1 1415/475/1 -f 1448/513/295 1433/513/295 1432/485/295 -f 1432/485/295 1453/520/295 1448/513/295 -f 1450/509/294 1440/509/294 1433/513/294 -f 1433/513/294 1448/513/294 1450/509/294 -f 1449/512/210 1438/512/210 1440/509/210 -f 1440/509/210 1450/509/210 1449/512/210 -f 1451/521/296 1436/521/296 1438/512/296 -f 1438/512/296 1449/512/296 1451/521/296 -f 1423/476/7 1457/477/7 1458/478/7 -f 1458/478/7 1424/475/7 1423/476/7 -f 1427/483/289 1439/522/289 1437/523/289 -f 1437/523/289 1428/484/289 1427/483/289 -f 1445/501/291 1431/524/291 1439/522/291 -f 1439/522/291 1427/483/291 1445/501/291 -f 1453/520/27 1415/525/27 1418/526/27 -f 1418/526/27 1454/527/27 1453/520/27 -f 1432/485/27 1455/528/27 1415/525/27 -f 1415/525/27 1453/520/27 1432/485/27 -f 1431/486/4 1456/486/4 1455/487/4 -f 1455/487/4 1432/487/4 1431/486/4 -f 1445/501/26 1416/501/26 1456/524/26 -f 1456/524/26 1431/524/26 1445/501/26 -f 1446/501/26 1417/501/26 1416/501/26 -f 1416/501/26 1445/501/26 1446/501/26 -f 1428/484/26 1423/484/26 1426/485/26 -f 1426/485/26 1429/485/26 1428/484/26 -f 1437/523/26 1457/523/26 1423/484/26 -f 1423/484/26 1428/484/26 1437/523/26 -f 1436/493/4 1458/529/4 1457/530/4 -f 1457/530/4 1437/494/4 1436/493/4 -f 1451/521/27 1424/531/27 1458/532/27 -f 1458/532/27 1436/521/27 1451/521/27 -f 1452/533/27 1425/531/27 1424/531/27 -f 1424/531/27 1451/521/27 1452/533/27 -f 1459/471/4 1460/472/4 1461/473/4 -f 1461/473/4 1462/474/4 1459/471/4 -f 1463/475/1 1464/476/1 1465/477/1 -f 1465/477/1 1466/478/1 1463/475/1 -f 1467/479/27 1468/480/288 1469/480/288 -f 1469/480/288 1470/479/27 1467/479/27 -f 1471/476/7 1472/475/7 1473/481/7 -f 1473/481/7 1474/482/7 1471/476/7 -f 1475/483/26 1476/484/289 1477/485/289 -f 1477/485/289 1478/483/26 1475/483/26 -f 1479/486/4 1480/487/4 1481/488/4 -f 1482/489/4 1483/490/4 1468/491/4 -f 1468/491/4 1467/492/4 1482/489/4 -f 1484/493/4 1485/494/4 1486/495/4 -f 1487/496/4 1488/497/4 1486/495/4 -f 1486/495/4 1485/494/4 1487/496/4 -f 1489/498/4 1490/499/4 1461/473/4 -f 1461/473/4 1460/472/4 1489/498/4 -f 1491/500/290 1467/479/27 1470/479/27 -f 1470/479/27 1492/500/290 1491/500/290 -f 1493/501/291 1475/483/26 1478/483/26 -f 1478/483/26 1494/501/291 1493/501/291 -f 1491/502/4 1495/503/4 1482/489/4 -f 1482/489/4 1467/492/4 1491/502/4 -f 1487/496/4 1479/486/4 1481/488/4 -f 1481/488/4 1488/497/4 1487/496/4 -f 1483/504/7 1459/504/7 1462/505/7 -f 1462/505/7 1496/505/7 1483/504/7 -f 1482/506/292 1460/506/292 1459/504/292 -f 1459/504/292 1483/504/292 1482/506/292 -f 1495/507/293 1489/507/293 1460/506/293 -f 1460/506/293 1482/506/293 1495/507/293 -f 1497/508/1 1490/508/1 1489/507/1 -f 1489/507/1 1495/507/1 1497/508/1 -f 1498/509/210 1461/510/210 1490/511/210 -f 1490/511/210 1497/512/210 1498/509/210 -f 1496/513/294 1462/514/294 1461/510/294 -f 1461/510/294 1498/509/294 1496/513/294 -f 1499/515/4 1497/516/4 1495/503/4 -f 1495/503/4 1491/502/4 1499/515/4 -f 1491/500/7 1492/500/7 1500/517/7 -f 1500/517/7 1499/517/7 1491/500/7 -f 1468/480/1 1501/518/1 1502/518/1 -f 1502/518/1 1469/480/1 1468/480/1 -f 1501/519/4 1468/491/4 1483/490/4 -f 1483/490/4 1496/474/4 1501/519/4 -f 1463/475/1 1503/481/1 1504/482/1 -f 1504/482/1 1464/476/1 1463/475/1 -f 1496/513/295 1481/513/295 1480/485/295 -f 1480/485/295 1501/520/295 1496/513/295 -f 1498/509/294 1488/509/294 1481/513/294 -f 1481/513/294 1496/513/294 1498/509/294 -f 1497/512/210 1486/512/210 1488/509/210 -f 1488/509/210 1498/509/210 1497/512/210 -f 1499/521/296 1484/521/296 1486/512/296 -f 1486/512/296 1497/512/296 1499/521/296 -f 1471/476/7 1505/477/7 1506/478/7 -f 1506/478/7 1472/475/7 1471/476/7 -f 1475/483/289 1487/522/289 1485/523/289 -f 1485/523/289 1476/484/289 1475/483/289 -f 1493/501/291 1479/524/291 1487/522/291 -f 1487/522/291 1475/483/291 1493/501/291 -f 1501/520/27 1463/525/27 1466/526/27 -f 1466/526/27 1502/527/27 1501/520/27 -f 1480/485/27 1503/528/27 1463/525/27 -f 1463/525/27 1501/520/27 1480/485/27 -f 1479/486/4 1504/486/4 1503/487/4 -f 1503/487/4 1480/487/4 1479/486/4 -f 1493/501/26 1464/501/26 1504/524/26 -f 1504/524/26 1479/524/26 1493/501/26 -f 1494/501/26 1465/501/26 1464/501/26 -f 1464/501/26 1493/501/26 1494/501/26 -f 1476/484/26 1471/484/26 1474/485/26 -f 1474/485/26 1477/485/26 1476/484/26 -f 1485/523/26 1505/523/26 1471/484/26 -f 1471/484/26 1476/484/26 1485/523/26 -f 1484/493/4 1506/529/4 1505/530/4 -f 1505/530/4 1485/494/4 1484/493/4 -f 1499/521/27 1472/531/27 1506/532/27 -f 1506/532/27 1484/521/27 1499/521/27 -f 1500/533/27 1473/531/27 1472/531/27 -f 1472/531/27 1499/521/27 1500/533/27 -f 1507/471/4 1508/472/4 1509/473/4 -f 1509/473/4 1510/474/4 1507/471/4 -f 1511/475/1 1512/476/1 1513/477/1 -f 1513/477/1 1514/478/1 1511/475/1 -f 1515/479/27 1516/480/288 1517/480/288 -f 1517/480/288 1518/479/27 1515/479/27 -f 1519/476/7 1520/475/7 1521/481/7 -f 1521/481/7 1522/482/7 1519/476/7 -f 1523/483/26 1524/484/289 1525/485/289 -f 1525/485/289 1526/483/26 1523/483/26 -f 1527/486/4 1528/487/4 1529/488/4 -f 1530/489/4 1531/490/4 1516/491/4 -f 1516/491/4 1515/492/4 1530/489/4 -f 1532/493/4 1533/494/4 1534/495/4 -f 1535/496/4 1536/497/4 1534/495/4 -f 1534/495/4 1533/494/4 1535/496/4 -f 1537/498/4 1538/499/4 1509/473/4 -f 1509/473/4 1508/472/4 1537/498/4 -f 1539/500/290 1515/479/27 1518/479/27 -f 1518/479/27 1540/500/290 1539/500/290 -f 1541/501/291 1523/483/26 1526/483/26 -f 1526/483/26 1542/501/291 1541/501/291 -f 1539/502/4 1543/503/4 1530/489/4 -f 1530/489/4 1515/492/4 1539/502/4 -f 1535/496/4 1527/486/4 1529/488/4 -f 1529/488/4 1536/497/4 1535/496/4 -f 1531/504/7 1507/504/7 1510/505/7 -f 1510/505/7 1544/505/7 1531/504/7 -f 1530/506/292 1508/506/292 1507/504/292 -f 1507/504/292 1531/504/292 1530/506/292 -f 1543/507/293 1537/507/293 1508/506/293 -f 1508/506/293 1530/506/293 1543/507/293 -f 1545/508/1 1538/508/1 1537/507/1 -f 1537/507/1 1543/507/1 1545/508/1 -f 1546/509/210 1509/510/210 1538/511/210 -f 1538/511/210 1545/512/210 1546/509/210 -f 1544/513/294 1510/514/294 1509/510/294 -f 1509/510/294 1546/509/294 1544/513/294 -f 1547/515/4 1545/516/4 1543/503/4 -f 1543/503/4 1539/502/4 1547/515/4 -f 1539/500/7 1540/500/7 1548/517/7 -f 1548/517/7 1547/517/7 1539/500/7 -f 1516/480/1 1549/518/1 1550/518/1 -f 1550/518/1 1517/480/1 1516/480/1 -f 1549/519/4 1516/491/4 1531/490/4 -f 1531/490/4 1544/474/4 1549/519/4 -f 1511/475/1 1551/481/1 1552/482/1 -f 1552/482/1 1512/476/1 1511/475/1 -f 1544/513/295 1529/513/295 1528/485/295 -f 1528/485/295 1549/520/295 1544/513/295 -f 1546/509/294 1536/509/294 1529/513/294 -f 1529/513/294 1544/513/294 1546/509/294 -f 1545/512/210 1534/512/210 1536/509/210 -f 1536/509/210 1546/509/210 1545/512/210 -f 1547/521/296 1532/521/296 1534/512/296 -f 1534/512/296 1545/512/296 1547/521/296 -f 1519/476/7 1553/477/7 1554/478/7 -f 1554/478/7 1520/475/7 1519/476/7 -f 1523/483/289 1535/522/289 1533/523/289 -f 1533/523/289 1524/484/289 1523/483/289 -f 1541/501/291 1527/524/291 1535/522/291 -f 1535/522/291 1523/483/291 1541/501/291 -f 1549/520/27 1511/525/27 1514/526/27 -f 1514/526/27 1550/527/27 1549/520/27 -f 1528/485/27 1551/528/27 1511/525/27 -f 1511/525/27 1549/520/27 1528/485/27 -f 1527/486/4 1552/486/4 1551/487/4 -f 1551/487/4 1528/487/4 1527/486/4 -f 1541/501/26 1512/501/26 1552/524/26 -f 1552/524/26 1527/524/26 1541/501/26 -f 1542/501/26 1513/501/26 1512/501/26 -f 1512/501/26 1541/501/26 1542/501/26 -f 1524/484/26 1519/484/26 1522/485/26 -f 1522/485/26 1525/485/26 1524/484/26 -f 1533/523/26 1553/523/26 1519/484/26 -f 1519/484/26 1524/484/26 1533/523/26 -f 1532/493/4 1554/529/4 1553/530/4 -f 1553/530/4 1533/494/4 1532/493/4 -f 1547/521/27 1520/531/27 1554/532/27 -f 1554/532/27 1532/521/27 1547/521/27 -f 1548/533/27 1521/531/27 1520/531/27 -f 1520/531/27 1547/521/27 1548/533/27 -f 1555/471/4 1556/472/4 1557/473/4 -f 1557/473/4 1558/474/4 1555/471/4 -f 1559/475/1 1560/476/1 1561/477/1 -f 1561/477/1 1562/478/1 1559/475/1 -f 1563/479/27 1564/480/288 1565/480/288 -f 1565/480/288 1566/479/27 1563/479/27 -f 1567/476/7 1568/475/7 1569/481/7 -f 1569/481/7 1570/482/7 1567/476/7 -f 1571/483/26 1572/484/289 1573/485/289 -f 1573/485/289 1574/483/26 1571/483/26 -f 1575/486/4 1576/487/4 1577/488/4 -f 1578/489/4 1579/490/4 1564/491/4 -f 1564/491/4 1563/492/4 1578/489/4 -f 1580/493/4 1581/494/4 1582/495/4 -f 1583/496/4 1584/497/4 1582/495/4 -f 1582/495/4 1581/494/4 1583/496/4 -f 1585/498/4 1586/499/4 1557/473/4 -f 1557/473/4 1556/472/4 1585/498/4 -f 1587/500/290 1563/479/27 1566/479/27 -f 1566/479/27 1588/500/290 1587/500/290 -f 1589/501/291 1571/483/26 1574/483/26 -f 1574/483/26 1590/501/291 1589/501/291 -f 1587/502/4 1591/503/4 1578/489/4 -f 1578/489/4 1563/492/4 1587/502/4 -f 1583/496/4 1575/486/4 1577/488/4 -f 1577/488/4 1584/497/4 1583/496/4 -f 1579/504/7 1555/504/7 1558/505/7 -f 1558/505/7 1592/505/7 1579/504/7 -f 1578/506/292 1556/506/292 1555/504/292 -f 1555/504/292 1579/504/292 1578/506/292 -f 1591/507/293 1585/507/293 1556/506/293 -f 1556/506/293 1578/506/293 1591/507/293 -f 1593/508/1 1586/508/1 1585/507/1 -f 1585/507/1 1591/507/1 1593/508/1 -f 1594/509/210 1557/510/210 1586/511/210 -f 1586/511/210 1593/512/210 1594/509/210 -f 1592/513/294 1558/514/294 1557/510/294 -f 1557/510/294 1594/509/294 1592/513/294 -f 1595/515/4 1593/516/4 1591/503/4 -f 1591/503/4 1587/502/4 1595/515/4 -f 1587/500/7 1588/500/7 1596/517/7 -f 1596/517/7 1595/517/7 1587/500/7 -f 1564/480/1 1597/518/1 1598/518/1 -f 1598/518/1 1565/480/1 1564/480/1 -f 1597/519/4 1564/491/4 1579/490/4 -f 1579/490/4 1592/474/4 1597/519/4 -f 1559/475/1 1599/481/1 1600/482/1 -f 1600/482/1 1560/476/1 1559/475/1 -f 1592/513/295 1577/513/295 1576/485/295 -f 1576/485/295 1597/520/295 1592/513/295 -f 1594/509/294 1584/509/294 1577/513/294 -f 1577/513/294 1592/513/294 1594/509/294 -f 1593/512/210 1582/512/210 1584/509/210 -f 1584/509/210 1594/509/210 1593/512/210 -f 1595/521/296 1580/521/296 1582/512/296 -f 1582/512/296 1593/512/296 1595/521/296 -f 1567/476/7 1601/477/7 1602/478/7 -f 1602/478/7 1568/475/7 1567/476/7 -f 1571/483/289 1583/522/289 1581/523/289 -f 1581/523/289 1572/484/289 1571/483/289 -f 1589/501/291 1575/524/291 1583/522/291 -f 1583/522/291 1571/483/291 1589/501/291 -f 1597/520/27 1559/525/27 1562/526/27 -f 1562/526/27 1598/527/27 1597/520/27 -f 1576/485/27 1599/528/27 1559/525/27 -f 1559/525/27 1597/520/27 1576/485/27 -f 1575/486/4 1600/486/4 1599/487/4 -f 1599/487/4 1576/487/4 1575/486/4 -f 1589/501/26 1560/501/26 1600/524/26 -f 1600/524/26 1575/524/26 1589/501/26 -f 1590/501/26 1561/501/26 1560/501/26 -f 1560/501/26 1589/501/26 1590/501/26 -f 1572/484/26 1567/484/26 1570/485/26 -f 1570/485/26 1573/485/26 1572/484/26 -f 1581/523/26 1601/523/26 1567/484/26 -f 1567/484/26 1572/484/26 1581/523/26 -f 1580/493/4 1602/529/4 1601/530/4 -f 1601/530/4 1581/494/4 1580/493/4 -f 1595/521/27 1568/531/27 1602/532/27 -f 1602/532/27 1580/521/27 1595/521/27 -f 1596/533/27 1569/531/27 1568/531/27 -f 1568/531/27 1595/521/27 1596/533/27 -f 1603/471/4 1604/472/4 1605/473/4 -f 1605/473/4 1606/474/4 1603/471/4 -f 1607/475/1 1608/476/1 1609/477/1 -f 1609/477/1 1610/478/1 1607/475/1 -f 1611/479/27 1612/480/288 1613/480/288 -f 1613/480/288 1614/479/27 1611/479/27 -f 1615/476/7 1616/475/7 1617/481/7 -f 1617/481/7 1618/482/7 1615/476/7 -f 1619/483/26 1620/484/289 1621/485/289 -f 1621/485/289 1622/483/26 1619/483/26 -f 1623/486/4 1624/487/4 1625/488/4 -f 1626/489/4 1627/490/4 1612/491/4 -f 1612/491/4 1611/492/4 1626/489/4 -f 1628/493/4 1629/494/4 1630/495/4 -f 1631/496/4 1632/497/4 1630/495/4 -f 1630/495/4 1629/494/4 1631/496/4 -f 1633/498/4 1634/499/4 1605/473/4 -f 1605/473/4 1604/472/4 1633/498/4 -f 1635/500/290 1611/479/27 1614/479/27 -f 1614/479/27 1636/500/290 1635/500/290 -f 1637/501/291 1619/483/26 1622/483/26 -f 1622/483/26 1638/501/291 1637/501/291 -f 1635/502/4 1639/503/4 1626/489/4 -f 1626/489/4 1611/492/4 1635/502/4 -f 1631/496/4 1623/486/4 1625/488/4 -f 1625/488/4 1632/497/4 1631/496/4 -f 1627/504/7 1603/504/7 1606/505/7 -f 1606/505/7 1640/505/7 1627/504/7 -f 1626/506/292 1604/506/292 1603/504/292 -f 1603/504/292 1627/504/292 1626/506/292 -f 1639/507/293 1633/507/293 1604/506/293 -f 1604/506/293 1626/506/293 1639/507/293 -f 1641/508/1 1634/508/1 1633/507/1 -f 1633/507/1 1639/507/1 1641/508/1 -f 1642/509/210 1605/510/210 1634/511/210 -f 1634/511/210 1641/512/210 1642/509/210 -f 1640/513/294 1606/514/294 1605/510/294 -f 1605/510/294 1642/509/294 1640/513/294 -f 1643/515/4 1641/516/4 1639/503/4 -f 1639/503/4 1635/502/4 1643/515/4 -f 1635/500/7 1636/500/7 1644/517/7 -f 1644/517/7 1643/517/7 1635/500/7 -f 1612/480/1 1645/518/1 1646/518/1 -f 1646/518/1 1613/480/1 1612/480/1 -f 1645/519/4 1612/491/4 1627/490/4 -f 1627/490/4 1640/474/4 1645/519/4 -f 1607/475/1 1647/481/1 1648/482/1 -f 1648/482/1 1608/476/1 1607/475/1 -f 1640/513/295 1625/513/295 1624/485/295 -f 1624/485/295 1645/520/295 1640/513/295 -f 1642/509/294 1632/509/294 1625/513/294 -f 1625/513/294 1640/513/294 1642/509/294 -f 1641/512/210 1630/512/210 1632/509/210 -f 1632/509/210 1642/509/210 1641/512/210 -f 1643/521/296 1628/521/296 1630/512/296 -f 1630/512/296 1641/512/296 1643/521/296 -f 1615/476/7 1649/477/7 1650/478/7 -f 1650/478/7 1616/475/7 1615/476/7 -f 1619/483/289 1631/522/289 1629/523/289 -f 1629/523/289 1620/484/289 1619/483/289 -f 1637/501/291 1623/524/291 1631/522/297 -f 1631/522/297 1619/483/297 1637/501/291 -f 1645/520/27 1607/525/27 1610/526/27 -f 1610/526/27 1646/527/27 1645/520/27 -f 1624/485/27 1647/528/27 1607/525/27 -f 1607/525/27 1645/520/27 1624/485/27 -f 1623/486/4 1648/486/4 1647/487/4 -f 1647/487/4 1624/487/4 1623/486/4 -f 1637/501/26 1608/501/26 1648/524/26 -f 1648/524/26 1623/524/26 1637/501/26 -f 1638/501/26 1609/501/26 1608/501/26 -f 1608/501/26 1637/501/26 1638/501/26 -f 1620/484/26 1615/484/26 1618/485/26 -f 1618/485/26 1621/485/26 1620/484/26 -f 1629/523/26 1649/523/26 1615/484/26 -f 1615/484/26 1620/484/26 1629/523/26 -f 1628/493/4 1650/529/4 1649/530/4 -f 1649/530/4 1629/494/4 1628/493/4 -f 1643/521/27 1616/531/27 1650/532/27 -f 1650/532/27 1628/521/27 1643/521/27 -f 1644/533/27 1617/531/27 1616/531/27 -f 1616/531/27 1643/521/27 1644/533/27 -f 1651/471/4 1652/472/4 1653/473/4 -f 1653/473/4 1654/474/4 1651/471/4 -f 1655/475/1 1656/476/1 1657/477/1 -f 1657/477/1 1658/478/1 1655/475/1 -f 1659/479/27 1660/480/288 1661/480/288 -f 1661/480/288 1662/479/27 1659/479/27 -f 1663/476/7 1664/475/7 1665/481/7 -f 1665/481/7 1666/482/7 1663/476/7 -f 1667/483/26 1668/484/289 1669/485/289 -f 1669/485/289 1670/483/26 1667/483/26 -f 1671/486/4 1672/487/4 1673/488/4 -f 1674/489/4 1675/490/4 1660/491/4 -f 1660/491/4 1659/492/4 1674/489/4 -f 1676/493/4 1677/494/4 1678/495/4 -f 1679/496/4 1680/497/4 1678/495/4 -f 1678/495/4 1677/494/4 1679/496/4 -f 1681/498/4 1682/499/4 1653/473/4 -f 1653/473/4 1652/472/4 1681/498/4 -f 1683/500/290 1659/479/27 1662/479/27 -f 1662/479/27 1684/500/290 1683/500/290 -f 1685/501/291 1667/483/26 1670/483/26 -f 1670/483/26 1686/501/291 1685/501/291 -f 1683/502/4 1687/503/4 1674/489/4 -f 1674/489/4 1659/492/4 1683/502/4 -f 1679/496/4 1671/486/4 1673/488/4 -f 1673/488/4 1680/497/4 1679/496/4 -f 1675/504/7 1651/504/7 1654/505/7 -f 1654/505/7 1688/505/7 1675/504/7 -f 1674/506/292 1652/506/292 1651/504/292 -f 1651/504/292 1675/504/292 1674/506/292 -f 1687/507/293 1681/507/293 1652/506/293 -f 1652/506/293 1674/506/293 1687/507/293 -f 1689/508/1 1682/508/1 1681/507/1 -f 1681/507/1 1687/507/1 1689/508/1 -f 1690/509/210 1653/510/210 1682/511/210 -f 1682/511/210 1689/512/210 1690/509/210 -f 1688/513/294 1654/514/294 1653/510/294 -f 1653/510/294 1690/509/294 1688/513/294 -f 1691/515/4 1689/516/4 1687/503/4 -f 1687/503/4 1683/502/4 1691/515/4 -f 1683/500/7 1684/500/7 1692/517/7 -f 1692/517/7 1691/517/7 1683/500/7 -f 1660/480/1 1693/518/1 1694/518/1 -f 1694/518/1 1661/480/1 1660/480/1 -f 1693/519/4 1660/491/4 1675/490/4 -f 1675/490/4 1688/474/4 1693/519/4 -f 1655/475/1 1695/481/1 1696/482/1 -f 1696/482/1 1656/476/1 1655/475/1 -f 1688/513/295 1673/513/295 1672/485/295 -f 1672/485/295 1693/520/295 1688/513/295 -f 1690/509/294 1680/509/294 1673/513/294 -f 1673/513/294 1688/513/294 1690/509/294 -f 1689/512/210 1678/512/210 1680/509/210 -f 1680/509/210 1690/509/210 1689/512/210 -f 1691/521/296 1676/521/296 1678/512/296 -f 1678/512/296 1689/512/296 1691/521/296 -f 1663/476/7 1697/477/7 1698/478/7 -f 1698/478/7 1664/475/7 1663/476/7 -f 1667/483/298 1679/522/298 1677/523/289 -f 1677/523/289 1668/484/289 1667/483/298 -f 1685/501/291 1671/524/291 1679/522/297 -f 1679/522/297 1667/483/297 1685/501/291 -f 1693/520/27 1655/525/27 1658/526/27 -f 1658/526/27 1694/527/27 1693/520/27 -f 1672/485/27 1695/528/27 1655/525/27 -f 1655/525/27 1693/520/27 1672/485/27 -f 1671/486/4 1696/486/4 1695/487/4 -f 1695/487/4 1672/487/4 1671/486/4 -f 1685/501/26 1656/501/26 1696/524/26 -f 1696/524/26 1671/524/26 1685/501/26 -f 1686/501/26 1657/501/26 1656/501/26 -f 1656/501/26 1685/501/26 1686/501/26 -f 1668/484/26 1663/484/26 1666/485/26 -f 1666/485/26 1669/485/26 1668/484/26 -f 1677/523/26 1697/523/26 1663/484/26 -f 1663/484/26 1668/484/26 1677/523/26 -f 1676/493/4 1698/529/4 1697/530/4 -f 1697/530/4 1677/494/4 1676/493/4 -f 1691/521/27 1664/531/27 1698/532/27 -f 1698/532/27 1676/521/27 1691/521/27 -f 1692/533/27 1665/531/27 1664/531/27 -f 1664/531/27 1691/521/27 1692/533/27 -f 1699/471/1 1700/472/1 1701/473/1 -f 1701/473/1 1702/474/1 1699/471/1 -f 1703/475/10 1704/476/10 1705/477/10 -f 1705/477/10 1706/478/10 1703/475/10 -f 1707/479/27 1708/480/299 1709/480/299 -f 1709/480/299 1710/479/27 1707/479/27 -f 1711/476/4 1712/475/4 1713/481/4 -f 1713/481/4 1714/482/4 1711/476/4 -f 1715/483/26 1716/484/300 1717/485/300 -f 1717/485/300 1718/483/26 1715/483/26 -f 1719/486/1 1720/487/1 1721/488/1 -f 1722/489/1 1723/490/1 1708/491/1 -f 1708/491/1 1707/492/1 1722/489/1 -f 1724/493/1 1725/494/1 1726/495/1 -f 1727/496/1 1728/497/1 1726/495/1 -f 1726/495/1 1725/494/1 1727/496/1 -f 1729/498/1 1730/499/1 1701/473/1 -f 1701/473/1 1700/472/1 1729/498/1 -f 1731/500/301 1707/479/27 1710/479/27 -f 1710/479/27 1732/500/301 1731/500/301 -f 1733/501/302 1715/483/26 1718/483/26 -f 1718/483/26 1734/501/302 1733/501/302 -f 1731/502/1 1735/503/1 1722/489/1 -f 1722/489/1 1707/492/1 1731/502/1 -f 1727/496/1 1719/486/1 1721/488/1 -f 1721/488/1 1728/497/1 1727/496/1 -f 1723/504/4 1699/504/4 1702/505/4 -f 1702/505/4 1736/505/4 1723/504/4 -f 1722/506/303 1700/506/303 1699/504/303 -f 1699/504/303 1723/504/303 1722/506/303 -f 1735/507/304 1729/507/304 1700/506/304 -f 1700/506/304 1722/506/304 1735/507/304 -f 1737/508/10 1730/508/10 1729/507/10 -f 1729/507/10 1735/507/10 1737/508/10 -f 1738/509/305 1701/510/305 1730/511/305 -f 1730/511/305 1737/512/305 1738/509/305 -f 1736/513/306 1702/514/306 1701/510/306 -f 1701/510/306 1738/509/306 1736/513/306 -f 1739/515/1 1737/516/1 1735/503/1 -f 1735/503/1 1731/502/1 1739/515/1 -f 1731/500/4 1732/500/4 1740/517/4 -f 1740/517/4 1739/517/4 1731/500/4 -f 1708/480/10 1741/518/10 1742/518/10 -f 1742/518/10 1709/480/10 1708/480/10 -f 1741/519/1 1708/491/1 1723/490/1 -f 1723/490/1 1736/474/1 1741/519/1 -f 1703/475/10 1743/481/10 1744/482/10 -f 1744/482/10 1704/476/10 1703/475/10 -f 1736/513/307 1721/513/307 1720/485/307 -f 1720/485/307 1741/520/307 1736/513/307 -f 1738/509/306 1728/509/306 1721/513/306 -f 1721/513/306 1736/513/306 1738/509/306 -f 1737/512/305 1726/512/305 1728/509/305 -f 1728/509/305 1738/509/305 1737/512/305 -f 1739/521/308 1724/521/308 1726/512/308 -f 1726/512/308 1737/512/308 1739/521/308 -f 1711/476/4 1745/477/4 1746/478/4 -f 1746/478/4 1712/475/4 1711/476/4 -f 1715/483/300 1727/522/300 1725/523/300 -f 1725/523/300 1716/484/300 1715/483/300 -f 1733/501/302 1719/524/302 1727/522/302 -f 1727/522/302 1715/483/302 1733/501/302 -f 1741/520/27 1703/525/27 1706/526/27 -f 1706/526/27 1742/527/27 1741/520/27 -f 1720/485/27 1743/528/27 1703/525/27 -f 1703/525/27 1741/520/27 1720/485/27 -f 1719/486/1 1744/486/1 1743/487/1 -f 1743/487/1 1720/487/1 1719/486/1 -f 1733/501/26 1704/501/26 1744/524/26 -f 1744/524/26 1719/524/26 1733/501/26 -f 1734/501/26 1705/501/26 1704/501/26 -f 1704/501/26 1733/501/26 1734/501/26 -f 1716/484/26 1711/484/26 1714/485/26 -f 1714/485/26 1717/485/26 1716/484/26 -f 1725/523/26 1745/523/26 1711/484/26 -f 1711/484/26 1716/484/26 1725/523/26 -f 1724/493/1 1746/529/1 1745/530/1 -f 1745/530/1 1725/494/1 1724/493/1 -f 1739/521/27 1712/531/27 1746/532/27 -f 1746/532/27 1724/521/27 1739/521/27 -f 1740/533/27 1713/531/27 1712/531/27 -f 1712/531/27 1739/521/27 1740/533/27 -f 1747/471/1 1748/474/1 1749/473/1 -f 1749/473/1 1750/472/1 1747/471/1 -f 1751/475/4 1752/478/4 1753/477/4 -f 1753/477/4 1754/476/4 1751/475/4 -f 1755/479/27 1756/479/27 1757/480/301 -f 1757/480/301 1758/480/301 1755/479/27 -f 1759/476/10 1760/482/10 1761/481/10 -f 1761/481/10 1762/475/10 1759/476/10 -f 1763/483/26 1764/483/26 1765/485/302 -f 1765/485/302 1766/484/302 1763/483/26 -f 1767/486/1 1768/488/1 1769/487/1 -f 1770/489/1 1755/492/1 1758/491/1 -f 1758/491/1 1771/490/1 1770/489/1 -f 1772/493/1 1773/495/1 1774/494/1 -f 1775/496/1 1774/494/1 1773/495/1 -f 1773/495/1 1776/497/1 1775/496/1 -f 1777/498/1 1750/472/1 1749/473/1 -f 1749/473/1 1778/499/1 1777/498/1 -f 1779/500/299 1780/500/299 1756/479/27 -f 1756/479/27 1755/479/27 1779/500/299 -f 1781/501/300 1782/501/300 1764/483/26 -f 1764/483/26 1763/483/26 1781/501/300 -f 1779/502/1 1755/492/1 1770/489/1 -f 1770/489/1 1783/503/1 1779/502/1 -f 1775/496/1 1776/497/1 1768/488/1 -f 1768/488/1 1767/486/1 1775/496/1 -f 1771/504/10 1784/505/10 1748/505/10 -f 1748/505/10 1747/504/10 1771/504/10 -f 1770/506/304 1771/504/304 1747/504/304 -f 1747/504/304 1750/506/304 1770/506/304 -f 1783/507/303 1770/506/303 1750/506/303 -f 1750/506/303 1777/507/303 1783/507/303 -f 1785/508/4 1783/507/4 1777/507/4 -f 1777/507/4 1778/508/4 1785/508/4 -f 1786/509/309 1785/512/309 1778/511/309 -f 1778/511/309 1749/510/309 1786/509/309 -f 1784/513/310 1786/509/310 1749/510/310 -f 1749/510/310 1748/514/310 1784/513/310 -f 1787/515/1 1779/502/1 1783/503/1 -f 1783/503/1 1785/516/1 1787/515/1 -f 1779/500/10 1787/517/10 1788/517/10 -f 1788/517/10 1780/500/10 1779/500/10 -f 1758/480/4 1757/480/4 1789/518/4 -f 1789/518/4 1790/518/4 1758/480/4 -f 1790/519/1 1784/474/1 1771/490/1 -f 1771/490/1 1758/491/1 1790/519/1 -f 1751/475/4 1754/476/4 1791/482/4 -f 1791/482/4 1792/481/4 1751/475/4 -f 1784/513/311 1790/520/311 1769/485/311 -f 1769/485/311 1768/513/311 1784/513/311 -f 1786/509/310 1784/513/310 1768/513/310 -f 1768/513/310 1776/509/310 1786/509/310 -f 1785/512/309 1786/509/309 1776/509/309 -f 1776/509/309 1773/512/309 1785/512/309 -f 1787/521/312 1785/512/312 1773/512/312 -f 1773/512/312 1772/521/312 1787/521/312 -f 1759/476/10 1762/475/10 1793/478/10 -f 1793/478/10 1794/477/10 1759/476/10 -f 1763/483/302 1766/484/302 1774/523/302 -f 1774/523/302 1775/522/302 1763/483/302 -f 1781/501/300 1763/483/300 1775/522/300 -f 1775/522/300 1767/524/300 1781/501/300 -f 1790/520/27 1789/527/27 1752/526/27 -f 1752/526/27 1751/525/27 1790/520/27 -f 1769/485/27 1790/520/27 1751/525/27 -f 1751/525/27 1792/528/27 1769/485/27 -f 1767/486/1 1769/487/1 1792/487/1 -f 1792/487/1 1791/486/1 1767/486/1 -f 1781/501/26 1767/524/26 1791/524/26 -f 1791/524/26 1754/501/26 1781/501/26 -f 1782/501/26 1781/501/26 1754/501/26 -f 1754/501/26 1753/501/26 1782/501/26 -f 1766/484/26 1765/485/26 1760/485/26 -f 1760/485/26 1759/484/26 1766/484/26 -f 1774/523/26 1766/484/26 1759/484/26 -f 1759/484/26 1794/523/26 1774/523/26 -f 1772/493/1 1774/494/1 1794/530/1 -f 1794/530/1 1793/529/1 1772/493/1 -f 1787/521/27 1772/521/27 1793/532/27 -f 1793/532/27 1762/531/27 1787/521/27 -f 1788/533/27 1787/521/27 1762/531/27 -f 1762/531/27 1761/531/27 1788/533/27 -f 1795/471/10 1796/474/10 1797/473/10 -f 1797/473/10 1798/472/10 1795/471/10 -f 1799/475/1 1800/478/1 1801/477/1 -f 1801/477/1 1802/476/1 1799/475/1 -f 1803/479/27 1804/479/27 1805/480/288 -f 1805/480/288 1806/480/288 1803/479/27 -f 1807/476/7 1808/482/7 1809/481/7 -f 1809/481/7 1810/475/7 1807/476/7 -f 1811/483/26 1812/483/26 1813/485/289 -f 1813/485/289 1814/484/289 1811/483/26 -f 1815/486/10 1816/488/10 1817/487/10 -f 1818/489/10 1803/492/10 1806/491/10 -f 1806/491/10 1819/490/10 1818/489/10 -f 1820/493/10 1821/495/10 1822/494/10 -f 1823/496/10 1822/494/10 1821/495/10 -f 1821/495/10 1824/497/10 1823/496/10 -f 1825/498/10 1798/472/10 1797/473/10 -f 1797/473/10 1826/499/10 1825/498/10 -f 1827/500/290 1828/500/290 1804/479/27 -f 1804/479/27 1803/479/27 1827/500/290 -f 1829/501/291 1830/501/291 1812/483/26 -f 1812/483/26 1811/483/26 1829/501/291 -f 1827/502/10 1803/492/10 1818/489/10 -f 1818/489/10 1831/503/10 1827/502/10 -f 1823/496/10 1824/497/10 1816/488/10 -f 1816/488/10 1815/486/10 1823/496/10 -f 1819/504/7 1832/505/7 1796/505/7 -f 1796/505/7 1795/504/7 1819/504/7 -f 1818/506/292 1819/504/292 1795/504/292 -f 1795/504/292 1798/506/292 1818/506/292 -f 1831/507/293 1818/506/293 1798/506/293 -f 1798/506/293 1825/507/293 1831/507/293 -f 1833/508/1 1831/507/1 1825/507/1 -f 1825/507/1 1826/508/1 1833/508/1 -f 1834/509/210 1833/512/210 1826/511/210 -f 1826/511/210 1797/510/210 1834/509/210 -f 1832/513/294 1834/509/294 1797/510/294 -f 1797/510/294 1796/514/294 1832/513/294 -f 1835/515/10 1827/502/10 1831/503/10 -f 1831/503/10 1833/516/10 1835/515/10 -f 1827/500/7 1835/517/7 1836/517/7 -f 1836/517/7 1828/500/7 1827/500/7 -f 1806/480/1 1805/480/1 1837/518/1 -f 1837/518/1 1838/518/1 1806/480/1 -f 1838/519/10 1832/474/10 1819/490/10 -f 1819/490/10 1806/491/10 1838/519/10 -f 1799/475/1 1802/476/1 1839/482/1 -f 1839/482/1 1840/481/1 1799/475/1 -f 1832/513/313 1838/520/295 1817/485/295 -f 1817/485/295 1816/513/313 1832/513/313 -f 1834/509/294 1832/513/294 1816/513/294 -f 1816/513/294 1824/509/294 1834/509/294 -f 1833/512/210 1834/509/210 1824/509/210 -f 1824/509/210 1821/512/210 1833/512/210 -f 1835/521/296 1833/512/296 1821/512/296 -f 1821/512/296 1820/521/296 1835/521/296 -f 1807/476/7 1810/475/7 1841/478/7 -f 1841/478/7 1842/477/7 1807/476/7 -f 1811/483/289 1814/484/289 1822/523/289 -f 1822/523/289 1823/522/289 1811/483/289 -f 1829/501/291 1811/483/291 1823/522/291 -f 1823/522/291 1815/524/291 1829/501/291 -f 1838/520/27 1837/527/27 1800/526/27 -f 1800/526/27 1799/525/27 1838/520/27 -f 1817/485/27 1838/520/27 1799/525/27 -f 1799/525/27 1840/528/27 1817/485/27 -f 1815/486/10 1817/487/10 1840/487/10 -f 1840/487/10 1839/486/10 1815/486/10 -f 1829/501/26 1815/524/26 1839/524/26 -f 1839/524/26 1802/501/26 1829/501/26 -f 1830/501/26 1829/501/26 1802/501/26 -f 1802/501/26 1801/501/26 1830/501/26 -f 1814/484/26 1813/485/26 1808/485/26 -f 1808/485/26 1807/484/26 1814/484/26 -f 1822/523/26 1814/484/26 1807/484/26 -f 1807/484/26 1842/523/26 1822/523/26 -f 1820/493/10 1822/494/10 1842/530/10 -f 1842/530/10 1841/529/10 1820/493/10 -f 1835/521/27 1820/521/27 1841/532/27 -f 1841/532/27 1810/531/27 1835/521/27 -f 1836/533/27 1835/521/27 1810/531/27 -f 1810/531/27 1809/531/27 1836/533/27 -f 1843/471/10 1844/474/10 1845/473/10 -f 1845/473/10 1846/472/10 1843/471/10 -f 1847/475/1 1848/478/1 1849/477/1 -f 1849/477/1 1850/476/1 1847/475/1 -f 1851/479/27 1852/479/27 1853/480/288 -f 1853/480/288 1854/480/288 1851/479/27 -f 1855/476/7 1856/482/7 1857/481/7 -f 1857/481/7 1858/475/7 1855/476/7 -f 1859/483/26 1860/483/26 1861/485/289 -f 1861/485/289 1862/484/289 1859/483/26 -f 1863/486/10 1864/488/10 1865/487/10 -f 1866/489/10 1851/492/10 1854/491/10 -f 1854/491/10 1867/490/10 1866/489/10 -f 1868/493/10 1869/495/10 1870/494/10 -f 1871/496/10 1870/494/10 1869/495/10 -f 1869/495/10 1872/497/10 1871/496/10 -f 1873/498/10 1846/472/10 1845/473/10 -f 1845/473/10 1874/499/10 1873/498/10 -f 1875/500/290 1876/500/290 1852/479/27 -f 1852/479/27 1851/479/27 1875/500/290 -f 1877/501/291 1878/501/291 1860/483/26 -f 1860/483/26 1859/483/26 1877/501/291 -f 1875/502/10 1851/492/10 1866/489/10 -f 1866/489/10 1879/503/10 1875/502/10 -f 1871/496/10 1872/497/10 1864/488/10 -f 1864/488/10 1863/486/10 1871/496/10 -f 1867/504/7 1880/505/7 1844/505/7 -f 1844/505/7 1843/504/7 1867/504/7 -f 1866/506/292 1867/504/292 1843/504/292 -f 1843/504/292 1846/506/292 1866/506/292 -f 1879/507/293 1866/506/293 1846/506/293 -f 1846/506/293 1873/507/293 1879/507/293 -f 1881/508/1 1879/507/1 1873/507/1 -f 1873/507/1 1874/508/1 1881/508/1 -f 1882/509/210 1881/512/210 1874/511/210 -f 1874/511/210 1845/510/210 1882/509/210 -f 1880/513/294 1882/509/294 1845/510/294 -f 1845/510/294 1844/514/294 1880/513/294 -f 1883/515/10 1875/502/10 1879/503/10 -f 1879/503/10 1881/516/10 1883/515/10 -f 1875/500/7 1883/517/7 1884/517/7 -f 1884/517/7 1876/500/7 1875/500/7 -f 1854/480/1 1853/480/1 1885/518/1 -f 1885/518/1 1886/518/1 1854/480/1 -f 1886/519/10 1880/474/10 1867/490/10 -f 1867/490/10 1854/491/10 1886/519/10 -f 1847/475/1 1850/476/1 1887/482/1 -f 1887/482/1 1888/481/1 1847/475/1 -f 1880/513/295 1886/520/295 1865/485/295 -f 1865/485/295 1864/513/295 1880/513/295 -f 1882/509/294 1880/513/294 1864/513/294 -f 1864/513/294 1872/509/294 1882/509/294 -f 1881/512/210 1882/509/210 1872/509/210 -f 1872/509/210 1869/512/210 1881/512/210 -f 1883/521/296 1881/512/296 1869/512/296 -f 1869/512/296 1868/521/296 1883/521/296 -f 1855/476/7 1858/475/7 1889/478/7 -f 1889/478/7 1890/477/7 1855/476/7 -f 1859/483/289 1862/484/289 1870/523/289 -f 1870/523/289 1871/522/289 1859/483/289 -f 1877/501/291 1859/483/291 1871/522/291 -f 1871/522/291 1863/524/291 1877/501/291 -f 1886/520/27 1885/527/27 1848/526/27 -f 1848/526/27 1847/525/27 1886/520/27 -f 1865/485/27 1886/520/27 1847/525/27 -f 1847/525/27 1888/528/27 1865/485/27 -f 1863/486/10 1865/487/10 1888/487/10 -f 1888/487/10 1887/486/10 1863/486/10 -f 1877/501/26 1863/524/26 1887/524/26 -f 1887/524/26 1850/501/26 1877/501/26 -f 1878/501/26 1877/501/26 1850/501/26 -f 1850/501/26 1849/501/26 1878/501/26 -f 1862/484/26 1861/485/26 1856/485/26 -f 1856/485/26 1855/484/26 1862/484/26 -f 1870/523/26 1862/484/26 1855/484/26 -f 1855/484/26 1890/523/26 1870/523/26 -f 1868/493/10 1870/494/10 1890/530/10 -f 1890/530/10 1889/529/10 1868/493/10 -f 1883/521/27 1868/521/27 1889/532/27 -f 1889/532/27 1858/531/27 1883/521/27 -f 1884/533/27 1883/521/27 1858/531/27 -f 1858/531/27 1857/531/27 1884/533/27 -f 1891/471/10 1892/474/10 1893/473/10 -f 1893/473/10 1894/472/10 1891/471/10 -f 1895/475/1 1896/478/1 1897/477/1 -f 1897/477/1 1898/476/1 1895/475/1 -f 1899/479/27 1900/479/27 1901/480/288 -f 1901/480/288 1902/480/288 1899/479/27 -f 1903/476/7 1904/482/7 1905/481/7 -f 1905/481/7 1906/475/7 1903/476/7 -f 1907/483/26 1908/483/26 1909/485/289 -f 1909/485/289 1910/484/289 1907/483/26 -f 1911/486/10 1912/488/10 1913/487/10 -f 1914/489/10 1899/492/10 1902/491/10 -f 1902/491/10 1915/490/10 1914/489/10 -f 1916/493/10 1917/495/10 1918/494/10 -f 1919/496/10 1918/494/10 1917/495/10 -f 1917/495/10 1920/497/10 1919/496/10 -f 1921/498/10 1894/472/10 1893/473/10 -f 1893/473/10 1922/499/10 1921/498/10 -f 1923/500/290 1924/500/290 1900/479/27 -f 1900/479/27 1899/479/27 1923/500/290 -f 1925/501/291 1926/501/291 1908/483/26 -f 1908/483/26 1907/483/26 1925/501/291 -f 1923/502/10 1899/492/10 1914/489/10 -f 1914/489/10 1927/503/10 1923/502/10 -f 1919/496/10 1920/497/10 1912/488/10 -f 1912/488/10 1911/486/10 1919/496/10 -f 1915/504/7 1928/505/7 1892/505/7 -f 1892/505/7 1891/504/7 1915/504/7 -f 1914/506/292 1915/504/292 1891/504/292 -f 1891/504/292 1894/506/292 1914/506/292 -f 1927/507/293 1914/506/293 1894/506/293 -f 1894/506/293 1921/507/293 1927/507/293 -f 1929/508/1 1927/507/1 1921/507/1 -f 1921/507/1 1922/508/1 1929/508/1 -f 1930/509/210 1929/512/210 1922/511/210 -f 1922/511/210 1893/510/210 1930/509/210 -f 1928/513/294 1930/509/294 1893/510/294 -f 1893/510/294 1892/514/294 1928/513/294 -f 1931/515/10 1923/502/10 1927/503/10 -f 1927/503/10 1929/516/10 1931/515/10 -f 1923/500/7 1931/517/7 1932/517/7 -f 1932/517/7 1924/500/7 1923/500/7 -f 1902/480/1 1901/480/1 1933/518/1 -f 1933/518/1 1934/518/1 1902/480/1 -f 1934/519/10 1928/474/10 1915/490/10 -f 1915/490/10 1902/491/10 1934/519/10 -f 1895/475/1 1898/476/1 1935/482/1 -f 1935/482/1 1936/481/1 1895/475/1 -f 1928/513/295 1934/520/295 1913/485/295 -f 1913/485/295 1912/513/295 1928/513/295 -f 1930/509/294 1928/513/294 1912/513/294 -f 1912/513/294 1920/509/294 1930/509/294 -f 1929/512/210 1930/509/210 1920/509/210 -f 1920/509/210 1917/512/210 1929/512/210 -f 1931/521/296 1929/512/296 1917/512/296 -f 1917/512/296 1916/521/296 1931/521/296 -f 1903/476/7 1906/475/7 1937/478/7 -f 1937/478/7 1938/477/7 1903/476/7 -f 1907/483/289 1910/484/289 1918/523/289 -f 1918/523/289 1919/522/289 1907/483/289 -f 1925/501/291 1907/483/291 1919/522/291 -f 1919/522/291 1911/524/291 1925/501/291 -f 1934/520/27 1933/527/27 1896/526/27 -f 1896/526/27 1895/525/27 1934/520/27 -f 1913/485/27 1934/520/27 1895/525/27 -f 1895/525/27 1936/528/27 1913/485/27 -f 1911/486/10 1913/487/10 1936/487/10 -f 1936/487/10 1935/486/10 1911/486/10 -f 1925/501/26 1911/524/26 1935/524/26 -f 1935/524/26 1898/501/26 1925/501/26 -f 1926/501/26 1925/501/26 1898/501/26 -f 1898/501/26 1897/501/26 1926/501/26 -f 1910/484/26 1909/485/26 1904/485/26 -f 1904/485/26 1903/484/26 1910/484/26 -f 1918/523/26 1910/484/26 1903/484/26 -f 1903/484/26 1938/523/26 1918/523/26 -f 1916/493/10 1918/494/10 1938/530/10 -f 1938/530/10 1937/529/10 1916/493/10 -f 1931/521/27 1916/521/27 1937/532/27 -f 1937/532/27 1906/531/27 1931/521/27 -f 1932/533/27 1931/521/27 1906/531/27 -f 1906/531/27 1905/531/27 1932/533/27 -f 1939/471/10 1940/474/10 1941/473/10 -f 1941/473/10 1942/472/10 1939/471/10 -f 1943/475/1 1944/478/1 1945/477/1 -f 1945/477/1 1946/476/1 1943/475/1 -f 1947/479/27 1948/479/27 1949/480/288 -f 1949/480/288 1950/480/288 1947/479/27 -f 1951/476/7 1952/482/7 1953/481/7 -f 1953/481/7 1954/475/7 1951/476/7 -f 1955/483/26 1956/483/26 1957/485/289 -f 1957/485/289 1958/484/289 1955/483/26 -f 1959/486/10 1960/488/10 1961/487/10 -f 1962/489/10 1947/492/10 1950/491/10 -f 1950/491/10 1963/490/10 1962/489/10 -f 1964/493/10 1965/495/10 1966/494/10 -f 1967/496/10 1966/494/10 1965/495/10 -f 1965/495/10 1968/497/10 1967/496/10 -f 1969/498/10 1942/472/10 1941/473/10 -f 1941/473/10 1970/499/10 1969/498/10 -f 1971/500/290 1972/500/290 1948/479/27 -f 1948/479/27 1947/479/27 1971/500/290 -f 1973/501/291 1974/501/291 1956/483/26 -f 1956/483/26 1955/483/26 1973/501/291 -f 1971/502/10 1947/492/10 1962/489/10 -f 1962/489/10 1975/503/10 1971/502/10 -f 1967/496/10 1968/497/10 1960/488/10 -f 1960/488/10 1959/486/10 1967/496/10 -f 1963/504/7 1976/505/7 1940/505/7 -f 1940/505/7 1939/504/7 1963/504/7 -f 1962/506/292 1963/504/292 1939/504/292 -f 1939/504/292 1942/506/292 1962/506/292 -f 1975/507/293 1962/506/293 1942/506/293 -f 1942/506/293 1969/507/293 1975/507/293 -f 1977/508/1 1975/507/1 1969/507/1 -f 1969/507/1 1970/508/1 1977/508/1 -f 1978/509/210 1977/512/210 1970/511/210 -f 1970/511/210 1941/510/210 1978/509/210 -f 1976/513/294 1978/509/294 1941/510/294 -f 1941/510/294 1940/514/294 1976/513/294 -f 1979/515/10 1971/502/10 1975/503/10 -f 1975/503/10 1977/516/10 1979/515/10 -f 1971/500/7 1979/517/7 1980/517/7 -f 1980/517/7 1972/500/7 1971/500/7 -f 1950/480/1 1949/480/1 1981/518/1 -f 1981/518/1 1982/518/1 1950/480/1 -f 1982/519/10 1976/474/10 1963/490/10 -f 1963/490/10 1950/491/10 1982/519/10 -f 1943/475/1 1946/476/1 1983/482/1 -f 1983/482/1 1984/481/1 1943/475/1 -f 1976/513/295 1982/520/295 1961/485/295 -f 1961/485/295 1960/513/295 1976/513/295 -f 1978/509/294 1976/513/294 1960/513/294 -f 1960/513/294 1968/509/294 1978/509/294 -f 1977/512/210 1978/509/210 1968/509/210 -f 1968/509/210 1965/512/210 1977/512/210 -f 1979/521/296 1977/512/296 1965/512/296 -f 1965/512/296 1964/521/296 1979/521/296 -f 1951/476/7 1954/475/7 1985/478/7 -f 1985/478/7 1986/477/7 1951/476/7 -f 1955/483/289 1958/484/289 1966/523/289 -f 1966/523/289 1967/522/289 1955/483/289 -f 1973/501/291 1955/483/291 1967/522/291 -f 1967/522/291 1959/524/291 1973/501/291 -f 1982/520/27 1981/527/27 1944/526/27 -f 1944/526/27 1943/525/27 1982/520/27 -f 1961/485/27 1982/520/27 1943/525/27 -f 1943/525/27 1984/528/27 1961/485/27 -f 1959/486/10 1961/487/10 1984/487/10 -f 1984/487/10 1983/486/10 1959/486/10 -f 1973/501/26 1959/524/26 1983/524/26 -f 1983/524/26 1946/501/26 1973/501/26 -f 1974/501/26 1973/501/26 1946/501/26 -f 1946/501/26 1945/501/26 1974/501/26 -f 1958/484/26 1957/485/26 1952/485/26 -f 1952/485/26 1951/484/26 1958/484/26 -f 1966/523/26 1958/484/26 1951/484/26 -f 1951/484/26 1986/523/26 1966/523/26 -f 1964/493/10 1966/494/10 1986/530/10 -f 1986/530/10 1985/529/10 1964/493/10 -f 1979/521/27 1964/521/27 1985/532/27 -f 1985/532/27 1954/531/27 1979/521/27 -f 1980/533/27 1979/521/27 1954/531/27 -f 1954/531/27 1953/531/27 1980/533/27 -f 1987/471/10 1988/472/10 1989/473/10 -f 1989/473/10 1990/474/10 1987/471/10 -f 1991/475/7 1992/476/7 1993/477/7 -f 1993/477/7 1994/478/7 1991/475/7 -f 1995/479/27 1996/480/290 1997/480/290 -f 1997/480/290 1998/479/27 1995/479/27 -f 1999/476/1 2000/475/1 2001/481/1 -f 2001/481/1 2002/482/1 1999/476/1 -f 2003/483/26 2004/484/291 2005/485/291 -f 2005/485/291 2006/483/26 2003/483/26 -f 2007/486/10 2008/487/10 2009/488/10 -f 2010/489/10 2011/490/10 1996/491/10 -f 1996/491/10 1995/492/10 2010/489/10 -f 2012/493/10 2013/494/10 2014/495/10 -f 2015/496/10 2016/497/10 2014/495/10 -f 2014/495/10 2013/494/10 2015/496/10 -f 2017/498/10 2018/499/10 1989/473/10 -f 1989/473/10 1988/472/10 2017/498/10 -f 2019/500/288 1995/479/27 1998/479/27 -f 1998/479/27 2020/500/288 2019/500/288 -f 2021/501/289 2003/483/26 2006/483/26 -f 2006/483/26 2022/501/289 2021/501/289 -f 2019/502/10 2023/503/10 2010/489/10 -f 2010/489/10 1995/492/10 2019/502/10 -f 2015/496/10 2007/486/10 2009/488/10 -f 2009/488/10 2016/497/10 2015/496/10 -f 2011/504/1 1987/504/1 1990/505/1 -f 1990/505/1 2024/505/1 2011/504/1 -f 2010/506/293 1988/506/293 1987/504/293 -f 1987/504/293 2011/504/293 2010/506/293 -f 2023/507/292 2017/507/292 1988/506/292 -f 1988/506/292 2010/506/292 2023/507/292 -f 2025/508/7 2018/508/7 2017/507/7 -f 2017/507/7 2023/507/7 2025/508/7 -f 2026/509/203 1989/510/203 2018/511/203 -f 2018/511/203 2025/512/203 2026/509/203 -f 2024/513/296 1990/514/296 1989/510/296 -f 1989/510/296 2026/509/296 2024/513/296 -f 2027/515/10 2025/516/10 2023/503/10 -f 2023/503/10 2019/502/10 2027/515/10 -f 2019/500/1 2020/500/1 2028/517/1 -f 2028/517/1 2027/517/1 2019/500/1 -f 1996/480/7 2029/518/7 2030/518/7 -f 2030/518/7 1997/480/7 1996/480/7 -f 2029/519/10 1996/491/10 2011/490/10 -f 2011/490/10 2024/474/10 2029/519/10 -f 1991/475/7 2031/481/7 2032/482/7 -f 2032/482/7 1992/476/7 1991/475/7 -f 2024/513/314 2009/513/314 2008/485/314 -f 2008/485/314 2029/520/314 2024/513/314 -f 2026/509/296 2016/509/296 2009/513/296 -f 2009/513/296 2024/513/296 2026/509/296 -f 2025/512/203 2014/512/203 2016/509/203 -f 2016/509/203 2026/509/203 2025/512/203 -f 2027/521/294 2012/521/294 2014/512/294 -f 2014/512/294 2025/512/294 2027/521/294 -f 1999/476/1 2033/477/1 2034/478/1 -f 2034/478/1 2000/475/1 1999/476/1 -f 2003/483/291 2015/522/291 2013/523/291 -f 2013/523/291 2004/484/291 2003/483/291 -f 2021/501/289 2007/524/289 2015/522/289 -f 2015/522/289 2003/483/289 2021/501/289 -f 2029/520/27 1991/525/27 1994/526/27 -f 1994/526/27 2030/527/27 2029/520/27 -f 2008/485/27 2031/528/27 1991/525/27 -f 1991/525/27 2029/520/27 2008/485/27 -f 2007/486/10 2032/486/10 2031/487/10 -f 2031/487/10 2008/487/10 2007/486/10 -f 2021/501/26 1992/501/26 2032/524/26 -f 2032/524/26 2007/524/26 2021/501/26 -f 2022/501/26 1993/501/26 1992/501/26 -f 1992/501/26 2021/501/26 2022/501/26 -f 2004/484/26 1999/484/26 2002/485/26 -f 2002/485/26 2005/485/26 2004/484/26 -f 2013/523/26 2033/523/26 1999/484/26 -f 1999/484/26 2004/484/26 2013/523/26 -f 2012/493/10 2034/529/10 2033/530/10 -f 2033/530/10 2013/494/10 2012/493/10 -f 2027/521/27 2000/531/27 2034/532/27 -f 2034/532/27 2012/521/27 2027/521/27 -f 2028/533/27 2001/531/27 2000/531/27 -f 2000/531/27 2027/521/27 2028/533/27 -f 2035/471/10 2036/472/10 2037/473/10 -f 2037/473/10 2038/474/10 2035/471/10 -f 2039/475/7 2040/476/7 2041/477/7 -f 2041/477/7 2042/478/7 2039/475/7 -f 2043/479/27 2044/480/290 2045/480/290 -f 2045/480/290 2046/479/27 2043/479/27 -f 2047/476/1 2048/475/1 2049/481/1 -f 2049/481/1 2050/482/1 2047/476/1 -f 2051/483/26 2052/484/291 2053/485/291 -f 2053/485/291 2054/483/26 2051/483/26 -f 2055/486/10 2056/487/10 2057/488/10 -f 2058/489/10 2059/490/10 2044/491/10 -f 2044/491/10 2043/492/10 2058/489/10 -f 2060/493/10 2061/494/10 2062/495/10 -f 2063/496/10 2064/497/10 2062/495/10 -f 2062/495/10 2061/494/10 2063/496/10 -f 2065/498/10 2066/499/10 2037/473/10 -f 2037/473/10 2036/472/10 2065/498/10 -f 2067/500/288 2043/479/27 2046/479/27 -f 2046/479/27 2068/500/288 2067/500/288 -f 2069/501/289 2051/483/26 2054/483/26 -f 2054/483/26 2070/501/289 2069/501/289 -f 2067/502/10 2071/503/10 2058/489/10 -f 2058/489/10 2043/492/10 2067/502/10 -f 2063/496/10 2055/486/10 2057/488/10 -f 2057/488/10 2064/497/10 2063/496/10 -f 2059/504/1 2035/504/1 2038/505/1 -f 2038/505/1 2072/505/1 2059/504/1 -f 2058/506/293 2036/506/293 2035/504/293 -f 2035/504/293 2059/504/293 2058/506/293 -f 2071/507/292 2065/507/292 2036/506/292 -f 2036/506/292 2058/506/292 2071/507/292 -f 2073/508/7 2066/508/7 2065/507/7 -f 2065/507/7 2071/507/7 2073/508/7 -f 2074/509/203 2037/510/203 2066/511/203 -f 2066/511/203 2073/512/203 2074/509/203 -f 2072/513/296 2038/514/296 2037/510/296 -f 2037/510/296 2074/509/296 2072/513/296 -f 2075/515/10 2073/516/10 2071/503/10 -f 2071/503/10 2067/502/10 2075/515/10 -f 2067/500/1 2068/500/1 2076/517/1 -f 2076/517/1 2075/517/1 2067/500/1 -f 2044/480/7 2077/518/7 2078/518/7 -f 2078/518/7 2045/480/7 2044/480/7 -f 2077/519/10 2044/491/10 2059/490/10 -f 2059/490/10 2072/474/10 2077/519/10 -f 2039/475/7 2079/481/7 2080/482/7 -f 2080/482/7 2040/476/7 2039/475/7 -f 2072/513/314 2057/513/314 2056/485/314 -f 2056/485/314 2077/520/314 2072/513/314 -f 2074/509/296 2064/509/296 2057/513/296 -f 2057/513/296 2072/513/296 2074/509/296 -f 2073/512/203 2062/512/203 2064/509/203 -f 2064/509/203 2074/509/203 2073/512/203 -f 2075/521/294 2060/521/294 2062/512/294 -f 2062/512/294 2073/512/294 2075/521/294 -f 2047/476/1 2081/477/1 2082/478/1 -f 2082/478/1 2048/475/1 2047/476/1 -f 2051/483/291 2063/522/291 2061/523/291 -f 2061/523/291 2052/484/291 2051/483/291 -f 2069/501/289 2055/524/289 2063/522/298 -f 2063/522/298 2051/483/298 2069/501/289 -f 2077/520/27 2039/525/27 2042/526/27 -f 2042/526/27 2078/527/27 2077/520/27 -f 2056/485/27 2079/528/27 2039/525/27 -f 2039/525/27 2077/520/27 2056/485/27 -f 2055/486/10 2080/486/10 2079/487/10 -f 2079/487/10 2056/487/10 2055/486/10 -f 2069/501/26 2040/501/26 2080/524/26 -f 2080/524/26 2055/524/26 2069/501/26 -f 2070/501/26 2041/501/26 2040/501/26 -f 2040/501/26 2069/501/26 2070/501/26 -f 2052/484/26 2047/484/26 2050/485/26 -f 2050/485/26 2053/485/26 2052/484/26 -f 2061/523/26 2081/523/26 2047/484/26 -f 2047/484/26 2052/484/26 2061/523/26 -f 2060/493/10 2082/529/10 2081/530/10 -f 2081/530/10 2061/494/10 2060/493/10 -f 2075/521/27 2048/531/27 2082/532/27 -f 2082/532/27 2060/521/27 2075/521/27 -f 2076/533/27 2049/531/27 2048/531/27 -f 2048/531/27 2075/521/27 2076/533/27 -f 2083/471/7 2084/472/7 2085/473/7 -f 2085/473/7 2086/474/7 2083/471/7 -f 2087/475/4 2088/476/4 2089/477/4 -f 2089/477/4 2090/478/4 2087/475/4 -f 2091/479/27 2092/480/301 2093/480/301 -f 2093/480/301 2094/479/27 2091/479/27 -f 2095/476/10 2096/475/10 2097/481/10 -f 2097/481/10 2098/482/10 2095/476/10 -f 2099/483/26 2100/484/302 2101/485/302 -f 2101/485/302 2102/483/26 2099/483/26 -f 2103/486/7 2104/487/7 2105/488/7 -f 2106/489/7 2107/490/7 2092/491/7 -f 2092/491/7 2091/492/7 2106/489/7 -f 2108/493/7 2109/494/7 2110/495/7 -f 2111/496/7 2112/497/7 2110/495/7 -f 2110/495/7 2109/494/7 2111/496/7 -f 2113/498/7 2114/499/7 2085/473/7 -f 2085/473/7 2084/472/7 2113/498/7 -f 2115/500/299 2091/479/27 2094/479/27 -f 2094/479/27 2116/500/299 2115/500/299 -f 2117/501/300 2099/483/26 2102/483/26 -f 2102/483/26 2118/501/300 2117/501/300 -f 2115/502/7 2119/503/7 2106/489/7 -f 2106/489/7 2091/492/7 2115/502/7 -f 2111/496/7 2103/486/7 2105/488/7 -f 2105/488/7 2112/497/7 2111/496/7 -f 2107/504/10 2083/504/10 2086/505/10 -f 2086/505/10 2120/505/10 2107/504/10 -f 2106/506/304 2084/506/304 2083/504/304 -f 2083/504/304 2107/504/304 2106/506/304 -f 2119/507/303 2113/507/303 2084/506/303 -f 2084/506/303 2106/506/303 2119/507/303 -f 2121/508/4 2114/508/4 2113/507/4 -f 2113/507/4 2119/507/4 2121/508/4 -f 2122/509/309 2085/510/309 2114/511/309 -f 2114/511/309 2121/512/309 2122/509/309 -f 2120/513/310 2086/514/310 2085/510/310 -f 2085/510/310 2122/509/310 2120/513/310 -f 2123/515/7 2121/516/7 2119/503/7 -f 2119/503/7 2115/502/7 2123/515/7 -f 2115/500/10 2116/500/10 2124/517/10 -f 2124/517/10 2123/517/10 2115/500/10 -f 2092/480/4 2125/518/4 2126/518/4 -f 2126/518/4 2093/480/4 2092/480/4 -f 2125/519/7 2092/491/7 2107/490/7 -f 2107/490/7 2120/474/7 2125/519/7 -f 2087/475/4 2127/481/4 2128/482/4 -f 2128/482/4 2088/476/4 2087/475/4 -f 2120/513/311 2105/513/311 2104/485/311 -f 2104/485/311 2125/520/311 2120/513/311 -f 2122/509/310 2112/509/310 2105/513/310 -f 2105/513/310 2120/513/310 2122/509/310 -f 2121/512/309 2110/512/309 2112/509/309 -f 2112/509/309 2122/509/309 2121/512/309 -f 2123/521/312 2108/521/312 2110/512/312 -f 2110/512/312 2121/512/312 2123/521/312 -f 2095/476/10 2129/477/10 2130/478/10 -f 2130/478/10 2096/475/10 2095/476/10 -f 2099/483/302 2111/522/302 2109/523/302 -f 2109/523/302 2100/484/302 2099/483/302 -f 2117/501/300 2103/524/300 2111/522/300 -f 2111/522/300 2099/483/300 2117/501/300 -f 2125/520/27 2087/525/27 2090/526/27 -f 2090/526/27 2126/527/27 2125/520/27 -f 2104/485/27 2127/528/27 2087/525/27 -f 2087/525/27 2125/520/27 2104/485/27 -f 2103/486/7 2128/486/7 2127/487/7 -f 2127/487/7 2104/487/7 2103/486/7 -f 2117/501/26 2088/501/26 2128/524/26 -f 2128/524/26 2103/524/26 2117/501/26 -f 2118/501/26 2089/501/26 2088/501/26 -f 2088/501/26 2117/501/26 2118/501/26 -f 2100/484/26 2095/484/26 2098/485/26 -f 2098/485/26 2101/485/26 2100/484/26 -f 2109/523/26 2129/523/26 2095/484/26 -f 2095/484/26 2100/484/26 2109/523/26 -f 2108/493/7 2130/529/7 2129/530/7 -f 2129/530/7 2109/494/7 2108/493/7 -f 2123/521/27 2096/531/27 2130/532/27 -f 2130/532/27 2108/521/27 2123/521/27 -f 2124/533/27 2097/531/27 2096/531/27 -f 2096/531/27 2123/521/27 2124/533/27 -f 2131/471/7 2132/472/7 2133/473/7 -f 2133/473/7 2134/474/7 2131/471/7 -f 2135/475/4 2136/476/4 2137/477/4 -f 2137/477/4 2138/478/4 2135/475/4 -f 2139/479/27 2140/480/301 2141/480/301 -f 2141/480/301 2142/479/27 2139/479/27 -f 2143/476/10 2144/475/10 2145/481/10 -f 2145/481/10 2146/482/10 2143/476/10 -f 2147/483/26 2148/484/302 2149/485/302 -f 2149/485/302 2150/483/26 2147/483/26 -f 2151/486/7 2152/487/7 2153/488/7 -f 2154/489/7 2155/490/7 2140/491/7 -f 2140/491/7 2139/492/7 2154/489/7 -f 2156/493/7 2157/494/7 2158/495/7 -f 2159/496/7 2160/497/7 2158/495/7 -f 2158/495/7 2157/494/7 2159/496/7 -f 2161/498/7 2162/499/7 2133/473/7 -f 2133/473/7 2132/472/7 2161/498/7 -f 2163/500/299 2139/479/27 2142/479/27 -f 2142/479/27 2164/500/299 2163/500/299 -f 2165/501/300 2147/483/26 2150/483/26 -f 2150/483/26 2166/501/300 2165/501/300 -f 2163/502/7 2167/503/7 2154/489/7 -f 2154/489/7 2139/492/7 2163/502/7 -f 2159/496/7 2151/486/7 2153/488/7 -f 2153/488/7 2160/497/7 2159/496/7 -f 2155/504/10 2131/504/10 2134/505/10 -f 2134/505/10 2168/505/10 2155/504/10 -f 2154/506/304 2132/506/304 2131/504/304 -f 2131/504/304 2155/504/304 2154/506/304 -f 2167/507/303 2161/507/303 2132/506/303 -f 2132/506/303 2154/506/303 2167/507/303 -f 2169/508/4 2162/508/4 2161/507/4 -f 2161/507/4 2167/507/4 2169/508/4 -f 2170/509/309 2133/510/309 2162/511/309 -f 2162/511/309 2169/512/309 2170/509/309 -f 2168/513/310 2134/514/310 2133/510/310 -f 2133/510/310 2170/509/310 2168/513/310 -f 2171/515/7 2169/516/7 2167/503/7 -f 2167/503/7 2163/502/7 2171/515/7 -f 2163/500/10 2164/500/10 2172/517/10 -f 2172/517/10 2171/517/10 2163/500/10 -f 2140/480/4 2173/518/4 2174/518/4 -f 2174/518/4 2141/480/4 2140/480/4 -f 2173/519/7 2140/491/7 2155/490/7 -f 2155/490/7 2168/474/7 2173/519/7 -f 2135/475/4 2175/481/4 2176/482/4 -f 2176/482/4 2136/476/4 2135/475/4 -f 2168/513/311 2153/513/311 2152/485/311 -f 2152/485/311 2173/520/311 2168/513/311 -f 2170/509/310 2160/509/310 2153/513/310 -f 2153/513/310 2168/513/310 2170/509/310 -f 2169/512/309 2158/512/309 2160/509/309 -f 2160/509/309 2170/509/309 2169/512/309 -f 2171/521/312 2156/521/312 2158/512/312 -f 2158/512/312 2169/512/312 2171/521/312 -f 2143/476/10 2177/477/10 2178/478/10 -f 2178/478/10 2144/475/10 2143/476/10 -f 2147/483/302 2159/522/302 2157/523/302 -f 2157/523/302 2148/484/302 2147/483/302 -f 2165/501/300 2151/524/300 2159/522/300 -f 2159/522/300 2147/483/300 2165/501/300 -f 2173/520/27 2135/525/27 2138/526/27 -f 2138/526/27 2174/527/27 2173/520/27 -f 2152/485/27 2175/528/27 2135/525/27 -f 2135/525/27 2173/520/27 2152/485/27 -f 2151/486/7 2176/486/7 2175/487/7 -f 2175/487/7 2152/487/7 2151/486/7 -f 2165/501/26 2136/501/26 2176/524/26 -f 2176/524/26 2151/524/26 2165/501/26 -f 2166/501/26 2137/501/26 2136/501/26 -f 2136/501/26 2165/501/26 2166/501/26 -f 2148/484/26 2143/484/26 2146/485/26 -f 2146/485/26 2149/485/26 2148/484/26 -f 2157/523/26 2177/523/26 2143/484/26 -f 2143/484/26 2148/484/26 2157/523/26 -f 2156/493/7 2178/529/7 2177/530/7 -f 2177/530/7 2157/494/7 2156/493/7 -f 2171/521/27 2144/531/27 2178/532/27 -f 2178/532/27 2156/521/27 2171/521/27 -f 2172/533/27 2145/531/27 2144/531/27 -f 2144/531/27 2171/521/27 2172/533/27 -f 2179/471/7 2180/474/7 2181/473/7 -f 2181/473/7 2182/472/7 2179/471/7 -f 2183/475/10 2184/478/10 2185/477/10 -f 2185/477/10 2186/476/10 2183/475/10 -f 2187/479/27 2188/479/27 2189/480/299 -f 2189/480/299 2190/480/299 2187/479/27 -f 2191/476/4 2192/482/4 2193/481/4 -f 2193/481/4 2194/475/4 2191/476/4 -f 2195/483/26 2196/483/26 2197/485/300 -f 2197/485/300 2198/484/300 2195/483/26 -f 2199/486/7 2200/488/7 2201/487/7 -f 2202/489/7 2187/492/7 2190/491/7 -f 2190/491/7 2203/490/7 2202/489/7 -f 2204/493/7 2205/495/7 2206/494/7 -f 2207/496/7 2206/494/7 2205/495/7 -f 2205/495/7 2208/497/7 2207/496/7 -f 2209/498/7 2182/472/7 2181/473/7 -f 2181/473/7 2210/499/7 2209/498/7 -f 2211/500/301 2212/500/301 2188/479/27 -f 2188/479/27 2187/479/27 2211/500/301 -f 2213/501/302 2214/501/302 2196/483/26 -f 2196/483/26 2195/483/26 2213/501/302 -f 2211/502/7 2187/492/7 2202/489/7 -f 2202/489/7 2215/503/7 2211/502/7 -f 2207/496/7 2208/497/7 2200/488/7 -f 2200/488/7 2199/486/7 2207/496/7 -f 2203/504/4 2216/505/4 2180/505/4 -f 2180/505/4 2179/504/4 2203/504/4 -f 2202/506/303 2203/504/303 2179/504/303 -f 2179/504/303 2182/506/303 2202/506/303 -f 2215/507/304 2202/506/304 2182/506/304 -f 2182/506/304 2209/507/304 2215/507/304 -f 2217/508/10 2215/507/10 2209/507/10 -f 2209/507/10 2210/508/10 2217/508/10 -f 2218/509/305 2217/512/305 2210/511/305 -f 2210/511/305 2181/510/305 2218/509/305 -f 2216/513/306 2218/509/306 2181/510/306 -f 2181/510/306 2180/514/306 2216/513/306 -f 2219/515/7 2211/502/7 2215/503/7 -f 2215/503/7 2217/516/7 2219/515/7 -f 2211/500/4 2219/517/4 2220/517/4 -f 2220/517/4 2212/500/4 2211/500/4 -f 2190/480/10 2189/480/10 2221/518/10 -f 2221/518/10 2222/518/10 2190/480/10 -f 2222/519/7 2216/474/7 2203/490/7 -f 2203/490/7 2190/491/7 2222/519/7 -f 2183/475/10 2186/476/10 2223/482/10 -f 2223/482/10 2224/481/10 2183/475/10 -f 2216/513/307 2222/520/307 2201/485/307 -f 2201/485/307 2200/513/307 2216/513/307 -f 2218/509/306 2216/513/306 2200/513/306 -f 2200/513/306 2208/509/306 2218/509/306 -f 2217/512/305 2218/509/305 2208/509/305 -f 2208/509/305 2205/512/305 2217/512/305 -f 2219/521/308 2217/512/308 2205/512/308 -f 2205/512/308 2204/521/308 2219/521/308 -f 2191/476/4 2194/475/4 2225/478/4 -f 2225/478/4 2226/477/4 2191/476/4 -f 2195/483/300 2198/484/300 2206/523/300 -f 2206/523/300 2207/522/300 2195/483/300 -f 2213/501/302 2195/483/302 2207/522/302 -f 2207/522/302 2199/524/302 2213/501/302 -f 2222/520/27 2221/527/27 2184/526/27 -f 2184/526/27 2183/525/27 2222/520/27 -f 2201/485/27 2222/520/27 2183/525/27 -f 2183/525/27 2224/528/27 2201/485/27 -f 2199/486/7 2201/487/7 2224/487/7 -f 2224/487/7 2223/486/7 2199/486/7 -f 2213/501/26 2199/524/26 2223/524/26 -f 2223/524/26 2186/501/26 2213/501/26 -f 2214/501/26 2213/501/26 2186/501/26 -f 2186/501/26 2185/501/26 2214/501/26 -f 2198/484/26 2197/485/26 2192/485/26 -f 2192/485/26 2191/484/26 2198/484/26 -f 2206/523/26 2198/484/26 2191/484/26 -f 2191/484/26 2226/523/26 2206/523/26 -f 2204/493/7 2206/494/7 2226/530/7 -f 2226/530/7 2225/529/7 2204/493/7 -f 2219/521/27 2204/521/27 2225/532/27 -f 2225/532/27 2194/531/27 2219/521/27 -f 2220/533/27 2219/521/27 2194/531/27 -f 2194/531/27 2193/531/27 2220/533/27 -f 2227/471/10 2228/472/10 2229/473/10 -f 2229/473/10 2230/474/10 2227/471/10 -f 2231/475/7 2232/476/7 2233/477/7 -f 2233/477/7 2234/478/7 2231/475/7 -f 2235/479/27 2236/480/290 2237/480/290 -f 2237/480/290 2238/479/27 2235/479/27 -f 2239/476/1 2240/475/1 2241/481/1 -f 2241/481/1 2242/482/1 2239/476/1 -f 2243/483/26 2244/484/291 2245/485/291 -f 2245/485/291 2246/483/26 2243/483/26 -f 2247/486/10 2248/487/10 2249/488/10 -f 2250/489/10 2251/490/10 2236/491/10 -f 2236/491/10 2235/492/10 2250/489/10 -f 2252/493/10 2253/494/10 2254/495/10 -f 2255/496/10 2256/497/10 2254/495/10 -f 2254/495/10 2253/494/10 2255/496/10 -f 2257/498/10 2258/499/10 2229/473/10 -f 2229/473/10 2228/472/10 2257/498/10 -f 2259/500/288 2235/479/27 2238/479/27 -f 2238/479/27 2260/500/288 2259/500/288 -f 2261/501/289 2243/483/26 2246/483/26 -f 2246/483/26 2262/501/289 2261/501/289 -f 2259/502/10 2263/503/10 2250/489/10 -f 2250/489/10 2235/492/10 2259/502/10 -f 2255/496/10 2247/486/10 2249/488/10 -f 2249/488/10 2256/497/10 2255/496/10 -f 2251/504/1 2227/504/1 2230/505/1 -f 2230/505/1 2264/505/1 2251/504/1 -f 2250/506/293 2228/506/293 2227/504/293 -f 2227/504/293 2251/504/293 2250/506/293 -f 2263/507/292 2257/507/292 2228/506/292 -f 2228/506/292 2250/506/292 2263/507/292 -f 2265/508/7 2258/508/7 2257/507/7 -f 2257/507/7 2263/507/7 2265/508/7 -f 2266/509/203 2229/510/203 2258/511/203 -f 2258/511/203 2265/512/203 2266/509/203 -f 2264/513/296 2230/514/296 2229/510/296 -f 2229/510/296 2266/509/296 2264/513/296 -f 2267/515/10 2265/516/10 2263/503/10 -f 2263/503/10 2259/502/10 2267/515/10 -f 2259/500/1 2260/500/1 2268/517/1 -f 2268/517/1 2267/517/1 2259/500/1 -f 2236/480/7 2269/518/7 2270/518/7 -f 2270/518/7 2237/480/7 2236/480/7 -f 2269/519/10 2236/491/10 2251/490/10 -f 2251/490/10 2264/474/10 2269/519/10 -f 2231/475/7 2271/481/7 2272/482/7 -f 2272/482/7 2232/476/7 2231/475/7 -f 2264/513/314 2249/513/314 2248/485/314 -f 2248/485/314 2269/520/314 2264/513/314 -f 2266/509/296 2256/509/296 2249/513/296 -f 2249/513/296 2264/513/296 2266/509/296 -f 2265/512/203 2254/512/203 2256/509/203 -f 2256/509/203 2266/509/203 2265/512/203 -f 2267/521/294 2252/521/294 2254/512/294 -f 2254/512/294 2265/512/294 2267/521/294 -f 2239/476/1 2273/477/1 2274/478/1 -f 2274/478/1 2240/475/1 2239/476/1 -f 2243/483/297 2255/522/297 2253/523/291 -f 2253/523/291 2244/484/291 2243/483/297 -f 2261/501/289 2247/524/289 2255/522/289 -f 2255/522/289 2243/483/289 2261/501/289 -f 2269/520/27 2231/525/27 2234/526/27 -f 2234/526/27 2270/527/27 2269/520/27 -f 2248/485/27 2271/528/27 2231/525/27 -f 2231/525/27 2269/520/27 2248/485/27 -f 2247/486/10 2272/486/10 2271/487/10 -f 2271/487/10 2248/487/10 2247/486/10 -f 2261/501/26 2232/501/26 2272/524/26 -f 2272/524/26 2247/524/26 2261/501/26 -f 2262/501/26 2233/501/26 2232/501/26 -f 2232/501/26 2261/501/26 2262/501/26 -f 2244/484/26 2239/484/26 2242/485/26 -f 2242/485/26 2245/485/26 2244/484/26 -f 2253/523/26 2273/523/26 2239/484/26 -f 2239/484/26 2244/484/26 2253/523/26 -f 2252/493/10 2274/529/10 2273/530/10 -f 2273/530/10 2253/494/10 2252/493/10 -f 2267/521/27 2240/531/27 2274/532/27 -f 2274/532/27 2252/521/27 2267/521/27 -f 2268/533/27 2241/531/27 2240/531/27 -f 2240/531/27 2267/521/27 2268/533/27 -f 2275/534/4 2276/535/4 2277/536/4 -f 2277/536/4 2278/537/4 2275/534/4 -f 2279/538/4 2280/539/4 2281/540/4 -f 2281/540/4 2282/541/4 2279/538/4 -f 2283/542/4 2284/543/4 2276/535/4 -f 2276/535/4 2275/534/4 2283/542/4 -f 2280/539/4 2278/537/4 2277/536/4 -f 2277/536/4 2281/540/4 2280/539/4 -f 2285/544/315 2286/545/315 2287/546/316 -f 2287/546/316 2288/547/316 2285/544/315 -f 2286/548/4 2289/549/4 2290/550/4 -f 2290/550/4 2287/551/4 2286/548/4 -f 2289/552/317 2291/553/317 2292/554/318 -f 2292/554/318 2290/555/318 2289/552/317 -f 2288/547/316 2287/546/316 2293/556/319 -f 2293/556/319 2294/557/319 2288/547/316 -f 2287/551/4 2290/550/4 2295/558/4 -f 2295/558/4 2293/559/4 2287/551/4 -f 2290/555/318 2292/554/318 2296/560/320 -f 2296/560/320 2295/561/320 2290/555/318 -f 2294/557/319 2293/556/319 2297/562/27 -f 2297/562/27 2298/563/27 2294/557/319 -f 2293/559/4 2295/558/4 2299/564/4 -f 2299/564/4 2297/565/4 2293/559/4 -f 2295/561/320 2296/560/320 2300/566/26 -f 2300/566/26 2299/567/26 2295/561/320 -f 2298/563/27 2297/562/27 2301/556/321 -f 2301/556/321 2302/557/321 2298/563/27 -f 2297/565/4 2299/564/4 2303/568/4 -f 2303/568/4 2301/569/4 2297/565/4 -f 2299/567/26 2300/566/26 2304/560/322 -f 2304/560/322 2303/561/322 2299/567/26 -f 2302/557/321 2301/556/321 2305/546/323 -f 2305/546/323 2306/547/323 2302/557/321 -f 2301/569/4 2303/568/4 2307/570/4 -f 2307/570/4 2305/571/4 2301/569/4 -f 2303/561/322 2304/560/322 2308/554/324 -f 2308/554/324 2307/555/324 2303/561/322 -f 2306/547/323 2305/546/323 2309/545/325 -f 2309/545/325 2310/544/325 2306/547/323 -f 2305/571/4 2307/570/4 2311/572/4 -f 2311/572/4 2309/573/4 2305/571/4 -f 2307/555/324 2308/554/324 2312/553/326 -f 2312/553/326 2311/552/326 2307/555/324 -f 2313/574/327 2314/575/327 2315/576/327 -f 2315/576/327 2316/577/327 2313/574/327 -f 2317/578/328 2313/579/328 2316/580/328 -f 2316/580/328 2318/581/328 2317/578/328 -f 2319/579/329 2317/578/329 2318/581/329 -f 2318/581/329 2320/580/329 2319/579/329 -f 2319/578/330 2320/581/330 2315/580/330 -f 2315/580/330 2314/579/330 2319/578/330 -f 2321/582/331 2316/577/331 2315/576/331 -f 2315/576/331 2322/583/332 2321/582/331 -f 2318/581/333 2316/580/333 2321/584/333 -f 2321/584/333 2323/585/333 2318/581/333 -f 2324/584/334 2320/580/334 2318/581/334 -f 2318/581/334 2323/585/334 2324/584/334 -f 2322/584/335 2315/580/335 2320/581/335 -f 2320/581/335 2324/585/335 2322/584/335 -f 2325/586/336 2326/587/26 2327/588/26 -f 2327/588/26 2328/589/336 2325/586/336 -f 2328/590/1 2327/591/1 2329/592/1 -f 2329/592/1 2330/593/1 2328/590/1 -f 2330/589/337 2329/588/27 2331/587/27 -f 2331/587/27 2332/586/337 2330/589/337 -f 2327/588/26 2326/587/26 2333/594/338 -f 2333/594/338 2334/595/338 2327/588/26 -f 2329/592/1 2327/591/1 2334/596/1 -f 2334/596/1 2335/597/1 2329/592/1 -f 2331/587/27 2329/588/27 2335/595/339 -f 2335/595/339 2336/594/339 2331/587/27 -f 2337/586/340 2338/587/26 2339/588/26 -f 2339/588/26 2340/589/340 2337/586/340 -f 2340/590/4 2339/591/4 2341/592/4 -f 2341/592/4 2342/593/4 2340/590/4 -f 2342/589/341 2341/588/27 2343/587/27 -f 2343/587/27 2344/586/342 2342/589/341 -f 2339/588/26 2338/587/26 2345/594/343 -f 2345/594/343 2346/595/343 2339/588/26 -f 2341/592/4 2339/591/4 2346/596/4 -f 2346/596/4 2347/597/4 2341/592/4 -f 2343/587/27 2341/588/27 2347/595/344 -f 2347/595/344 2348/594/344 2343/587/27 -f 2347/598/1 2346/596/1 2345/599/1 -f 2345/599/1 2348/600/1 2347/598/1 -f 2349/574/345 2350/577/345 2351/576/345 -f 2351/576/345 2352/575/345 2349/574/345 -f 2353/578/346 2354/581/346 2350/580/346 -f 2350/580/346 2349/579/346 2353/578/346 -f 2355/579/347 2356/580/347 2354/581/347 -f 2354/581/347 2353/578/347 2355/579/347 -f 2355/578/348 2352/579/348 2351/580/348 -f 2351/580/348 2356/581/348 2355/578/348 -f 2357/582/175 2358/583/349 2351/576/349 -f 2351/576/349 2350/577/349 2357/582/175 -f 2354/581/350 2359/585/350 2357/584/350 -f 2357/584/350 2350/580/350 2354/581/350 -f 2360/584/351 2359/585/351 2354/581/351 -f 2354/581/351 2356/580/351 2360/584/351 -f 2358/584/352 2360/585/352 2356/581/353 -f 2356/581/353 2351/580/352 2358/584/352 -f 2361/586/340 2362/589/340 2363/588/26 -f 2363/588/26 2364/587/26 2361/586/340 -f 2362/590/10 2365/593/10 2366/592/10 -f 2366/592/10 2363/591/10 2362/590/10 -f 2365/589/341 2367/586/342 2368/587/27 -f 2368/587/27 2366/588/27 2365/589/341 -f 2363/588/26 2369/595/343 2370/594/343 -f 2370/594/343 2364/587/26 2363/588/26 -f 2366/592/10 2371/597/10 2369/596/10 -f 2369/596/10 2363/591/10 2366/592/10 -f 2368/587/27 2372/594/344 2371/595/344 -f 2371/595/344 2366/588/27 2368/587/27 -f 2370/599/1 2369/596/1 2371/598/1 -f 2371/598/1 2372/600/1 2370/599/1 -f 2373/586/354 2374/589/340 2375/588/26 -f 2375/588/26 2376/587/26 2373/586/354 -f 2374/590/10 2377/593/10 2378/592/10 -f 2378/592/10 2375/591/10 2374/590/10 -f 2377/589/342 2379/586/341 2380/587/27 -f 2380/587/27 2378/588/27 2377/589/342 -f 2375/588/26 2381/595/355 2382/594/355 -f 2382/594/355 2376/587/26 2375/588/26 -f 2378/592/10 2383/597/10 2381/596/10 -f 2381/596/10 2375/591/10 2378/592/10 -f 2380/587/27 2384/594/356 2383/595/344 -f 2383/595/344 2378/588/27 2380/587/27 -f 2385/601/7 2386/602/7 2387/603/7 -f 2387/603/7 691/604/7 2385/601/7 -f 2388/605/4 2389/606/4 2390/607/4 -f 2390/607/4 690/608/4 2388/605/4 -f 2391/601/1 2392/602/1 2393/609/1 -f 2393/609/1 692/610/1 2391/601/1 -f 2394/611/10 2395/612/10 2396/613/10 -f 2396/613/10 693/614/10 2394/611/10 -f 690/610/7 2390/609/7 2386/602/7 -f 2386/602/7 2385/601/7 690/610/7 -f 693/604/1 2396/603/1 2392/602/1 -f 2392/602/1 2391/601/1 693/604/1 -f 692/615/4 2393/616/4 2389/606/4 -f 2389/606/4 2388/605/4 692/615/4 -f 691/617/10 2387/618/10 2395/612/10 -f 2395/612/10 2394/611/10 691/617/10 -f 2397/619/357 2398/620/358 2399/621/358 -f 2399/621/358 2400/622/357 2397/619/357 -f 2398/620/358 2401/623/359 2402/624/359 -f 2402/624/359 2399/621/358 2398/620/358 -f 2403/625/360 2404/626/10 2398/627/10 -f 2398/627/10 2397/628/360 2403/625/360 -f 2398/627/10 2404/626/10 2405/629/361 -f 2405/629/361 2401/630/361 2398/627/10 -f 2403/619/315 2406/622/315 2407/621/362 -f 2407/621/362 2404/620/362 2403/619/315 -f 2404/620/362 2407/621/362 2408/624/363 -f 2408/624/363 2405/623/363 2404/620/362 -f 2406/631/364 2400/632/364 2399/633/365 -f 2399/633/365 2407/634/365 2406/631/364 -f 2399/633/365 2402/635/366 2408/636/366 -f 2408/636/366 2407/634/365 2399/633/365 -f 2409/637/7 2410/638/7 2411/639/7 -f 2411/639/7 2412/640/7 2409/637/7 -f 2413/640/4 2412/641/4 2411/642/4 -f 2411/642/4 2414/643/4 2413/640/4 -f 2413/637/1 2414/638/1 2415/639/1 -f 2415/639/1 2416/640/1 2413/637/1 -f 2417/644/1 2418/645/1 2419/646/1 -f 2419/646/1 2420/647/1 2417/644/1 -f 2421/647/7 2422/644/7 2423/645/7 -f 2423/645/7 2424/646/7 2421/647/7 -f 2418/648/367 2417/649/367 2425/650/367 -f 2425/650/367 2426/651/367 2418/648/367 -f 2425/652/4 2417/567/4 2420/653/4 -f 2420/653/4 2427/654/4 2425/652/4 -f 2420/648/368 2419/649/368 2428/650/368 -f 2428/650/368 2427/651/368 2420/648/368 -f 2429/637/7 2430/638/7 2431/639/7 -f 2431/639/7 2432/640/7 2429/637/7 -f 2432/640/4 2431/643/4 2433/642/4 -f 2433/642/4 2434/641/4 2432/640/4 -f 2434/637/1 2433/638/1 2435/639/1 -f 2435/639/1 2436/640/1 2434/637/1 -f 2437/655/369 2423/656/369 2422/657/369 -f 2422/657/369 2438/658/369 2437/655/369 -f 2437/659/4 2439/660/4 2424/661/4 -f 2424/661/4 2423/662/4 2437/659/4 -f 2440/655/370 2421/656/370 2424/657/370 -f 2424/657/370 2439/658/370 2440/655/370 -f 2441/663/298 2442/664/298 2426/651/298 -f 2426/651/298 2425/650/298 2441/663/298 -f 2427/654/4 2443/665/4 2441/666/4 -f 2441/666/4 2425/652/4 2427/654/4 -f 2444/663/371 2443/664/371 2427/651/371 -f 2427/651/371 2428/650/371 2444/663/371 -f 2437/655/297 2438/658/297 2442/664/297 -f 2442/664/297 2441/663/297 2437/655/297 -f 2439/660/4 2437/659/4 2441/666/4 -f 2441/666/4 2443/665/4 2439/660/4 -f 2440/655/372 2439/658/372 2443/664/372 -f 2443/664/372 2444/663/372 2440/655/372 -f 2445/667/373 2446/668/373 2447/669/373 -f 2447/669/373 2448/670/373 2445/667/373 -f 2449/671/374 2450/672/374 2446/668/374 -f 2446/668/374 2445/667/374 2449/671/374 -f 2451/673/7 2452/674/7 2453/675/7 -f 2453/675/7 2454/676/7 2451/673/7 -f 2451/673/7 2450/673/7 2455/673/7 -f 2455/673/7 2452/674/7 2451/673/7 -f 2451/673/7 2447/677/7 2446/677/7 -f 2446/677/7 2450/673/7 2451/673/7 -f 2456/678/7 2447/677/7 2451/673/7 -f 2451/673/7 2454/676/7 2456/678/7 -f 2453/679/27 2452/303/27 2457/680/27 -f 2457/680/27 2458/681/27 2453/679/27 -f 2452/682/375 2455/672/375 2459/671/375 -f 2459/671/375 2457/683/375 2452/682/375 -f 2455/672/376 2450/672/377 2449/671/377 -f 2449/671/377 2459/671/376 2455/672/376 -f 2460/684/373 2461/685/373 2445/667/373 -f 2445/667/373 2448/670/373 2460/684/373 -f 2461/685/374 2462/686/374 2449/671/374 -f 2449/671/374 2445/667/374 2461/685/374 -f 2463/678/1 2464/677/1 2465/673/1 -f 2465/673/1 2466/676/1 2463/678/1 -f 2465/673/1 2464/677/1 2467/677/1 -f 2467/677/1 2462/673/1 2465/673/1 -f 2465/673/1 2462/673/1 2461/673/1 -f 2461/673/1 2460/674/1 2465/673/1 -f 2465/673/1 2460/674/1 2468/675/1 -f 2468/675/1 2466/676/1 2465/673/1 -f 2457/680/27 2464/687/27 2463/688/27 -f 2463/688/27 2458/681/27 2457/680/27 -f 2459/671/375 2467/686/375 2464/678/375 -f 2464/678/375 2457/683/375 2459/671/375 -f 2449/671/377 2462/686/377 2467/686/376 -f 2467/686/376 2459/671/376 2449/671/377 -f 2469/689/4 2470/690/4 2471/691/4 -f 2471/691/4 2472/692/4 2469/689/4 -f 2473/693/4 2472/692/4 2471/691/4 -f 2471/691/4 2474/694/4 2473/693/4 -f 2475/619/357 2476/620/358 2477/621/358 -f 2477/621/358 2478/622/357 2475/619/357 -f 2476/620/358 2479/623/359 2480/624/359 -f 2480/624/359 2477/621/358 2476/620/358 -f 2481/625/360 2482/626/10 2476/627/10 -f 2476/627/10 2475/628/360 2481/625/360 -f 2476/627/10 2482/626/10 2483/629/361 -f 2483/629/361 2479/630/361 2476/627/10 -f 2481/619/315 2484/622/315 2485/621/362 -f 2485/621/362 2482/620/362 2481/619/315 -f 2482/620/362 2485/621/362 2486/624/363 -f 2486/624/363 2483/623/363 2482/620/362 -f 2484/631/364 2478/632/364 2477/633/365 -f 2477/633/365 2485/634/365 2484/631/364 -f 2477/633/365 2480/635/366 2486/636/366 -f 2486/636/366 2485/634/365 2477/633/365 -f 2487/619/357 2488/622/357 2489/621/378 -f 2489/621/378 2490/620/378 2487/619/357 -f 2490/620/378 2489/621/378 2491/624/379 -f 2491/624/379 2492/623/379 2490/620/378 -f 2493/625/365 2487/628/365 2490/627/4 -f 2490/627/4 2494/626/4 2493/625/365 -f 2490/627/4 2492/630/380 2495/629/380 -f 2495/629/380 2494/626/4 2490/627/4 -f 2493/619/315 2494/620/381 2496/621/381 -f 2496/621/381 2497/622/315 2493/619/315 -f 2494/620/381 2495/623/382 2498/624/382 -f 2498/624/382 2496/621/381 2494/620/381 -f 2497/631/383 2496/634/360 2489/633/360 -f 2489/633/360 2488/632/383 2497/631/383 -f 2489/633/360 2496/634/360 2498/636/384 -f 2498/636/384 2491/635/384 2489/633/360 -f 2499/619/357 2500/622/357 2501/621/378 -f 2501/621/378 2502/620/378 2499/619/357 -f 2502/620/378 2501/621/378 2503/624/379 -f 2503/624/379 2504/623/379 2502/620/378 -f 2505/625/365 2499/628/365 2502/627/4 -f 2502/627/4 2506/626/4 2505/625/365 -f 2502/627/4 2504/630/380 2507/629/380 -f 2507/629/380 2506/626/4 2502/627/4 -f 2505/619/315 2506/620/381 2508/621/381 -f 2508/621/381 2509/622/315 2505/619/315 -f 2506/620/381 2507/623/382 2510/624/382 -f 2510/624/382 2508/621/381 2506/620/381 -f 2509/631/383 2508/634/360 2501/633/360 -f 2501/633/360 2500/632/383 2509/631/383 -f 2501/633/360 2508/634/360 2510/636/384 -f 2510/636/384 2503/635/384 2501/633/360 -f 2511/586/336 2512/589/336 2513/588/26 -f 2513/588/26 2514/587/26 2511/586/336 -f 2512/590/7 2515/593/7 2516/592/7 -f 2516/592/7 2513/591/7 2512/590/7 -f 2515/589/337 2517/586/337 2518/587/27 -f 2518/587/27 2516/588/27 2515/589/337 -f 2513/588/26 2519/595/338 2520/594/338 -f 2520/594/338 2514/587/26 2513/588/26 -f 2516/592/7 2521/597/7 2519/596/7 -f 2519/596/7 2513/591/7 2516/592/7 -f 2518/587/27 2522/594/339 2521/595/339 -f 2521/595/339 2516/588/27 2518/587/27 -f 2523/451/27 2524/452/27 2525/453/27 -f 2525/453/27 2526/454/27 2523/451/27 -f 2527/455/4 2528/456/4 2524/457/4 -f 2524/457/4 2523/458/4 2527/455/4 -f 2528/459/1 2529/460/1 2525/461/1 -f 2525/461/1 2524/462/1 2528/459/1 -f 2529/456/10 2530/455/10 2526/458/10 -f 2526/458/10 2525/457/10 2529/456/10 -f 2530/460/7 2527/459/7 2523/462/7 -f 2523/462/7 2526/461/7 2530/460/7 -f 2531/451/27 2532/452/27 2533/453/27 -f 2533/453/27 2534/454/27 2531/451/27 -f 2535/455/7 2536/456/7 2532/457/7 -f 2532/457/7 2531/458/7 2535/455/7 -f 2536/459/4 2537/460/4 2533/461/4 -f 2533/461/4 2532/462/4 2536/459/4 -f 2537/456/1 2538/455/1 2534/458/1 -f 2534/458/1 2533/457/1 2537/456/1 -f 2538/460/10 2535/459/10 2531/462/10 -f 2531/462/10 2534/461/10 2538/460/10 -f 2539/451/27 2540/452/27 2541/453/27 -f 2541/453/27 2542/454/27 2539/451/27 -f 2543/455/7 2544/456/7 2540/457/7 -f 2540/457/7 2539/458/7 2543/455/7 -f 2544/459/4 2545/460/4 2541/461/4 -f 2541/461/4 2540/462/4 2544/459/4 -f 2545/456/1 2546/455/1 2542/458/1 -f 2542/458/1 2541/457/1 2545/456/1 -f 2546/460/10 2543/459/10 2539/462/10 -f 2539/462/10 2542/461/10 2546/460/10 -f 2547/3/12 2548/2/12 2549/1/1 -f 2549/1/1 2550/4/1 2547/3/12 -f 2551/6/11 2552/5/11 2548/2/12 -f 2548/2/12 2547/3/12 2551/6/11 -f 2553/8/10 2554/7/10 2552/5/11 -f 2552/5/11 2551/6/11 2553/8/10 -f 2555/11/9 2556/10/9 2554/9/10 -f 2554/9/10 2553/12/10 2555/11/9 -f 2557/14/8 2558/13/8 2556/10/9 -f 2556/10/9 2555/11/9 2557/14/8 -f 2559/16/7 2560/15/7 2558/13/8 -f 2558/13/8 2557/14/8 2559/16/7 -f 2561/18/6 2562/17/6 2560/15/7 -f 2560/15/7 2559/16/7 2561/18/6 -f 2563/20/5 2564/19/5 2562/17/6 -f 2562/17/6 2561/18/6 2563/20/5 -f 2565/22/4 2566/21/4 2564/19/5 -f 2564/19/5 2563/20/5 2565/22/4 -f 2567/24/3 2568/23/3 2566/21/4 -f 2566/21/4 2565/22/4 2567/24/3 -f 2569/26/2 2570/25/2 2568/23/3 -f 2568/23/3 2567/24/3 2569/26/2 -f 2550/4/1 2549/1/1 2570/25/2 -f 2570/25/2 2569/26/2 2550/4/1 -f 2571/27/24 2572/30/24 2573/29/24 -f 2573/29/24 2574/28/24 2571/27/24 -f 2575/31/23 2576/32/23 2572/30/23 -f 2572/30/23 2571/27/23 2575/31/23 -f 2577/33/22 2578/34/22 2576/32/22 -f 2576/32/22 2575/31/22 2577/33/22 -f 2579/35/21 2580/38/21 2578/37/21 -f 2578/37/21 2577/36/21 2579/35/21 -f 2581/39/20 2582/40/20 2580/38/20 -f 2580/38/20 2579/35/20 2581/39/20 -f 2583/41/19 2584/42/19 2582/40/19 -f 2582/40/19 2581/39/19 2583/41/19 -f 2585/43/18 2586/44/18 2584/42/18 -f 2584/42/18 2583/41/18 2585/43/18 -f 2587/45/17 2588/46/17 2586/44/17 -f 2586/44/17 2585/43/17 2587/45/17 -f 2589/47/16 2590/48/16 2588/46/16 -f 2588/46/16 2587/45/16 2589/47/16 -f 2591/49/15 2592/50/15 2590/48/15 -f 2590/48/15 2589/47/15 2591/49/15 -f 2593/51/14 2594/52/14 2592/50/14 -f 2592/50/14 2591/49/14 2593/51/14 -f 2574/28/13 2573/29/13 2594/52/192 -f 2594/52/192 2593/51/192 2574/28/13 -f 2548/53/26 2571/53/26 2574/54/26 -f 2574/54/26 2549/54/26 2548/53/26 -f 2549/54/26 2574/54/26 2593/55/26 -f 2593/55/26 2570/55/26 2549/54/26 -f 2570/55/26 2593/55/26 2591/56/26 -f 2591/56/26 2568/56/26 2570/55/26 -f 2568/56/26 2591/56/26 2589/57/26 -f 2589/57/26 2566/57/26 2568/56/26 -f 2566/57/26 2589/57/26 2587/59/26 -f 2587/59/26 2564/58/26 2566/57/26 -f 2564/58/26 2587/59/26 2585/61/26 -f 2585/61/26 2562/60/26 2564/58/26 -f 2562/60/26 2585/61/26 2583/62/26 -f 2583/62/26 2560/62/26 2562/60/26 -f 2560/62/26 2583/62/26 2581/64/26 -f 2581/64/26 2558/63/26 2560/62/26 -f 2558/63/26 2581/64/26 2579/66/26 -f 2579/66/26 2556/65/26 2558/63/26 -f 2556/65/26 2579/66/26 2577/67/26 -f 2577/67/26 2554/67/26 2556/65/26 -f 2554/67/26 2577/67/26 2575/68/26 -f 2575/68/26 2552/68/26 2554/67/26 -f 2552/68/26 2575/68/26 2571/53/26 -f 2571/53/26 2548/53/26 2552/68/26 -f 2595/54/27 2573/54/27 2572/53/27 -f 2572/53/27 2596/53/27 2595/54/27 -f 2596/53/27 2572/53/27 2576/68/27 -f 2576/68/27 2597/68/27 2596/53/27 -f 2597/68/27 2576/68/27 2578/67/27 -f 2578/67/27 2598/67/27 2597/68/27 -f 2598/67/27 2578/67/27 2580/66/27 -f 2580/66/27 2599/65/27 2598/67/27 -f 2599/65/27 2580/66/27 2582/64/27 -f 2582/64/27 2600/63/27 2599/65/27 -f 2600/63/27 2582/64/27 2584/62/27 -f 2584/62/27 2601/62/27 2600/63/27 -f 2601/62/27 2584/62/27 2586/61/27 -f 2586/61/27 2602/60/27 2601/62/27 -f 2602/60/27 2586/61/27 2588/59/27 -f 2588/59/27 2603/58/27 2602/60/27 -f 2603/58/27 2588/59/27 2590/57/27 -f 2590/57/27 2604/57/27 2603/58/27 -f 2604/57/27 2590/57/27 2592/56/27 -f 2592/56/27 2605/56/27 2604/57/27 -f 2605/56/27 2592/56/27 2594/55/27 -f 2594/55/27 2606/55/27 2605/56/27 -f 2606/55/27 2594/55/27 2573/54/27 -f 2573/54/27 2595/54/27 2606/55/27 -f 2607/71/12 2608/70/1 2595/69/1 -f 2595/69/1 2596/72/12 2607/71/12 -f 2609/73/23 2607/71/12 2596/72/12 -f 2596/72/12 2597/74/23 2609/73/23 -f 2610/75/22 2609/73/22 2597/74/22 -f 2597/74/22 2598/76/22 2610/75/22 -f 2611/77/9 2610/75/21 2598/76/21 -f 2598/76/21 2599/78/9 2611/77/9 -f 2612/79/8 2611/77/9 2599/78/9 -f 2599/78/9 2600/80/8 2612/79/8 -f 2613/83/7 2612/82/8 2600/81/8 -f 2600/81/8 2601/84/7 2613/83/7 -f 2614/85/6 2613/83/7 2601/84/7 -f 2601/84/7 2602/86/6 2614/85/6 -f 2615/87/5 2614/85/6 2602/86/6 -f 2602/86/6 2603/88/5 2615/87/5 -f 2616/89/4 2615/87/5 2603/88/5 -f 2603/88/5 2604/90/4 2616/89/4 -f 2617/91/3 2616/89/4 2604/90/4 -f 2604/90/4 2605/92/3 2617/91/3 -f 2618/93/2 2617/91/3 2605/92/3 -f 2605/92/3 2606/94/2 2618/93/2 -f 2608/70/1 2618/93/2 2606/94/2 -f 2606/94/2 2595/69/1 2608/70/1 -f 2619/95/26 2620/95/26 2621/96/26 -f 2621/96/26 2622/96/26 2619/95/26 -f 2623/97/26 2624/97/26 2620/95/26 -f 2620/95/26 2619/95/26 2623/97/26 -f 2625/67/26 2626/98/26 2624/97/26 -f 2624/97/26 2623/97/26 2625/67/26 -f 2627/99/26 2628/99/26 2626/98/26 -f 2626/98/26 2625/67/26 2627/99/26 -f 2629/100/26 2630/100/26 2628/99/26 -f 2628/99/26 2627/99/26 2629/100/26 -f 2631/101/26 2632/101/26 2630/100/26 -f 2630/100/26 2629/100/26 2631/101/26 -f 2633/61/26 2634/61/26 2632/101/26 -f 2632/101/26 2631/101/26 2633/61/26 -f 2635/59/26 2636/102/26 2634/61/26 -f 2634/61/26 2633/61/26 2635/59/26 -f 2637/103/26 2638/103/26 2636/102/26 -f 2636/102/26 2635/59/26 2637/103/26 -f 2639/104/26 2640/105/26 2638/103/26 -f 2638/103/26 2637/103/26 2639/104/26 -f 2641/106/26 2642/106/26 2640/105/26 -f 2640/105/26 2639/104/26 2641/106/26 -f 2622/96/26 2621/96/26 2642/106/26 -f 2642/106/26 2641/106/26 2622/96/26 -f 2620/107/39 2643/110/39 2644/109/39 -f 2644/109/39 2621/108/39 2620/107/39 -f 2624/111/38 2645/112/38 2643/110/38 -f 2643/110/38 2620/107/38 2624/111/38 -f 2626/113/37 2646/114/37 2645/112/37 -f 2645/112/37 2624/111/37 2626/113/37 -f 2628/115/36 2647/116/36 2646/114/36 -f 2646/114/36 2626/113/36 2628/115/36 -f 2630/117/35 2648/118/35 2647/116/35 -f 2647/116/35 2628/115/35 2630/117/35 -f 2632/119/34 2649/120/34 2648/118/34 -f 2648/118/34 2630/117/34 2632/119/34 -f 2634/121/33 2650/122/33 2649/120/33 -f 2649/120/33 2632/119/33 2634/121/33 -f 2636/123/32 2651/124/32 2650/122/32 -f 2650/122/32 2634/121/32 2636/123/32 -f 2638/125/31 2652/126/31 2651/124/31 -f 2651/124/31 2636/123/31 2638/125/31 -f 2640/127/30 2653/130/30 2652/129/30 -f 2652/129/30 2638/128/30 2640/127/30 -f 2642/131/29 2654/132/29 2653/130/29 -f 2653/130/29 2640/127/29 2642/131/29 -f 2621/108/28 2644/109/28 2654/132/28 -f 2654/132/28 2642/131/28 2621/108/28 -f 2643/110/54 2655/134/54 2656/133/54 -f 2656/133/54 2644/109/54 2643/110/54 -f 2645/112/53 2657/135/53 2655/134/53 -f 2655/134/53 2643/110/53 2645/112/53 -f 2646/114/51 2658/136/52 2657/135/51 -f 2657/135/51 2645/112/51 2646/114/51 -f 2647/116/50 2659/137/50 2658/136/50 -f 2658/136/50 2646/114/50 2647/116/50 -f 2648/118/49 2660/138/49 2659/137/49 -f 2659/137/49 2647/116/49 2648/118/49 -f 2649/120/48 2661/139/48 2660/138/48 -f 2660/138/48 2648/118/48 2649/120/48 -f 2650/122/385 2662/140/46 2661/139/46 -f 2661/139/46 2649/120/46 2650/122/385 -f 2651/124/45 2663/141/45 2662/140/45 -f 2662/140/45 2650/122/45 2651/124/45 -f 2652/126/44 2664/142/44 2663/141/44 -f 2663/141/44 2651/124/44 2652/126/44 -f 2653/130/42 2665/144/42 2664/143/43 -f 2664/143/43 2652/129/42 2653/130/42 -f 2654/132/41 2666/145/41 2665/144/41 -f 2665/144/41 2653/130/41 2654/132/41 -f 2644/109/40 2656/133/40 2666/145/40 -f 2666/145/40 2654/132/386 2644/109/40 -f 2607/148/71 2667/147/71 2668/146/71 -f 2668/146/71 2608/149/71 2607/148/71 -f 2609/151/69 2669/150/70 2667/147/70 -f 2667/147/70 2607/148/69 2609/151/69 -f 2610/154/68 2670/153/68 2669/152/68 -f 2669/152/68 2609/155/68 2610/154/68 -f 2611/156/67 2671/142/67 2670/153/67 -f 2670/153/67 2610/154/67 2611/156/67 -f 2612/158/65 2672/157/66 2671/142/66 -f 2671/142/66 2611/156/65 2612/158/65 -f 2613/160/64 2673/159/64 2672/157/64 -f 2672/157/64 2612/158/64 2613/160/64 -f 2614/162/63 2674/161/63 2673/159/63 -f 2673/159/63 2613/160/63 2614/162/63 -f 2615/164/62 2675/163/61 2674/161/61 -f 2674/161/61 2614/162/62 2615/164/62 -f 2616/166/60 2676/165/60 2675/163/60 -f 2675/163/60 2615/164/60 2616/166/60 -f 2617/168/59 2677/167/59 2676/165/59 -f 2676/165/59 2616/166/59 2617/168/59 -f 2618/170/58 2678/169/57 2677/167/57 -f 2677/167/57 2617/168/57 2618/170/58 -f 2608/149/56 2668/146/56 2678/169/56 -f 2678/169/56 2618/170/56 2608/149/56 -f 2667/173/12 2619/172/12 2622/171/1 -f 2622/171/1 2668/174/1 2667/173/12 -f 2669/176/11 2623/175/11 2619/172/12 -f 2619/172/12 2667/173/12 2669/176/11 -f 2670/179/10 2625/178/10 2623/177/11 -f 2623/177/11 2669/180/11 2670/179/10 -f 2671/181/9 2627/86/9 2625/178/10 -f 2625/178/10 2670/179/10 2671/181/9 -f 2672/183/8 2629/182/8 2627/86/9 -f 2627/86/9 2671/181/9 2672/183/8 -f 2673/185/7 2631/184/7 2629/182/8 -f 2629/182/8 2672/183/8 2673/185/7 -f 2674/187/6 2633/186/6 2631/184/7 -f 2631/184/7 2673/185/7 2674/187/6 -f 2675/189/5 2635/188/5 2633/186/6 -f 2633/186/6 2674/187/6 2675/189/5 -f 2676/191/4 2637/190/4 2635/188/5 -f 2635/188/5 2675/189/5 2676/191/4 -f 2677/192/3 2639/76/3 2637/190/4 -f 2637/190/4 2676/191/4 2677/192/3 -f 2678/194/2 2641/193/2 2639/76/3 -f 2639/76/3 2677/192/3 2678/194/2 -f 2668/174/1 2622/171/1 2641/193/2 -f 2641/193/2 2678/194/2 2668/174/1 -f 2679/195/387 2680/198/387 2681/197/387 -f 2681/197/387 2682/196/387 2679/195/387 -f 2683/199/388 2684/202/388 2685/201/388 -f 2685/201/388 2686/200/388 2683/199/388 -f 2687/203/389 2688/206/389 2689/205/389 -f 2689/205/389 2690/204/389 2687/203/389 -f 2691/202/390 2692/199/390 2693/200/390 -f 2693/200/390 2694/201/390 2691/202/390 -f 2695/207/391 2696/209/391 2697/208/391 -f 2697/208/391 2698/207/391 2695/207/391 -f 2699/209/392 2700/211/392 2701/210/392 -f 2690/212/393 2689/214/393 2702/213/393 -f 2702/213/393 2703/196/393 2690/212/393 -f 2704/210/394 2705/211/394 2706/209/394 -f 2707/215/395 2706/209/395 2705/211/395 -f 2705/211/395 2708/216/395 2707/215/395 -f 2709/217/396 2682/196/396 2681/197/396 -f 2681/197/396 2710/218/396 2709/217/396 -f 2711/219/397 2687/203/397 2690/204/397 -f 2690/204/397 2712/220/397 2711/219/397 -f 2713/209/398 2695/207/398 2698/207/398 -f 2698/207/398 2714/208/398 2713/209/398 -f 2690/212/399 2703/196/399 2715/213/399 -f 2715/213/399 2712/214/399 2690/212/399 -f 2707/215/400 2708/216/400 2700/211/400 -f 2700/211/400 2699/209/400 2707/215/400 -f 2716/221/390 2680/221/390 2679/222/390 -f 2679/222/390 2702/222/390 2716/221/390 -f 2702/222/401 2679/222/401 2682/203/401 -f 2682/203/401 2703/203/401 2702/222/401 -f 2703/203/402 2682/203/402 2709/206/402 -f 2709/206/402 2715/206/402 2703/203/402 -f 2715/206/388 2709/206/388 2710/223/388 -f 2710/223/388 2717/223/388 2715/206/388 -f 2717/224/403 2710/224/403 2681/226/403 -f 2681/226/403 2718/225/403 2717/224/403 -f 2718/225/404 2681/226/404 2680/224/404 -f 2680/224/404 2716/224/404 2718/225/404 -f 2712/214/394 2715/213/394 2717/228/394 -f 2717/228/394 2719/227/394 2712/214/394 -f 2719/229/390 2720/221/390 2711/219/390 -f 2711/219/390 2712/220/390 2719/229/390 -f 2688/206/388 2721/223/388 2722/230/388 -f 2722/230/388 2689/205/388 2688/206/388 -f 2722/227/392 2716/228/392 2702/213/392 -f 2702/213/392 2689/214/392 2722/227/392 -f 2685/201/388 2723/202/388 2724/199/388 -f 2724/199/388 2686/200/388 2685/201/388 -f 2722/231/405 2701/233/406 2700/232/405 -f 2700/232/405 2716/224/405 2722/231/405 -f 2716/224/404 2700/232/404 2708/234/404 -f 2708/234/404 2718/225/404 2716/224/404 -f 2718/225/403 2708/234/403 2705/232/403 -f 2705/232/403 2717/224/403 2718/225/403 -f 2717/224/407 2705/232/407 2704/233/407 -f 2704/233/407 2719/231/407 2717/224/407 -f 2693/200/390 2725/199/390 2726/202/390 -f 2726/202/390 2694/201/390 2693/200/390 -f 2697/208/391 2706/236/391 2707/235/391 -f 2707/235/391 2698/207/391 2697/208/391 -f 2698/207/398 2707/235/398 2699/236/398 -f 2699/236/398 2714/208/398 2698/207/398 -f 2721/236/27 2683/238/27 2686/237/27 -f 2686/237/27 2722/231/27 2721/236/27 -f 2722/231/27 2686/237/27 2724/239/27 -f 2724/239/27 2701/233/27 2722/231/27 -f 2701/210/408 2724/241/409 2723/240/409 -f 2723/240/409 2699/209/408 2701/210/408 -f 2699/236/26 2723/238/26 2685/242/26 -f 2685/242/26 2714/208/26 2699/236/26 -f 2714/208/26 2685/242/26 2684/240/26 -f 2684/240/26 2713/209/26 2714/208/26 -f 2696/209/26 2691/240/26 2694/242/26 -f 2694/242/26 2697/208/26 2696/209/26 -f 2697/208/26 2694/242/26 2726/238/26 -f 2726/238/26 2706/236/26 2697/208/26 -f 2706/209/410 2726/240/410 2725/241/410 -f 2725/241/410 2704/210/410 2706/209/410 -f 2704/233/27 2725/239/27 2693/237/27 -f 2693/237/27 2719/231/27 2704/233/27 -f 2719/231/27 2693/237/27 2692/238/27 -f 2692/238/27 2720/236/27 2719/231/27 -f 2727/195/411 2728/198/411 2729/197/411 -f 2729/197/411 2730/196/411 2727/195/411 -f 2731/199/412 2732/202/412 2733/201/413 -f 2733/201/413 2734/200/413 2731/199/412 -f 2735/203/414 2736/206/414 2737/205/414 -f 2737/205/414 2738/204/414 2735/203/414 -f 2739/202/415 2740/199/415 2741/200/416 -f 2741/200/416 2742/201/416 2739/202/415 -f 2743/207/417 2744/209/417 2745/208/417 -f 2745/208/417 2746/207/417 2743/207/417 -f 2747/209/171 2748/211/171 2749/210/171 -f 2738/212/418 2737/214/418 2750/213/418 -f 2750/213/418 2751/196/418 2738/212/418 -f 2752/210/419 2753/211/419 2754/209/419 -f 2755/215/420 2754/209/420 2753/211/420 -f 2753/211/420 2756/216/420 2755/215/420 -f 2757/217/167 2730/196/167 2729/197/167 -f 2729/197/167 2758/218/167 2757/217/167 -f 2759/219/421 2735/203/421 2738/204/421 -f 2738/204/421 2760/220/421 2759/219/421 -f 2761/209/422 2743/207/422 2746/207/422 -f 2746/207/422 2762/208/422 2761/209/422 -f 2738/212/423 2751/196/423 2763/213/423 -f 2763/213/423 2760/214/423 2738/212/423 -f 2755/215/424 2756/216/424 2748/211/424 -f 2748/211/424 2747/209/424 2755/215/424 -f 2764/221/415 2728/221/416 2727/222/416 -f 2727/222/416 2750/222/415 2764/221/415 -f 2750/222/425 2727/222/425 2730/203/425 -f 2730/203/425 2751/203/425 2750/222/425 -f 2751/203/426 2730/203/426 2757/206/426 -f 2757/206/426 2763/206/426 2751/203/426 -f 2763/206/413 2757/206/413 2758/223/413 -f 2758/223/413 2765/223/413 2763/206/413 -f 2765/224/427 2758/224/427 2729/226/427 -f 2729/226/427 2766/225/427 2765/224/427 -f 2766/225/428 2729/226/428 2728/224/428 -f 2728/224/428 2764/224/428 2766/225/428 -f 2760/214/419 2763/213/419 2765/228/419 -f 2765/228/419 2767/227/419 2760/214/419 -f 2767/229/415 2768/221/415 2759/219/415 -f 2759/219/415 2760/220/415 2767/229/415 -f 2736/206/413 2769/223/413 2770/230/413 -f 2770/230/413 2737/205/413 2736/206/413 -f 2770/227/171 2764/228/171 2750/213/171 -f 2750/213/171 2737/214/171 2770/227/171 -f 2733/201/413 2771/202/412 2772/199/412 -f 2772/199/412 2734/200/413 2733/201/413 -f 2770/231/429 2749/233/429 2748/232/429 -f 2748/232/429 2764/224/429 2770/231/429 -f 2764/224/428 2748/232/428 2756/234/428 -f 2756/234/428 2766/225/428 2764/224/428 -f 2766/225/427 2756/234/427 2753/232/427 -f 2753/232/427 2765/224/427 2766/225/427 -f 2765/224/430 2753/232/430 2752/233/430 -f 2752/233/430 2767/231/430 2765/224/430 -f 2741/200/416 2773/199/415 2774/202/415 -f 2774/202/415 2742/201/416 2741/200/416 -f 2745/208/417 2754/236/417 2755/235/417 -f 2755/235/417 2746/207/417 2745/208/417 -f 2746/207/422 2755/235/422 2747/236/422 -f 2747/236/422 2762/208/422 2746/207/422 -f 2769/236/27 2731/238/27 2734/237/27 -f 2734/237/27 2770/231/27 2769/236/27 -f 2770/231/27 2734/237/27 2772/239/27 -f 2772/239/27 2749/233/27 2770/231/27 -f 2749/210/191 2772/241/191 2771/240/191 -f 2771/240/191 2747/209/191 2749/210/191 -f 2747/236/26 2771/238/26 2733/242/26 -f 2733/242/26 2762/208/26 2747/236/26 -f 2762/208/26 2733/242/26 2732/240/26 -f 2732/240/26 2761/209/26 2762/208/26 -f 2744/209/26 2739/240/26 2742/242/26 -f 2742/242/26 2745/208/26 2744/209/26 -f 2745/208/26 2742/242/26 2774/238/26 -f 2774/238/26 2754/236/26 2745/208/26 -f 2754/209/431 2774/240/431 2773/241/431 -f 2773/241/431 2752/210/431 2754/209/431 -f 2752/233/27 2773/239/27 2741/237/27 -f 2741/237/27 2767/231/27 2752/233/27 -f 2767/231/27 2741/237/27 2740/238/27 -f 2740/238/27 2768/236/27 2767/231/27 -f 2775/243/432 2776/246/432 2777/245/432 -f 2777/245/432 2778/244/432 2775/243/432 -f 2775/247/433 2779/250/433 2780/249/433 -f 2780/249/433 2776/248/433 2775/247/433 -f 2776/246/434 2780/252/434 2781/251/434 -f 2781/251/434 2777/245/434 2776/246/434 -f 2777/248/435 2781/249/435 2782/250/435 -f 2782/250/435 2778/247/435 2777/248/435 -f 2783/195/436 2784/198/436 2785/197/436 -f 2785/197/436 2786/196/436 2783/195/436 -f 2787/199/437 2788/202/437 2789/201/413 -f 2789/201/413 2790/200/413 2787/199/437 -f 2791/203/414 2792/206/414 2793/205/414 -f 2793/205/414 2794/204/414 2791/203/414 -f 2795/202/415 2796/199/415 2797/200/416 -f 2797/200/416 2798/201/416 2795/202/415 -f 2799/207/417 2800/209/417 2801/208/417 -f 2801/208/417 2802/207/417 2799/207/417 -f 2803/209/171 2804/211/171 2805/210/171 -f 2794/212/418 2793/214/418 2806/213/418 -f 2806/213/418 2807/196/418 2794/212/418 -f 2808/210/419 2809/211/419 2810/209/419 -f 2811/215/420 2810/209/420 2809/211/420 -f 2809/211/420 2812/216/420 2811/215/420 -f 2813/217/167 2786/196/167 2785/197/167 -f 2785/197/167 2814/218/167 2813/217/167 -f 2815/219/438 2791/203/421 2794/204/421 -f 2794/204/421 2816/220/438 2815/219/438 -f 2817/209/422 2799/207/422 2802/207/422 -f 2802/207/422 2818/208/422 2817/209/422 -f 2794/212/423 2807/196/423 2819/213/423 -f 2819/213/423 2816/214/423 2794/212/423 -f 2811/215/424 2812/216/424 2804/211/424 -f 2804/211/424 2803/209/424 2811/215/424 -f 2820/221/415 2784/221/415 2783/222/415 -f 2783/222/415 2806/222/415 2820/221/415 -f 2806/222/425 2783/222/425 2786/203/425 -f 2786/203/425 2807/203/425 2806/222/425 -f 2807/203/426 2786/203/426 2813/206/426 -f 2813/206/426 2819/206/426 2807/203/426 -f 2819/206/413 2813/206/413 2814/223/413 -f 2814/223/413 2821/223/413 2819/206/413 -f 2821/224/427 2814/224/427 2785/226/427 -f 2785/226/427 2822/225/427 2821/224/427 -f 2822/225/428 2785/226/428 2784/224/428 -f 2784/224/428 2820/224/428 2822/225/428 -f 2816/214/419 2819/213/419 2821/228/419 -f 2821/228/419 2823/227/419 2816/214/419 -f 2823/229/416 2824/221/416 2815/219/416 -f 2815/219/416 2816/220/416 2823/229/416 -f 2792/206/413 2825/223/413 2826/230/412 -f 2826/230/412 2793/205/412 2792/206/413 -f 2826/227/171 2820/228/171 2806/213/171 -f 2806/213/171 2793/214/171 2826/227/171 -f 2789/201/413 2827/202/412 2828/199/412 -f 2828/199/412 2790/200/413 2789/201/413 -f 2826/231/429 2805/233/429 2804/232/429 -f 2804/232/429 2820/224/429 2826/231/429 -f 2820/224/428 2804/232/428 2812/234/428 -f 2812/234/428 2822/225/428 2820/224/428 -f 2822/225/427 2812/234/427 2809/232/427 -f 2809/232/427 2821/224/427 2822/225/427 -f 2821/224/430 2809/232/430 2808/233/430 -f 2808/233/430 2823/231/430 2821/224/430 -f 2797/200/416 2829/199/415 2830/202/415 -f 2830/202/415 2798/201/416 2797/200/416 -f 2801/208/417 2810/236/417 2811/235/417 -f 2811/235/417 2802/207/417 2801/208/417 -f 2802/207/422 2811/235/422 2803/236/422 -f 2803/236/422 2818/208/422 2802/207/422 -f 2825/236/27 2787/238/27 2790/237/27 -f 2790/237/27 2826/231/27 2825/236/27 -f 2826/231/27 2790/237/27 2828/239/27 -f 2828/239/27 2805/233/27 2826/231/27 -f 2805/210/191 2828/241/191 2827/240/191 -f 2827/240/191 2803/209/191 2805/210/191 -f 2803/236/26 2827/238/26 2789/242/26 -f 2789/242/26 2818/208/26 2803/236/26 -f 2818/208/26 2789/242/26 2788/240/26 -f 2788/240/26 2817/209/26 2818/208/26 -f 2800/209/26 2795/240/26 2798/242/26 -f 2798/242/26 2801/208/26 2800/209/26 -f 2801/208/26 2798/242/26 2830/238/26 -f 2830/238/26 2810/236/26 2801/208/26 -f 2810/209/431 2830/240/431 2829/241/431 -f 2829/241/431 2808/210/431 2810/209/431 -f 2808/233/27 2829/239/27 2797/237/27 -f 2797/237/27 2823/231/27 2808/233/27 -f 2823/231/27 2797/237/27 2796/238/27 -f 2796/238/27 2824/236/27 2823/231/27 -f 2831/243/439 2832/246/439 2833/245/439 -f 2833/245/439 2834/244/439 2831/243/439 -f 2831/247/440 2835/250/440 2836/249/440 -f 2836/249/440 2832/248/440 2831/247/440 -f 2832/246/441 2836/252/441 2837/251/441 -f 2837/251/441 2833/245/441 2832/246/441 -f 2833/248/442 2837/249/442 2838/250/442 -f 2838/250/442 2834/247/442 2833/248/442 -f 2839/195/443 2840/198/443 2841/197/443 -f 2841/197/443 2842/196/443 2839/195/443 -f 2843/199/390 2844/202/390 2845/201/390 -f 2845/201/390 2846/200/390 2843/199/390 -f 2847/203/444 2848/206/444 2849/205/444 -f 2849/205/444 2850/204/444 2847/203/444 -f 2851/202/388 2852/199/388 2853/200/388 -f 2853/200/388 2854/201/388 2851/202/388 -f 2855/207/398 2856/209/398 2857/208/398 -f 2857/208/398 2858/207/398 2855/207/398 -f 2859/209/445 2860/211/445 2861/210/445 -f 2850/212/446 2849/214/446 2862/213/446 -f 2862/213/446 2863/196/446 2850/212/446 -f 2864/210/447 2865/211/447 2866/209/447 -f 2867/215/448 2866/209/448 2865/211/448 -f 2865/211/448 2868/216/448 2867/215/448 -f 2869/217/449 2842/196/450 2841/197/450 -f 2841/197/450 2870/218/449 2869/217/449 -f 2871/219/451 2847/203/451 2850/204/451 -f 2850/204/451 2872/220/451 2871/219/451 -f 2873/209/391 2855/207/391 2858/207/391 -f 2858/207/391 2874/208/391 2873/209/391 -f 2850/212/452 2863/196/452 2875/213/452 -f 2875/213/452 2872/214/452 2850/212/452 -f 2867/215/453 2868/216/453 2860/211/453 -f 2860/211/453 2859/209/453 2867/215/453 -f 2876/221/388 2840/221/388 2839/222/388 -f 2839/222/388 2862/222/388 2876/221/388 -f 2862/222/402 2839/222/402 2842/203/402 -f 2842/203/402 2863/203/402 2862/222/402 -f 2863/203/401 2842/203/401 2869/206/401 -f 2869/206/401 2875/206/401 2863/203/401 -f 2875/206/390 2869/206/390 2870/223/390 -f 2870/223/390 2877/223/390 2875/206/390 -f 2877/224/454 2870/224/454 2841/226/454 -f 2841/226/454 2878/225/454 2877/224/454 -f 2878/225/455 2841/226/455 2840/224/455 -f 2840/224/455 2876/224/455 2878/225/455 -f 2872/214/447 2875/213/447 2877/228/447 -f 2877/228/447 2879/227/447 2872/214/447 -f 2879/229/388 2880/221/388 2871/219/388 -f 2871/219/388 2872/220/388 2879/229/388 -f 2848/206/390 2881/223/390 2882/230/390 -f 2882/230/390 2849/205/390 2848/206/390 -f 2882/227/445 2876/228/445 2862/213/445 -f 2862/213/445 2849/214/445 2882/227/445 -f 2845/201/390 2883/202/390 2884/199/390 -f 2884/199/390 2846/200/390 2845/201/390 -f 2882/231/456 2861/233/456 2860/232/456 -f 2860/232/456 2876/224/456 2882/231/456 -f 2876/224/455 2860/232/455 2868/234/455 -f 2868/234/455 2878/225/455 2876/224/455 -f 2878/225/454 2868/234/454 2865/232/454 -f 2865/232/454 2877/224/454 2878/225/454 -f 2877/224/457 2865/232/457 2864/233/457 -f 2864/233/457 2879/231/457 2877/224/457 -f 2853/200/388 2885/199/388 2886/202/388 -f 2886/202/388 2854/201/388 2853/200/388 -f 2857/208/398 2866/236/398 2867/235/398 -f 2867/235/398 2858/207/398 2857/208/398 -f 2858/207/391 2867/235/391 2859/236/391 -f 2859/236/391 2874/208/391 2858/207/391 -f 2881/236/27 2843/238/27 2846/237/27 -f 2846/237/27 2882/231/27 2881/236/27 -f 2882/231/27 2846/237/27 2884/239/27 -f 2884/239/27 2861/233/27 2882/231/27 -f 2861/210/458 2884/241/458 2883/240/458 -f 2883/240/458 2859/209/458 2861/210/458 -f 2859/236/26 2883/238/26 2845/242/26 -f 2845/242/26 2874/208/26 2859/236/26 -f 2874/208/26 2845/242/26 2844/240/26 -f 2844/240/26 2873/209/26 2874/208/26 -f 2856/209/26 2851/240/26 2854/242/26 -f 2854/242/26 2857/208/26 2856/209/26 -f 2857/208/26 2854/242/26 2886/238/26 -f 2886/238/26 2866/236/26 2857/208/26 -f 2866/209/459 2886/240/459 2885/241/459 -f 2885/241/459 2864/210/459 2866/209/459 -f 2864/233/27 2885/239/27 2853/237/27 -f 2853/237/27 2879/231/27 2864/233/27 -f 2879/231/27 2853/237/27 2852/238/27 -f 2852/238/27 2880/236/27 2879/231/27 -f 2887/243/154 2888/246/154 2889/245/154 -f 2889/245/154 2890/244/154 2887/243/154 -f 2887/247/1 2891/250/1 2892/249/1 -f 2892/249/1 2888/248/1 2887/247/1 -f 2888/246/155 2892/252/155 2893/251/155 -f 2893/251/155 2889/245/155 2888/246/155 -f 2889/248/7 2893/249/7 2894/250/7 -f 2894/250/7 2890/247/7 2889/248/7 -f 2895/243/160 2896/246/160 2897/245/160 -f 2897/245/160 2898/244/160 2895/243/160 -f 2895/247/163 2899/250/163 2900/249/163 -f 2900/249/163 2896/248/163 2895/247/163 -f 2896/246/162 2900/252/162 2901/251/162 -f 2901/251/162 2897/245/162 2896/246/162 -f 2897/248/161 2901/249/161 2902/250/161 -f 2902/250/161 2898/247/161 2897/248/161 -f 2903/243/148 2904/246/148 2905/245/148 -f 2905/245/148 2906/244/148 2903/243/148 -f 2903/247/7 2907/250/7 2908/249/7 -f 2908/249/7 2904/248/7 2903/247/7 -f 2904/246/149 2908/252/149 2909/251/149 -f 2909/251/149 2905/245/149 2904/246/149 -f 2905/248/1 2909/249/1 2910/250/1 -f 2910/250/1 2906/247/1 2905/248/1 -f 2911/243/460 2912/246/460 2913/245/460 -f 2913/245/460 2914/244/460 2911/243/460 -f 2911/247/461 2915/250/461 2916/249/461 -f 2916/249/461 2912/248/461 2911/247/461 -f 2912/246/462 2916/252/462 2917/251/462 -f 2917/251/462 2913/245/462 2912/246/462 -f 2913/248/463 2917/249/463 2918/250/463 -f 2918/250/463 2914/247/463 2913/248/463 -f 2919/243/150 2920/246/150 2921/245/150 -f 2921/245/150 2922/244/150 2919/243/150 -f 2919/247/153 2923/250/153 2924/249/153 -f 2924/249/153 2920/248/153 2919/247/153 -f 2920/246/152 2924/252/152 2925/251/152 -f 2925/251/152 2921/245/152 2920/246/152 -f 2921/248/151 2925/249/151 2926/250/151 -f 2926/250/151 2922/247/151 2921/248/151 -f 2927/195/443 2928/198/443 2929/197/443 -f 2929/197/443 2930/196/443 2927/195/443 -f 2931/199/390 2932/202/390 2933/201/390 -f 2933/201/390 2934/200/390 2931/199/390 -f 2935/203/444 2936/206/444 2937/205/444 -f 2937/205/444 2938/204/444 2935/203/444 -f 2939/202/388 2940/199/388 2941/200/388 -f 2941/200/388 2942/201/388 2939/202/388 -f 2943/207/398 2944/209/398 2945/208/398 -f 2945/208/398 2946/207/398 2943/207/398 -f 2947/209/445 2948/211/445 2949/210/445 -f 2938/212/446 2937/214/446 2950/213/446 -f 2950/213/446 2951/196/446 2938/212/446 -f 2952/210/447 2953/211/447 2954/209/447 -f 2955/215/448 2954/209/448 2953/211/448 -f 2953/211/448 2956/216/448 2955/215/448 -f 2957/217/449 2930/196/450 2929/197/450 -f 2929/197/450 2958/218/449 2957/217/449 -f 2959/219/451 2935/203/451 2938/204/451 -f 2938/204/451 2960/220/451 2959/219/451 -f 2961/209/391 2943/207/391 2946/207/391 -f 2946/207/391 2962/208/391 2961/209/391 -f 2938/212/452 2951/196/452 2963/213/452 -f 2963/213/452 2960/214/452 2938/212/452 -f 2955/215/453 2956/216/453 2948/211/453 -f 2948/211/453 2947/209/453 2955/215/453 -f 2964/221/388 2928/221/388 2927/222/388 -f 2927/222/388 2950/222/388 2964/221/388 -f 2950/222/402 2927/222/402 2930/203/402 -f 2930/203/402 2951/203/402 2950/222/402 -f 2951/203/401 2930/203/401 2957/206/401 -f 2957/206/401 2963/206/401 2951/203/401 -f 2963/206/390 2957/206/390 2958/223/390 -f 2958/223/390 2965/223/390 2963/206/390 -f 2965/224/454 2958/224/454 2929/226/454 -f 2929/226/454 2966/225/454 2965/224/454 -f 2966/225/455 2929/226/455 2928/224/455 -f 2928/224/455 2964/224/455 2966/225/455 -f 2960/214/447 2963/213/447 2965/228/447 -f 2965/228/447 2967/227/447 2960/214/447 -f 2967/229/388 2968/221/388 2959/219/388 -f 2959/219/388 2960/220/388 2967/229/388 -f 2936/206/390 2969/223/390 2970/230/390 -f 2970/230/390 2937/205/390 2936/206/390 -f 2970/227/445 2964/228/445 2950/213/445 -f 2950/213/445 2937/214/445 2970/227/445 -f 2933/201/390 2971/202/390 2972/199/390 -f 2972/199/390 2934/200/390 2933/201/390 -f 2970/231/456 2949/233/456 2948/232/456 -f 2948/232/456 2964/224/456 2970/231/456 -f 2964/224/455 2948/232/455 2956/234/455 -f 2956/234/455 2966/225/455 2964/224/455 -f 2966/225/454 2956/234/454 2953/232/454 -f 2953/232/454 2965/224/454 2966/225/454 -f 2965/224/457 2953/232/457 2952/233/457 -f 2952/233/457 2967/231/457 2965/224/457 -f 2941/200/388 2973/199/388 2974/202/388 -f 2974/202/388 2942/201/388 2941/200/388 -f 2945/208/398 2954/236/398 2955/235/398 -f 2955/235/398 2946/207/398 2945/208/398 -f 2946/207/391 2955/235/391 2947/236/391 -f 2947/236/391 2962/208/391 2946/207/391 -f 2969/236/27 2931/238/27 2934/237/27 -f 2934/237/27 2970/231/27 2969/236/27 -f 2970/231/27 2934/237/27 2972/239/27 -f 2972/239/27 2949/233/27 2970/231/27 -f 2949/210/458 2972/241/458 2971/240/458 -f 2971/240/458 2947/209/458 2949/210/458 -f 2947/236/26 2971/238/26 2933/242/26 -f 2933/242/26 2962/208/26 2947/236/26 -f 2962/208/26 2933/242/26 2932/240/26 -f 2932/240/26 2961/209/26 2962/208/26 -f 2944/209/26 2939/240/26 2942/242/26 -f 2942/242/26 2945/208/26 2944/209/26 -f 2945/208/26 2942/242/26 2974/238/26 -f 2974/238/26 2954/236/26 2945/208/26 -f 2954/209/459 2974/240/459 2973/241/459 -f 2973/241/459 2952/210/459 2954/209/459 -f 2952/233/27 2973/239/27 2941/237/27 -f 2941/237/27 2967/231/27 2952/233/27 -f 2967/231/27 2941/237/27 2940/238/27 -f 2940/238/27 2968/236/27 2967/231/27 -f 2975/195/464 2976/198/464 2977/197/4 -f 2977/197/4 2978/196/4 2975/195/464 -f 2979/199/465 2980/202/465 2981/201/465 -f 2981/201/465 2982/200/465 2979/199/465 -f 2983/203/421 2984/206/421 2985/205/421 -f 2985/205/421 2986/204/421 2983/203/421 -f 2987/202/437 2988/199/437 2989/200/437 -f 2989/200/437 2990/201/437 2987/202/437 -f 2991/207/466 2992/209/466 2993/208/466 -f 2993/208/466 2994/207/466 2991/207/466 -f 2995/209/107 2996/211/107 2997/210/107 -f 2986/212/467 2985/214/467 2998/213/467 -f 2998/213/467 2999/196/467 2986/212/467 -f 3000/210/468 3001/211/468 3002/209/468 -f 3003/215/469 3002/209/469 3001/211/469 -f 3001/211/469 3004/216/469 3003/215/469 -f 3005/217/103 2978/196/103 2977/197/103 -f 2977/197/103 3006/218/103 3005/217/103 -f 3007/219/470 2983/203/414 2986/204/414 -f 2986/204/414 3008/220/414 3007/219/470 -f 3009/209/471 2991/207/471 2994/207/471 -f 2994/207/471 3010/208/471 3009/209/471 -f 2986/212/472 2999/196/472 3011/213/472 -f 3011/213/472 3008/214/472 2986/212/472 -f 3003/215/332 3004/216/332 2996/211/332 -f 2996/211/332 2995/209/332 3003/215/332 -f 3012/221/437 2976/221/437 2975/222/437 -f 2975/222/437 2998/222/437 3012/221/437 -f 2998/222/426 2975/222/426 2978/203/426 -f 2978/203/426 2999/203/426 2998/222/426 -f 2999/203/425 2978/203/425 3005/206/425 -f 3005/206/425 3011/206/425 2999/203/425 -f 3011/206/465 3005/206/465 3006/223/465 -f 3006/223/465 3013/223/465 3011/206/465 -f 3013/224/473 3006/224/473 2977/226/473 -f 2977/226/473 3014/225/473 3013/224/473 -f 3014/225/430 2977/226/430 2976/224/430 -f 2976/224/430 3012/224/430 3014/225/430 -f 3008/214/468 3011/213/468 3013/228/468 -f 3013/228/468 3015/227/468 3008/214/468 -f 3015/229/437 3016/221/437 3007/219/437 -f 3007/219/437 3008/220/437 3015/229/437 -f 2984/206/465 3017/223/465 3018/230/465 -f 3018/230/465 2985/205/465 2984/206/465 -f 3018/227/107 3012/228/107 2998/213/107 -f 2998/213/107 2985/214/107 3018/227/107 -f 2981/201/465 3019/202/465 3020/199/465 -f 3020/199/465 2982/200/465 2981/201/465 -f 3018/231/474 2997/233/474 2996/232/474 -f 2996/232/474 3012/224/474 3018/231/474 -f 3012/224/430 2996/232/430 3004/234/430 -f 3004/234/430 3014/225/430 3012/224/430 -f 3014/225/473 3004/234/473 3001/232/473 -f 3001/232/473 3013/224/473 3014/225/473 -f 3013/224/428 3001/232/428 3000/233/428 -f 3000/233/428 3015/231/428 3013/224/428 -f 2989/200/437 3021/199/437 3022/202/437 -f 3022/202/437 2990/201/437 2989/200/437 -f 2993/208/466 3002/236/466 3003/235/466 -f 3003/235/466 2994/207/466 2993/208/466 -f 2994/207/471 3003/235/471 2995/236/471 -f 2995/236/471 3010/208/471 2994/207/471 -f 3017/236/27 2979/238/27 2982/237/27 -f 2982/237/27 3018/231/27 3017/236/27 -f 3018/231/27 2982/237/27 3020/239/27 -f 3020/239/27 2997/233/27 3018/231/27 -f 2997/210/193 3020/241/193 3019/240/193 -f 3019/240/193 2995/209/193 2997/210/193 -f 2995/236/26 3019/238/26 2981/242/26 -f 2981/242/26 3010/208/26 2995/236/26 -f 3010/208/26 2981/242/26 2980/240/26 -f 2980/240/26 3009/209/26 3010/208/26 -f 2992/209/26 2987/240/26 2990/242/26 -f 2990/242/26 2993/208/26 2992/209/26 -f 2993/208/26 2990/242/26 3022/238/26 -f 3022/238/26 3002/236/26 2993/208/26 -f 3002/209/475 3022/240/475 3021/241/475 -f 3021/241/475 3000/210/475 3002/209/475 -f 3000/233/27 3021/239/27 2989/237/27 -f 2989/237/27 3015/231/27 3000/233/27 -f 3015/231/27 2989/237/27 2988/238/27 -f 2988/238/27 3016/236/27 3015/231/27 -f 3023/243/187 3024/246/187 3025/245/187 -f 3025/245/187 3026/244/187 3023/243/187 -f 3023/247/161 3027/250/161 3028/249/161 -f 3028/249/161 3024/248/161 3023/247/161 -f 3024/246/188 3028/252/189 3029/251/188 -f 3029/251/188 3025/245/188 3024/246/188 -f 3025/248/163 3029/249/163 3030/250/163 -f 3030/250/163 3026/247/163 3025/248/163 -f 3031/195/4 3032/198/4 3033/197/4 -f 3033/197/4 3034/196/4 3031/195/4 -f 3035/199/465 3036/202/465 3037/201/465 -f 3037/201/465 3038/200/465 3035/199/465 -f 3039/203/421 3040/206/421 3041/205/421 -f 3041/205/421 3042/204/421 3039/203/421 -f 3043/202/437 3044/199/437 3045/200/437 -f 3045/200/437 3046/201/437 3043/202/437 -f 3047/207/466 3048/209/466 3049/208/466 -f 3049/208/466 3050/207/466 3047/207/466 -f 3051/209/107 3052/211/107 3053/210/107 -f 3042/212/467 3041/214/467 3054/213/467 -f 3054/213/467 3055/196/467 3042/212/467 -f 3056/210/468 3057/211/468 3058/209/468 -f 3059/215/469 3058/209/469 3057/211/469 -f 3057/211/469 3060/216/469 3059/215/469 -f 3061/217/103 3034/196/103 3033/197/103 -f 3033/197/103 3062/218/103 3061/217/103 -f 3063/219/414 3039/203/414 3042/204/470 -f 3042/204/470 3064/220/414 3063/219/414 -f 3065/209/471 3047/207/471 3050/207/471 -f 3050/207/471 3066/208/471 3065/209/471 -f 3042/212/472 3055/196/472 3067/213/472 -f 3067/213/472 3064/214/472 3042/212/472 -f 3059/215/332 3060/216/332 3052/211/332 -f 3052/211/332 3051/209/332 3059/215/332 -f 3068/221/437 3032/221/437 3031/222/437 -f 3031/222/437 3054/222/437 3068/221/437 -f 3054/222/426 3031/222/426 3034/203/426 -f 3034/203/426 3055/203/426 3054/222/426 -f 3055/203/425 3034/203/425 3061/206/425 -f 3061/206/425 3067/206/425 3055/203/425 -f 3067/206/465 3061/206/465 3062/223/465 -f 3062/223/465 3069/223/465 3067/206/465 -f 3069/224/473 3062/224/473 3033/226/473 -f 3033/226/473 3070/225/473 3069/224/473 -f 3070/225/430 3033/226/430 3032/224/430 -f 3032/224/430 3068/224/430 3070/225/430 -f 3064/214/468 3067/213/468 3069/228/468 -f 3069/228/468 3071/227/468 3064/214/468 -f 3071/229/437 3072/221/437 3063/219/437 -f 3063/219/437 3064/220/437 3071/229/437 -f 3040/206/465 3073/223/465 3074/230/465 -f 3074/230/465 3041/205/465 3040/206/465 -f 3074/227/107 3068/228/107 3054/213/107 -f 3054/213/107 3041/214/107 3074/227/107 -f 3037/201/465 3075/202/465 3076/199/465 -f 3076/199/465 3038/200/465 3037/201/465 -f 3074/231/474 3053/233/474 3052/232/474 -f 3052/232/474 3068/224/474 3074/231/474 -f 3068/224/430 3052/232/430 3060/234/430 -f 3060/234/430 3070/225/430 3068/224/430 -f 3070/225/473 3060/234/473 3057/232/473 -f 3057/232/473 3069/224/473 3070/225/473 -f 3069/224/428 3057/232/428 3056/233/428 -f 3056/233/428 3071/231/428 3069/224/428 -f 3045/200/437 3077/199/437 3078/202/437 -f 3078/202/437 3046/201/437 3045/200/437 -f 3049/208/466 3058/236/466 3059/235/466 -f 3059/235/466 3050/207/466 3049/208/466 -f 3050/207/471 3059/235/471 3051/236/471 -f 3051/236/471 3066/208/471 3050/207/471 -f 3073/236/27 3035/238/27 3038/237/27 -f 3038/237/27 3074/231/27 3073/236/27 -f 3074/231/27 3038/237/27 3076/239/27 -f 3076/239/27 3053/233/27 3074/231/27 -f 3053/210/193 3076/241/193 3075/240/193 -f 3075/240/193 3051/209/193 3053/210/193 -f 3051/236/26 3075/238/26 3037/242/26 -f 3037/242/26 3066/208/26 3051/236/26 -f 3066/208/26 3037/242/26 3036/240/26 -f 3036/240/26 3065/209/26 3066/208/26 -f 3048/209/26 3043/240/26 3046/242/26 -f 3046/242/26 3049/208/26 3048/209/26 -f 3049/208/26 3046/242/26 3078/238/26 -f 3078/238/26 3058/236/26 3049/208/26 -f 3058/209/475 3078/240/475 3077/241/475 -f 3077/241/475 3056/210/475 3058/209/475 -f 3056/233/27 3077/239/27 3045/237/27 -f 3045/237/27 3071/231/27 3056/233/27 -f 3071/231/27 3045/237/27 3044/238/27 -f 3044/238/27 3072/236/27 3071/231/27 -f 3079/243/476 3080/246/476 3081/245/476 -f 3081/245/476 3082/244/476 3079/243/476 -f 3079/247/477 3083/250/477 3084/249/477 -f 3084/249/477 3080/248/477 3079/247/477 -f 3080/246/478 3084/252/478 3085/251/478 -f 3085/251/478 3081/245/478 3080/246/478 -f 3081/248/479 3085/249/479 3086/250/479 -f 3086/250/479 3082/247/479 3081/248/479 -f 3087/195/387 3088/198/387 3089/197/387 -f 3089/197/387 3090/196/387 3087/195/387 -f 3091/199/388 3092/202/388 3093/201/388 -f 3093/201/388 3094/200/388 3091/199/388 -f 3095/203/389 3096/206/389 3097/205/389 -f 3097/205/389 3098/204/389 3095/203/389 -f 3099/202/390 3100/199/390 3101/200/390 -f 3101/200/390 3102/201/390 3099/202/390 -f 3103/207/391 3104/209/391 3105/208/391 -f 3105/208/391 3106/207/391 3103/207/391 -f 3107/209/392 3108/211/392 3109/210/392 -f 3098/212/393 3097/214/393 3110/213/393 -f 3110/213/393 3111/196/393 3098/212/393 -f 3112/210/394 3113/211/394 3114/209/394 -f 3115/215/395 3114/209/395 3113/211/395 -f 3113/211/395 3116/216/395 3115/215/395 -f 3117/217/396 3090/196/396 3089/197/396 -f 3089/197/396 3118/218/396 3117/217/396 -f 3119/219/397 3095/203/397 3098/204/397 -f 3098/204/397 3120/220/397 3119/219/397 -f 3121/209/398 3103/207/398 3106/207/398 -f 3106/207/398 3122/208/398 3121/209/398 -f 3098/212/399 3111/196/399 3123/213/399 -f 3123/213/399 3120/214/399 3098/212/399 -f 3115/215/400 3116/216/400 3108/211/400 -f 3108/211/400 3107/209/400 3115/215/400 -f 3124/221/390 3088/221/390 3087/222/390 -f 3087/222/390 3110/222/390 3124/221/390 -f 3110/222/401 3087/222/401 3090/203/401 -f 3090/203/401 3111/203/401 3110/222/401 -f 3111/203/402 3090/203/402 3117/206/402 -f 3117/206/402 3123/206/402 3111/203/402 -f 3123/206/388 3117/206/388 3118/223/388 -f 3118/223/388 3125/223/388 3123/206/388 -f 3125/224/403 3118/224/403 3089/226/403 -f 3089/226/403 3126/225/403 3125/224/403 -f 3126/225/404 3089/226/404 3088/224/404 -f 3088/224/404 3124/224/404 3126/225/404 -f 3120/214/394 3123/213/394 3125/228/394 -f 3125/228/394 3127/227/394 3120/214/394 -f 3127/229/390 3128/221/390 3119/219/390 -f 3119/219/390 3120/220/390 3127/229/390 -f 3096/206/388 3129/223/388 3130/230/388 -f 3130/230/388 3097/205/388 3096/206/388 -f 3130/227/392 3124/228/392 3110/213/392 -f 3110/213/392 3097/214/392 3130/227/392 -f 3093/201/388 3131/202/388 3132/199/388 -f 3132/199/388 3094/200/388 3093/201/388 -f 3130/231/405 3109/233/405 3108/232/405 -f 3108/232/405 3124/224/405 3130/231/405 -f 3124/224/404 3108/232/404 3116/234/404 -f 3116/234/404 3126/225/404 3124/224/404 -f 3126/225/403 3116/234/403 3113/232/403 -f 3113/232/403 3125/224/403 3126/225/403 -f 3125/224/407 3113/232/407 3112/233/407 -f 3112/233/407 3127/231/407 3125/224/407 -f 3101/200/390 3133/199/390 3134/202/390 -f 3134/202/390 3102/201/390 3101/200/390 -f 3105/208/391 3114/236/391 3115/235/391 -f 3115/235/391 3106/207/391 3105/208/391 -f 3106/207/398 3115/235/398 3107/236/398 -f 3107/236/398 3122/208/398 3106/207/398 -f 3129/236/27 3091/238/27 3094/237/27 -f 3094/237/27 3130/231/27 3129/236/27 -f 3130/231/27 3094/237/27 3132/239/27 -f 3132/239/27 3109/233/27 3130/231/27 -f 3109/210/409 3132/241/409 3131/240/409 -f 3131/240/409 3107/209/409 3109/210/409 -f 3107/236/26 3131/238/26 3093/242/26 -f 3093/242/26 3122/208/26 3107/236/26 -f 3122/208/26 3093/242/26 3092/240/26 -f 3092/240/26 3121/209/26 3122/208/26 -f 3104/209/26 3099/240/26 3102/242/26 -f 3102/242/26 3105/208/26 3104/209/26 -f 3105/208/26 3102/242/26 3134/238/26 -f 3134/238/26 3114/236/26 3105/208/26 -f 3114/209/410 3134/240/410 3133/241/410 -f 3133/241/410 3112/210/410 3114/209/410 -f 3112/233/27 3133/239/27 3101/237/27 -f 3101/237/27 3127/231/27 3112/233/27 -f 3127/231/27 3101/237/27 3100/238/27 -f 3100/238/27 3128/236/27 3127/231/27 -f 3135/243/180 3136/246/180 3137/245/180 -f 3137/245/180 3138/244/180 3135/243/180 -f 3135/247/151 3139/250/151 3140/249/151 -f 3140/249/151 3136/248/151 3135/247/151 -f 3136/246/181 3140/252/181 3141/251/182 -f 3141/251/182 3137/245/181 3136/246/181 -f 3137/248/153 3141/249/153 3142/250/153 -f 3142/250/153 3138/247/153 3137/248/153 -f 3143/253/24 3144/256/24 3145/255/24 -f 3145/255/24 3146/254/24 3143/253/24 -f 3147/257/23 3148/258/23 3144/256/23 -f 3144/256/23 3143/253/23 3147/257/23 -f 3149/259/191 3150/260/22 3148/258/191 -f 3148/258/191 3147/257/191 3149/259/191 -f 3151/261/21 3152/264/21 3150/263/21 -f 3150/263/21 3149/262/21 3151/261/21 -f 3153/265/20 3154/266/20 3152/264/20 -f 3152/264/20 3151/261/20 3153/265/20 -f 3155/267/19 3156/268/19 3154/266/19 -f 3154/266/19 3153/265/19 3155/267/19 -f 3157/269/194 3158/270/194 3156/268/18 -f 3156/268/18 3155/267/18 3157/269/194 -f 3159/271/17 3160/272/17 3158/270/17 -f 3158/270/17 3157/269/17 3159/271/17 -f 3161/273/16 3162/274/16 3160/272/16 -f 3160/272/16 3159/271/16 3161/273/16 -f 3163/275/118 3164/276/118 3162/274/15 -f 3162/274/15 3161/273/118 3163/275/118 -f 3165/277/14 3166/278/14 3164/276/14 -f 3164/276/14 3163/275/14 3165/277/14 -f 3146/254/13 3145/255/13 3166/278/192 -f 3166/278/192 3165/277/192 3146/254/13 -f 3144/279/27 3167/282/27 3168/281/27 -f 3168/281/27 3145/280/27 3144/279/27 -f 3169/283/27 3170/284/27 3171/282/27 -f 3171/282/27 3172/279/27 3169/283/27 -f 3150/285/27 3173/285/27 3174/284/27 -f 3174/284/27 3148/283/27 3150/285/27 -f 3175/286/27 3176/287/27 3177/285/27 -f 3177/285/27 3178/285/27 3175/286/27 -f 3154/288/27 3179/289/27 3180/287/27 -f 3180/287/27 3152/286/27 3154/288/27 -f 3181/290/27 3182/291/27 3183/289/27 -f 3183/289/27 3184/288/27 3181/290/27 -f 3158/292/27 3185/293/27 3186/291/27 -f 3186/291/27 3156/290/27 3158/292/27 -f 3187/294/27 3188/295/27 3189/293/27 -f 3189/293/27 3190/292/27 3187/294/27 -f 3162/296/27 3191/297/27 3192/295/27 -f 3192/295/27 3160/294/27 3162/296/27 -f 3193/298/27 3194/299/27 3195/297/27 -f 3195/297/27 3196/296/27 3193/298/27 -f 3166/300/27 3197/300/27 3198/299/27 -f 3198/299/27 3164/298/27 3166/300/27 -f 3199/280/27 3200/281/27 3201/300/27 -f 3201/300/27 3202/300/27 3199/280/27 -f 3167/301/18 3203/304/18 3204/303/18 -f 3204/303/18 3168/302/18 3167/301/18 -f 3174/305/17 3205/306/17 3203/304/17 -f 3203/304/17 3167/301/17 3174/305/17 -f 3173/307/16 3206/308/16 3205/306/16 -f 3205/306/16 3174/305/16 3173/307/16 -f 3180/309/15 3207/310/15 3206/308/15 -f 3206/308/15 3173/307/15 3180/309/15 -f 3179/311/14 3208/312/14 3207/310/14 -f 3207/310/14 3180/309/14 3179/311/14 -f 3186/313/13 3209/314/13 3208/312/13 -f 3208/312/13 3179/311/13 3186/313/13 -f 3185/315/25 3210/316/25 3209/314/24 -f 3209/314/24 3186/313/24 3185/315/25 -f 3192/317/23 3211/318/23 3210/316/23 -f 3210/316/23 3185/315/23 3192/317/23 -f 3191/319/22 3212/320/22 3211/318/22 -f 3211/318/22 3192/317/22 3191/319/22 -f 3198/321/21 3213/324/21 3212/323/178 -f 3212/323/178 3191/322/21 3198/321/21 -f 3197/325/20 3214/326/20 3213/324/20 -f 3213/324/20 3198/321/20 3197/325/20 -f 3168/302/19 3204/303/19 3214/326/190 -f 3214/326/190 3197/325/190 3168/302/19 -f 3203/327/27 3215/329/27 3204/328/27 -f 3205/330/27 3215/329/27 3203/327/27 -f 3206/331/27 3215/329/27 3205/330/27 -f 3207/332/27 3215/329/27 3206/331/27 -f 3208/333/27 3215/329/27 3207/332/27 -f 3209/334/27 3215/329/27 3208/333/27 -f 3210/335/27 3215/329/27 3209/334/27 -f 3211/336/27 3215/329/27 3210/335/27 -f 3212/337/27 3215/329/27 3211/336/27 -f 3213/338/27 3215/329/27 3212/337/27 -f 3214/339/27 3215/329/27 3213/338/27 -f 3204/328/27 3215/329/27 3214/339/27 -f 3148/258/23 3169/341/23 3172/340/23 -f 3172/340/23 3144/256/23 3148/258/23 -f 3144/279/153 3172/279/153 3171/282/153 -f 3171/282/153 3167/282/153 3144/279/153 -f 3167/301/17 3171/343/17 3170/342/17 -f 3170/342/17 3174/305/17 3167/301/17 -f 3174/284/196 3170/284/196 3169/283/196 -f 3169/283/196 3148/283/196 3174/284/196 -f 3152/264/21 3175/345/21 3178/344/178 -f 3178/344/178 3150/263/21 3152/264/21 -f 3150/285/1 3178/285/1 3177/285/1 -f 3177/285/1 3173/285/1 3150/285/1 -f 3173/307/15 3177/347/15 3176/346/15 -f 3176/346/15 3180/309/15 3173/307/15 -f 3180/287/195 3176/287/195 3175/286/195 -f 3175/286/195 3152/286/195 3180/287/195 -f 3156/268/19 3181/349/19 3184/348/19 -f 3184/348/19 3154/266/19 3156/268/19 -f 3154/288/161 3184/288/161 3183/289/161 -f 3183/289/161 3179/289/161 3154/288/161 -f 3179/311/13 3183/351/13 3182/350/13 -f 3182/350/13 3186/313/13 3179/311/13 -f 3186/291/4 3182/291/4 3181/290/4 -f 3181/290/4 3156/290/4 3186/291/4 -f 3160/272/17 3187/353/17 3190/352/17 -f 3190/352/17 3158/270/17 3160/272/17 -f 3158/292/151 3190/292/151 3189/293/151 -f 3189/293/151 3185/293/151 3158/292/151 -f 3185/315/23 3189/355/23 3188/354/23 -f 3188/354/23 3192/317/23 3185/315/23 -f 3192/295/198 3188/295/198 3187/294/198 -f 3187/294/198 3160/294/198 3192/295/198 -f 3164/276/118 3193/357/15 3196/356/15 -f 3196/356/15 3162/274/15 3164/276/118 -f 3162/296/7 3196/296/7 3195/297/7 -f 3195/297/7 3191/297/7 3162/296/7 -f 3191/322/21 3195/359/21 3194/358/21 -f 3194/358/21 3198/321/21 3191/322/21 -f 3198/299/197 3194/299/197 3193/298/197 -f 3193/298/197 3164/298/197 3198/299/197 -f 3145/255/13 3199/361/13 3202/360/13 -f 3202/360/13 3166/278/192 3145/255/13 -f 3166/300/163 3202/300/163 3201/300/163 -f 3201/300/163 3197/300/163 3166/300/163 -f 3197/325/190 3201/363/190 3200/362/19 -f 3200/362/19 3168/302/19 3197/325/190 -f 3168/281/10 3200/281/10 3199/280/10 -f 3199/280/10 3145/280/10 3168/281/10 -f 3216/1/7 3217/2/8 3218/3/8 -f 3218/3/8 3219/4/7 3216/1/7 -f 3217/2/8 3220/5/9 3221/6/9 -f 3221/6/9 3218/3/8 3217/2/8 -f 3220/5/9 3222/7/10 3223/8/10 -f 3223/8/10 3221/6/9 3220/5/9 -f 3222/9/10 3224/10/11 3225/11/11 -f 3225/11/11 3223/12/10 3222/9/10 -f 3224/10/11 3226/13/12 3227/14/12 -f 3227/14/12 3225/11/11 3224/10/11 -f 3226/13/12 3228/15/1 3229/16/1 -f 3229/16/1 3227/14/12 3226/13/12 -f 3228/15/1 3230/17/2 3231/18/2 -f 3231/18/2 3229/16/1 3228/15/1 -f 3230/17/2 3232/19/3 3233/20/3 -f 3233/20/3 3231/18/2 3230/17/2 -f 3232/19/3 3234/21/4 3235/22/4 -f 3235/22/4 3233/20/3 3232/19/3 -f 3234/21/4 3236/23/5 3237/24/5 -f 3237/24/5 3235/22/4 3234/21/4 -f 3236/23/5 3238/25/6 3239/26/6 -f 3239/26/6 3237/24/5 3236/23/5 -f 3238/25/6 3216/1/7 3219/4/7 -f 3219/4/7 3239/26/6 3238/25/6 -f 3240/27/19 3241/28/19 3242/29/19 -f 3242/29/19 3243/30/19 3240/27/19 -f 3244/31/20 3240/27/20 3243/30/20 -f 3243/30/20 3245/32/20 3244/31/20 -f 3246/33/21 3244/31/21 3245/32/21 -f 3245/32/21 3247/34/21 3246/33/21 -f 3248/35/22 3246/36/22 3247/37/22 -f 3247/37/22 3249/38/22 3248/35/22 -f 3250/39/23 3248/35/23 3249/38/23 -f 3249/38/23 3251/40/23 3250/39/23 -f 3252/41/24 3250/39/24 3251/40/24 -f 3251/40/24 3253/42/24 3252/41/24 -f 3254/43/13 3252/41/13 3253/42/13 -f 3253/42/13 3255/44/13 3254/43/13 -f 3256/45/14 3254/43/14 3255/44/14 -f 3255/44/14 3257/46/14 3256/45/14 -f 3258/47/15 3256/45/15 3257/46/15 -f 3257/46/15 3259/48/15 3258/47/15 -f 3260/49/16 3258/47/16 3259/48/16 -f 3259/48/16 3261/50/16 3260/49/16 -f 3262/51/17 3260/49/17 3261/50/17 -f 3261/50/17 3263/52/17 3262/51/17 -f 3241/28/18 3262/51/194 3263/52/18 -f 3263/52/18 3242/29/18 3241/28/18 -f 3217/53/26 3216/54/26 3241/54/26 -f 3241/54/26 3240/53/26 3217/53/26 -f 3216/54/26 3238/55/26 3262/55/26 -f 3262/55/26 3241/54/26 3216/54/26 -f 3238/55/26 3236/56/26 3260/56/26 -f 3260/56/26 3262/55/26 3238/55/26 -f 3236/56/26 3234/57/26 3258/57/26 -f 3258/57/26 3260/56/26 3236/56/26 -f 3234/57/26 3232/58/26 3256/59/26 -f 3256/59/26 3258/57/26 3234/57/26 -f 3232/58/26 3230/60/26 3254/61/26 -f 3254/61/26 3256/59/26 3232/58/26 -f 3230/60/26 3228/62/26 3252/62/26 -f 3252/62/26 3254/61/26 3230/60/26 -f 3228/62/26 3226/63/26 3250/64/26 -f 3250/64/26 3252/62/26 3228/62/26 -f 3226/63/26 3224/65/26 3248/66/26 -f 3248/66/26 3250/64/26 3226/63/26 -f 3224/65/26 3222/67/26 3246/67/26 -f 3246/67/26 3248/66/26 3224/65/26 -f 3222/67/26 3220/68/26 3244/68/26 -f 3244/68/26 3246/67/26 3222/67/26 -f 3220/68/26 3217/53/26 3240/53/26 -f 3240/53/26 3244/68/26 3220/68/26 -f 3264/54/27 3265/53/27 3243/53/27 -f 3243/53/27 3242/54/27 3264/54/27 -f 3265/53/27 3266/68/27 3245/68/27 -f 3245/68/27 3243/53/27 3265/53/27 -f 3266/68/27 3267/67/27 3247/67/27 -f 3247/67/27 3245/68/27 3266/68/27 -f 3267/67/27 3268/65/27 3249/66/27 -f 3249/66/27 3247/67/27 3267/67/27 -f 3268/65/27 3269/63/27 3251/64/27 -f 3251/64/27 3249/66/27 3268/65/27 -f 3269/63/27 3270/62/27 3253/62/27 -f 3253/62/27 3251/64/27 3269/63/27 -f 3270/62/27 3271/60/27 3255/61/27 -f 3255/61/27 3253/62/27 3270/62/27 -f 3271/60/27 3272/58/27 3257/59/27 -f 3257/59/27 3255/61/27 3271/60/27 -f 3272/58/27 3273/57/27 3259/57/27 -f 3259/57/27 3257/59/27 3272/58/27 -f 3273/57/27 3274/56/27 3261/56/27 -f 3261/56/27 3259/57/27 3273/57/27 -f 3274/56/27 3275/55/27 3263/55/27 -f 3263/55/27 3261/56/27 3274/56/27 -f 3275/55/27 3264/54/27 3242/54/27 -f 3242/54/27 3263/55/27 3275/55/27 -f 3264/69/7 3276/70/7 3277/71/8 -f 3277/71/8 3265/72/8 3264/69/7 -f 3265/72/8 3277/71/8 3278/73/20 -f 3278/73/20 3266/74/20 3265/72/8 -f 3266/74/21 3278/73/21 3279/75/21 -f 3279/75/21 3267/76/21 3266/74/21 -f 3267/76/22 3279/75/22 3280/77/11 -f 3280/77/11 3268/78/11 3267/76/22 -f 3268/78/11 3280/77/11 3281/79/12 -f 3281/79/12 3269/80/12 3268/78/11 -f 3269/81/12 3281/82/12 3282/83/1 -f 3282/83/1 3270/84/1 3269/81/12 -f 3270/84/1 3282/83/1 3283/85/2 -f 3283/85/2 3271/86/2 3270/84/1 -f 3271/86/2 3283/85/2 3284/87/3 -f 3284/87/3 3272/88/3 3271/86/2 -f 3272/88/3 3284/87/3 3285/89/4 -f 3285/89/4 3273/90/4 3272/88/3 -f 3273/90/4 3285/89/4 3286/91/5 -f 3286/91/5 3274/92/5 3273/90/4 -f 3274/92/5 3286/91/5 3287/93/6 -f 3287/93/6 3275/94/6 3274/92/5 -f 3275/94/6 3287/93/6 3276/70/7 -f 3276/70/7 3264/69/7 3275/94/6 -f 3288/95/26 3289/96/26 3290/96/26 -f 3290/96/26 3291/95/26 3288/95/26 -f 3292/97/26 3288/95/26 3291/95/26 -f 3291/95/26 3293/97/26 3292/97/26 -f 3294/67/26 3292/97/26 3293/97/26 -f 3293/97/26 3295/98/26 3294/67/26 -f 3296/99/26 3294/67/26 3295/98/26 -f 3295/98/26 3297/99/26 3296/99/26 -f 3298/100/26 3296/99/26 3297/99/26 -f 3297/99/26 3299/100/26 3298/100/26 -f 3300/101/26 3298/100/26 3299/100/26 -f 3299/100/26 3301/101/26 3300/101/26 -f 3302/61/26 3300/101/26 3301/101/26 -f 3301/101/26 3303/61/26 3302/61/26 -f 3304/59/26 3302/61/26 3303/61/26 -f 3303/61/26 3305/102/26 3304/59/26 -f 3306/103/26 3304/59/26 3305/102/26 -f 3305/102/26 3307/103/26 3306/103/26 -f 3308/104/26 3306/103/26 3307/103/26 -f 3307/103/26 3309/105/26 3308/104/26 -f 3310/106/26 3308/104/26 3309/105/26 -f 3309/105/26 3311/106/26 3310/106/26 -f 3289/96/26 3310/106/26 3311/106/26 -f 3311/106/26 3290/96/26 3289/96/26 -f 3291/107/34 3290/108/34 3312/109/34 -f 3312/109/34 3313/110/34 3291/107/34 -f 3293/111/35 3291/107/35 3313/110/35 -f 3313/110/35 3314/112/35 3293/111/35 -f 3295/113/36 3293/111/36 3314/112/36 -f 3314/112/36 3315/114/36 3295/113/36 -f 3297/115/37 3295/113/37 3315/114/37 -f 3315/114/37 3316/116/37 3297/115/37 -f 3299/117/38 3297/115/38 3316/116/38 -f 3316/116/38 3317/118/38 3299/117/38 -f 3301/119/39 3299/117/39 3317/118/39 -f 3317/118/39 3318/120/39 3301/119/39 -f 3303/121/28 3301/119/28 3318/120/28 -f 3318/120/28 3319/122/28 3303/121/28 -f 3305/123/29 3303/121/29 3319/122/29 -f 3319/122/29 3320/124/29 3305/123/29 -f 3307/125/30 3305/123/30 3320/124/30 -f 3320/124/30 3321/126/30 3307/125/30 -f 3309/127/31 3307/128/31 3321/129/31 -f 3321/129/31 3322/130/31 3309/127/31 -f 3311/131/32 3309/127/32 3322/130/32 -f 3322/130/32 3323/132/32 3311/131/32 -f 3290/108/33 3311/131/33 3323/132/33 -f 3323/132/33 3312/109/33 3290/108/33 -f 3313/110/48 3312/109/48 3324/133/48 -f 3324/133/48 3325/134/48 3313/110/48 -f 3314/112/49 3313/110/49 3325/134/49 -f 3325/134/49 3326/135/49 3314/112/49 -f 3315/114/50 3314/112/50 3326/135/50 -f 3326/135/50 3327/136/50 3315/114/50 -f 3316/116/51 3315/114/51 3327/136/52 -f 3327/136/52 3328/137/51 3316/116/51 -f 3317/118/53 3316/116/53 3328/137/53 -f 3328/137/53 3329/138/53 3317/118/53 -f 3318/120/54 3317/118/54 3329/138/54 -f 3329/138/54 3330/139/54 3318/120/54 -f 3319/122/386 3318/120/40 3330/139/40 -f 3330/139/40 3331/140/40 3319/122/386 -f 3320/124/41 3319/122/41 3331/140/41 -f 3331/140/41 3332/141/41 3320/124/41 -f 3321/126/42 3320/124/42 3332/141/42 -f 3332/141/42 3333/142/43 3321/126/42 -f 3322/130/44 3321/129/44 3333/143/44 -f 3333/143/44 3334/144/44 3322/130/44 -f 3323/132/45 3322/130/45 3334/144/45 -f 3334/144/45 3335/145/45 3323/132/45 -f 3312/109/46 3323/132/385 3335/145/46 -f 3335/145/46 3324/133/46 3312/109/46 -f 3336/146/64 3337/147/64 3277/148/64 -f 3277/148/64 3276/149/64 3336/146/64 -f 3337/147/66 3338/150/66 3278/151/65 -f 3278/151/65 3277/148/65 3337/147/66 -f 3338/152/67 3339/153/67 3279/154/67 -f 3279/154/67 3278/155/67 3338/152/67 -f 3339/153/68 3340/142/68 3280/156/68 -f 3280/156/68 3279/154/68 3339/153/68 -f 3340/142/70 3341/157/70 3281/158/69 -f 3281/158/69 3280/156/69 3340/142/70 -f 3341/157/71 3342/159/71 3282/160/71 -f 3282/160/71 3281/158/71 3341/157/71 -f 3342/159/56 3343/161/56 3283/162/56 -f 3283/162/56 3282/160/56 3342/159/56 -f 3343/161/57 3344/163/57 3284/164/58 -f 3284/164/58 3283/162/58 3343/161/57 -f 3344/163/59 3345/165/59 3285/166/59 -f 3285/166/59 3284/164/59 3344/163/59 -f 3345/165/60 3346/167/60 3286/168/60 -f 3286/168/60 3285/166/60 3345/165/60 -f 3346/167/61 3347/169/61 3287/170/61 -f 3287/170/61 3286/168/62 3346/167/61 -f 3347/169/63 3336/146/63 3276/149/63 -f 3276/149/63 3287/170/63 3347/169/63 -f 3289/171/7 3288/172/8 3337/173/8 -f 3337/173/8 3336/174/7 3289/171/7 -f 3288/172/8 3292/175/9 3338/176/9 -f 3338/176/9 3337/173/8 3288/172/8 -f 3292/177/9 3294/178/10 3339/179/10 -f 3339/179/10 3338/180/9 3292/177/9 -f 3294/178/10 3296/86/11 3340/181/11 -f 3340/181/11 3339/179/10 3294/178/10 -f 3296/86/11 3298/182/12 3341/183/12 -f 3341/183/12 3340/181/11 3296/86/11 -f 3298/182/12 3300/184/1 3342/185/1 -f 3342/185/1 3341/183/12 3298/182/12 -f 3300/184/1 3302/186/2 3343/187/2 -f 3343/187/2 3342/185/1 3300/184/1 -f 3302/186/2 3304/188/3 3344/189/3 -f 3344/189/3 3343/187/2 3302/186/2 -f 3304/188/3 3306/190/4 3345/191/4 -f 3345/191/4 3344/189/3 3304/188/3 -f 3306/190/4 3308/76/5 3346/192/5 -f 3346/192/5 3345/191/4 3306/190/4 -f 3308/76/5 3310/193/6 3347/194/6 -f 3347/194/6 3346/192/5 3308/76/5 -f 3310/193/6 3289/171/7 3336/174/7 -f 3336/174/7 3347/194/6 3310/193/6 -f 3348/195/131 3349/196/131 3350/197/131 -f 3350/197/131 3351/198/131 3348/195/131 -f 3352/199/75 3353/200/75 3354/201/75 -f 3354/201/75 3355/202/75 3352/199/75 -f 3356/203/132 3357/204/132 3358/205/132 -f 3358/205/132 3359/206/132 3356/203/132 -f 3360/202/73 3361/201/73 3362/200/73 -f 3362/200/73 3363/199/73 3360/202/73 -f 3364/207/83 3365/207/83 3366/208/83 -f 3366/208/83 3367/209/83 3364/207/83 -f 3368/209/133 3369/210/133 3370/211/133 -f 3357/212/134 3371/196/134 3372/213/134 -f 3372/213/134 3358/214/134 3357/212/134 -f 3373/210/135 3374/209/135 3375/211/135 -f 3376/215/136 3377/216/136 3375/211/136 -f 3375/211/136 3374/209/136 3376/215/136 -f 3378/217/137 3379/218/137 3350/197/137 -f 3350/197/137 3349/196/137 3378/217/137 -f 3380/219/139 3381/220/139 3357/204/139 -f 3357/204/139 3356/203/139 3380/219/139 -f 3382/209/76 3383/208/76 3365/207/76 -f 3365/207/76 3364/207/76 3382/209/76 -f 3357/212/140 3381/214/140 3384/213/140 -f 3384/213/140 3371/196/140 3357/212/140 -f 3376/215/141 3368/209/141 3370/211/141 -f 3370/211/141 3377/216/141 3376/215/141 -f 3385/221/73 3372/222/73 3348/222/73 -f 3348/222/73 3351/221/73 3385/221/73 -f 3372/222/87 3371/203/87 3349/203/87 -f 3349/203/87 3348/222/87 3372/222/87 -f 3371/203/86 3384/206/86 3378/206/86 -f 3378/206/86 3349/203/86 3371/203/86 -f 3384/206/75 3386/223/75 3379/223/75 -f 3379/223/75 3378/206/75 3384/206/75 -f 3386/224/142 3387/225/142 3350/226/142 -f 3350/226/142 3379/224/142 3386/224/142 -f 3387/225/143 3385/224/143 3351/224/143 -f 3351/224/143 3350/226/143 3387/225/143 -f 3381/214/135 3388/227/135 3386/228/135 -f 3386/228/135 3384/213/135 3381/214/135 -f 3388/229/73 3381/220/73 3380/219/73 -f 3380/219/73 3389/221/73 3388/229/73 -f 3359/206/75 3358/205/75 3390/230/75 -f 3390/230/75 3391/223/75 3359/206/75 -f 3390/227/133 3358/214/133 3372/213/133 -f 3372/213/133 3385/228/133 3390/227/133 -f 3354/201/75 3353/200/75 3392/199/75 -f 3392/199/75 3393/202/75 3354/201/75 -f 3390/231/144 3385/224/144 3370/232/144 -f 3370/232/144 3369/233/144 3390/231/144 -f 3385/224/143 3387/225/143 3377/234/143 -f 3377/234/143 3370/232/143 3385/224/143 -f 3387/225/142 3386/224/142 3375/232/142 -f 3375/232/142 3377/234/142 3387/225/142 -f 3386/224/145 3388/231/145 3373/233/145 -f 3373/233/145 3375/232/145 3386/224/145 -f 3362/200/73 3361/201/73 3394/202/73 -f 3394/202/73 3395/199/73 3362/200/73 -f 3366/208/83 3365/207/83 3376/235/83 -f 3376/235/83 3374/236/83 3366/208/83 -f 3365/207/76 3383/208/76 3368/236/76 -f 3368/236/76 3376/235/76 3365/207/76 -f 3391/236/27 3390/231/27 3353/237/27 -f 3353/237/27 3352/238/27 3391/236/27 -f 3390/231/27 3369/233/27 3392/239/27 -f 3392/239/27 3353/237/27 3390/231/27 -f 3369/210/480 3368/209/480 3393/240/480 -f 3393/240/480 3392/241/480 3369/210/480 -f 3368/236/26 3383/208/26 3354/242/26 -f 3354/242/26 3393/238/26 3368/236/26 -f 3383/208/26 3382/209/26 3355/240/26 -f 3355/240/26 3354/242/26 3383/208/26 -f 3367/209/26 3366/208/26 3361/242/26 -f 3361/242/26 3360/240/26 3367/209/26 -f 3366/208/26 3374/236/26 3394/238/26 -f 3394/238/26 3361/242/26 3366/208/26 -f 3374/209/147 3373/210/147 3395/241/147 -f 3395/241/147 3394/240/147 3374/209/147 -f 3373/233/27 3388/231/27 3362/237/27 -f 3362/237/27 3395/239/27 3373/233/27 -f 3388/231/27 3389/236/27 3363/238/27 -f 3363/238/27 3362/237/27 3388/231/27 -f 3396/195/10 3397/196/10 3398/197/10 -f 3398/197/10 3399/198/10 3396/195/10 -f 3400/199/101 3401/200/100 3402/201/100 -f 3402/201/100 3403/202/101 3400/199/101 -f 3404/203/108 3405/204/108 3406/205/108 -f 3406/205/108 3407/206/108 3404/203/108 -f 3408/202/98 3409/201/97 3410/200/97 -f 3410/200/97 3411/199/98 3408/202/98 -f 3412/207/166 3413/207/166 3414/208/166 -f 3414/208/166 3415/209/166 3412/207/166 -f 3416/209/167 3417/210/167 3418/211/167 -f 3405/212/168 3419/196/168 3420/213/168 -f 3420/213/168 3406/214/168 3405/212/168 -f 3421/210/169 3422/209/169 3423/211/169 -f 3424/215/170 3425/216/170 3423/211/170 -f 3423/211/170 3422/209/170 3424/215/170 -f 3426/217/171 3427/218/171 3398/197/171 -f 3398/197/171 3397/196/171 3426/217/171 -f 3428/219/99 3429/220/99 3405/204/99 -f 3405/204/99 3404/203/99 3428/219/99 -f 3430/209/173 3431/208/173 3413/207/173 -f 3413/207/173 3412/207/173 3430/209/173 -f 3405/212/174 3429/214/174 3432/213/174 -f 3432/213/174 3419/196/174 3405/212/174 -f 3424/215/175 3416/209/175 3418/211/175 -f 3418/211/175 3425/216/175 3424/215/175 -f 3433/221/98 3420/222/98 3396/222/97 -f 3396/222/97 3399/221/97 3433/221/98 -f 3420/222/113 3419/203/113 3397/203/113 -f 3397/203/113 3396/222/113 3420/222/113 -f 3419/203/112 3432/206/112 3426/206/112 -f 3426/206/112 3397/203/112 3419/203/112 -f 3432/206/100 3434/223/100 3427/223/100 -f 3427/223/100 3426/206/100 3432/206/100 -f 3434/224/176 3435/225/176 3398/226/176 -f 3398/226/176 3427/224/176 3434/224/176 -f 3435/225/117 3433/224/117 3399/224/117 -f 3399/224/117 3398/226/117 3435/225/117 -f 3429/214/169 3436/227/169 3434/228/169 -f 3434/228/169 3432/213/169 3429/214/169 -f 3436/229/98 3429/220/98 3428/219/98 -f 3428/219/98 3437/221/98 3436/229/98 -f 3407/206/100 3406/205/100 3438/230/100 -f 3438/230/100 3439/223/100 3407/206/100 -f 3438/227/167 3406/214/167 3420/213/167 -f 3420/213/167 3433/228/167 3438/227/167 -f 3402/201/100 3401/200/100 3440/199/101 -f 3440/199/101 3441/202/101 3402/201/100 -f 3438/231/481 3433/224/481 3418/232/481 -f 3418/232/481 3417/233/481 3438/231/481 -f 3433/224/117 3435/225/117 3425/234/117 -f 3425/234/117 3418/232/117 3433/224/117 -f 3435/225/176 3434/224/176 3423/232/176 -f 3423/232/176 3425/234/176 3435/225/176 -f 3434/224/115 3436/231/115 3421/233/115 -f 3421/233/115 3423/232/115 3434/224/115 -f 3410/200/97 3409/201/97 3442/202/98 -f 3442/202/98 3443/199/98 3410/200/97 -f 3414/208/166 3413/207/166 3424/235/166 -f 3424/235/166 3422/236/166 3414/208/166 -f 3413/207/173 3431/208/173 3416/236/173 -f 3416/236/173 3424/235/173 3413/207/173 -f 3439/236/27 3438/231/27 3401/237/27 -f 3401/237/27 3400/238/27 3439/236/27 -f 3438/231/27 3417/233/27 3440/239/27 -f 3440/239/27 3401/237/27 3438/231/27 -f 3417/210/178 3416/209/178 3441/240/178 -f 3441/240/178 3440/241/178 3417/210/178 -f 3416/236/26 3431/208/26 3402/242/26 -f 3402/242/26 3441/238/26 3416/236/26 -f 3431/208/26 3430/209/26 3403/240/26 -f 3403/240/26 3402/242/26 3431/208/26 -f 3415/209/26 3414/208/26 3409/242/26 -f 3409/242/26 3408/240/26 3415/209/26 -f 3414/208/26 3422/236/26 3442/238/26 -f 3442/238/26 3409/242/26 3414/208/26 -f 3422/209/179 3421/210/179 3443/241/179 -f 3443/241/179 3442/240/179 3422/209/179 -f 3421/233/27 3436/231/27 3410/237/27 -f 3410/237/27 3443/239/27 3421/233/27 -f 3436/231/27 3437/236/27 3411/238/27 -f 3411/238/27 3410/237/27 3436/231/27 -f 3444/243/183 3445/244/183 3446/245/183 -f 3446/245/183 3447/246/183 3444/243/183 -f 3444/247/184 3447/248/184 3448/249/184 -f 3448/249/184 3449/250/184 3444/247/184 -f 3447/246/185 3446/245/185 3450/251/185 -f 3450/251/185 3448/252/185 3447/246/185 -f 3446/248/186 3445/247/186 3451/250/186 -f 3451/250/186 3450/249/186 3446/248/186 -f 3452/195/164 3453/196/164 3454/197/164 -f 3454/197/164 3455/198/164 3452/195/164 -f 3456/199/101 3457/200/100 3458/201/100 -f 3458/201/100 3459/202/101 3456/199/101 -f 3460/203/108 3461/204/108 3462/205/108 -f 3462/205/108 3463/206/108 3460/203/108 -f 3464/202/98 3465/201/97 3466/200/97 -f 3466/200/97 3467/199/98 3464/202/98 -f 3468/207/166 3469/207/166 3470/208/166 -f 3470/208/166 3471/209/166 3468/207/166 -f 3472/209/167 3473/210/167 3474/211/167 -f 3461/212/168 3475/196/168 3476/213/168 -f 3476/213/168 3462/214/168 3461/212/168 -f 3477/210/169 3478/209/169 3479/211/169 -f 3480/215/170 3481/216/170 3479/211/170 -f 3479/211/170 3478/209/170 3480/215/170 -f 3482/217/171 3483/218/171 3454/197/171 -f 3454/197/171 3453/196/171 3482/217/171 -f 3484/219/172 3485/220/172 3461/204/99 -f 3461/204/99 3460/203/99 3484/219/172 -f 3486/209/173 3487/208/173 3469/207/173 -f 3469/207/173 3468/207/173 3486/209/173 -f 3461/212/174 3485/214/174 3488/213/174 -f 3488/213/174 3475/196/174 3461/212/174 -f 3480/215/175 3472/209/175 3474/211/175 -f 3474/211/175 3481/216/175 3480/215/175 -f 3489/221/98 3476/222/98 3452/222/98 -f 3452/222/98 3455/221/98 3489/221/98 -f 3476/222/113 3475/203/113 3453/203/113 -f 3453/203/113 3452/222/113 3476/222/113 -f 3475/203/112 3488/206/112 3482/206/112 -f 3482/206/112 3453/203/112 3475/203/112 -f 3488/206/100 3490/223/100 3483/223/100 -f 3483/223/100 3482/206/100 3488/206/100 -f 3490/224/176 3491/225/176 3454/226/176 -f 3454/226/176 3483/224/176 3490/224/176 -f 3491/225/117 3489/224/117 3455/224/117 -f 3455/224/117 3454/226/117 3491/225/117 -f 3485/214/169 3492/227/169 3490/228/169 -f 3490/228/169 3488/213/169 3485/214/169 -f 3492/229/125 3485/220/125 3484/219/97 -f 3484/219/97 3493/221/97 3492/229/125 -f 3463/206/100 3462/205/101 3494/230/101 -f 3494/230/101 3495/223/100 3463/206/100 -f 3494/227/167 3462/214/167 3476/213/167 -f 3476/213/167 3489/228/167 3494/227/167 -f 3458/201/100 3457/200/100 3496/199/101 -f 3496/199/101 3497/202/101 3458/201/100 -f 3494/231/481 3489/224/481 3474/232/481 -f 3474/232/481 3473/233/481 3494/231/481 -f 3489/224/117 3491/225/117 3481/234/117 -f 3481/234/117 3474/232/117 3489/224/117 -f 3491/225/176 3490/224/176 3479/232/176 -f 3479/232/176 3481/234/176 3491/225/176 -f 3490/224/115 3492/231/115 3477/233/115 -f 3477/233/115 3479/232/115 3490/224/115 -f 3466/200/97 3465/201/97 3498/202/98 -f 3498/202/98 3499/199/98 3466/200/97 -f 3470/208/166 3469/207/166 3480/235/166 -f 3480/235/166 3478/236/166 3470/208/166 -f 3469/207/173 3487/208/173 3472/236/173 -f 3472/236/173 3480/235/173 3469/207/173 -f 3495/236/27 3494/231/27 3457/237/27 -f 3457/237/27 3456/238/27 3495/236/27 -f 3494/231/27 3473/233/27 3496/239/27 -f 3496/239/27 3457/237/27 3494/231/27 -f 3473/210/178 3472/209/178 3497/240/178 -f 3497/240/178 3496/241/178 3473/210/178 -f 3472/236/26 3487/208/26 3458/242/26 -f 3458/242/26 3497/238/26 3472/236/26 -f 3487/208/26 3486/209/26 3459/240/26 -f 3459/240/26 3458/242/26 3487/208/26 -f 3471/209/26 3470/208/26 3465/242/26 -f 3465/242/26 3464/240/26 3471/209/26 -f 3470/208/26 3478/236/26 3498/238/26 -f 3498/238/26 3465/242/26 3470/208/26 -f 3478/209/179 3477/210/179 3499/241/179 -f 3499/241/179 3498/240/179 3478/209/179 -f 3477/233/27 3492/231/27 3466/237/27 -f 3466/237/27 3499/239/27 3477/233/27 -f 3492/231/27 3493/236/27 3467/238/27 -f 3467/238/27 3466/237/27 3492/231/27 -f 3500/243/156 3501/244/156 3502/245/156 -f 3502/245/156 3503/246/156 3500/243/156 -f 3500/247/157 3503/248/157 3504/249/157 -f 3504/249/157 3505/250/157 3500/247/157 -f 3503/246/158 3502/245/158 3506/251/158 -f 3506/251/158 3504/252/158 3503/246/158 -f 3502/248/159 3501/247/159 3507/250/159 -f 3507/250/159 3506/249/159 3502/248/159 -f 3508/195/72 3509/196/72 3510/197/72 -f 3510/197/72 3511/198/72 3508/195/72 -f 3512/199/73 3513/200/73 3514/201/73 -f 3514/201/73 3515/202/73 3512/199/73 -f 3516/203/74 3517/204/74 3518/205/74 -f 3518/205/74 3519/206/74 3516/203/74 -f 3520/202/75 3521/201/75 3522/200/75 -f 3522/200/75 3523/199/75 3520/202/75 -f 3524/207/76 3525/207/76 3526/208/76 -f 3526/208/76 3527/209/76 3524/207/76 -f 3528/209/77 3529/210/77 3530/211/77 -f 3517/212/78 3531/196/78 3532/213/78 -f 3532/213/78 3518/214/78 3517/212/78 -f 3533/210/79 3534/209/79 3535/211/79 -f 3536/215/80 3537/216/80 3535/211/80 -f 3535/211/80 3534/209/80 3536/215/80 -f 3538/217/81 3539/218/81 3510/197/482 -f 3510/197/482 3509/196/482 3538/217/81 -f 3540/219/82 3541/220/82 3517/204/82 -f 3517/204/82 3516/203/82 3540/219/82 -f 3542/209/83 3543/208/83 3525/207/83 -f 3525/207/83 3524/207/83 3542/209/83 -f 3517/212/84 3541/214/84 3544/213/84 -f 3544/213/84 3531/196/84 3517/212/84 -f 3536/215/85 3528/209/85 3530/211/85 -f 3530/211/85 3537/216/85 3536/215/85 -f 3545/221/75 3532/222/75 3508/222/75 -f 3508/222/75 3511/221/75 3545/221/75 -f 3532/222/86 3531/203/86 3509/203/86 -f 3509/203/86 3508/222/86 3532/222/86 -f 3531/203/87 3544/206/87 3538/206/87 -f 3538/206/87 3509/203/87 3531/203/87 -f 3544/206/73 3546/223/73 3539/223/73 -f 3539/223/73 3538/206/73 3544/206/73 -f 3546/224/88 3547/225/88 3510/226/88 -f 3510/226/88 3539/224/88 3546/224/88 -f 3547/225/89 3545/224/89 3511/224/89 -f 3511/224/89 3510/226/89 3547/225/89 -f 3541/214/79 3548/227/79 3546/228/79 -f 3546/228/79 3544/213/79 3541/214/79 -f 3548/229/75 3541/220/75 3540/219/75 -f 3540/219/75 3549/221/75 3548/229/75 -f 3519/206/73 3518/205/73 3550/230/73 -f 3550/230/73 3551/223/73 3519/206/73 -f 3550/227/77 3518/214/77 3532/213/77 -f 3532/213/77 3545/228/77 3550/227/77 -f 3514/201/73 3513/200/73 3552/199/73 -f 3552/199/73 3553/202/73 3514/201/73 -f 3550/231/90 3545/224/90 3530/232/90 -f 3530/232/90 3529/233/90 3550/231/90 -f 3545/224/89 3547/225/89 3537/234/89 -f 3537/234/89 3530/232/89 3545/224/89 -f 3547/225/88 3546/224/88 3535/232/88 -f 3535/232/88 3537/234/88 3547/225/88 -f 3546/224/92 3548/231/92 3533/233/92 -f 3533/233/92 3535/232/92 3546/224/92 -f 3522/200/75 3521/201/75 3554/202/75 -f 3554/202/75 3555/199/75 3522/200/75 -f 3526/208/76 3525/207/76 3536/235/76 -f 3536/235/76 3534/236/76 3526/208/76 -f 3525/207/83 3543/208/83 3528/236/83 -f 3528/236/83 3536/235/83 3525/207/83 -f 3551/236/27 3550/231/27 3513/237/27 -f 3513/237/27 3512/238/27 3551/236/27 -f 3550/231/27 3529/233/27 3552/239/27 -f 3552/239/27 3513/237/27 3550/231/27 -f 3529/210/94 3528/209/94 3553/240/94 -f 3553/240/94 3552/241/94 3529/210/94 -f 3528/236/26 3543/208/26 3514/242/26 -f 3514/242/26 3553/238/26 3528/236/26 -f 3543/208/26 3542/209/26 3515/240/26 -f 3515/240/26 3514/242/26 3543/208/26 -f 3527/209/26 3526/208/26 3521/242/26 -f 3521/242/26 3520/240/26 3527/209/26 -f 3526/208/26 3534/236/26 3554/238/26 -f 3554/238/26 3521/242/26 3526/208/26 -f 3534/209/95 3533/210/95 3555/241/95 -f 3555/241/95 3554/240/95 3534/209/95 -f 3533/233/27 3548/231/27 3522/237/27 -f 3522/237/27 3555/239/27 3533/233/27 -f 3548/231/27 3549/236/27 3523/238/27 -f 3523/238/27 3522/237/27 3548/231/27 -f 3556/243/154 3557/244/154 3558/245/154 -f 3558/245/154 3559/246/154 3556/243/154 -f 3556/247/7 3559/248/7 3560/249/7 -f 3560/249/7 3561/250/7 3556/247/7 -f 3559/246/155 3558/245/155 3562/251/155 -f 3562/251/155 3560/252/155 3559/246/155 -f 3558/248/1 3557/247/1 3563/250/1 -f 3563/250/1 3562/249/1 3558/248/1 -f 3564/243/180 3565/244/180 3566/245/180 -f 3566/245/180 3567/246/180 3564/243/180 -f 3564/247/153 3567/248/153 3568/249/153 -f 3568/249/153 3569/250/153 3564/247/153 -f 3567/246/181 3566/245/181 3570/251/181 -f 3570/251/181 3568/252/181 3567/246/181 -f 3566/248/151 3565/247/151 3571/250/151 -f 3571/250/151 3570/249/151 3566/248/151 -f 3572/243/148 3573/244/148 3574/245/148 -f 3574/245/148 3575/246/148 3572/243/148 -f 3572/247/1 3575/248/1 3576/249/1 -f 3576/249/1 3577/250/1 3572/247/1 -f 3575/246/149 3574/245/149 3578/251/149 -f 3578/251/149 3576/252/149 3575/246/149 -f 3574/248/7 3573/247/7 3579/250/7 -f 3579/250/7 3578/249/7 3574/248/7 -f 3580/243/127 3581/244/127 3582/245/127 -f 3582/245/127 3583/246/127 3580/243/127 -f 3580/247/128 3583/248/128 3584/249/128 -f 3584/249/128 3585/250/128 3580/247/128 -f 3583/246/129 3582/245/129 3586/251/129 -f 3586/251/129 3584/252/129 3583/246/129 -f 3582/248/130 3581/247/130 3587/250/130 -f 3587/250/130 3586/249/130 3582/248/130 -f 3588/243/187 3589/244/187 3590/245/187 -f 3590/245/187 3591/246/187 3588/243/187 -f 3588/247/163 3591/248/163 3592/249/163 -f 3592/249/163 3593/250/163 3588/247/163 -f 3591/246/188 3590/245/188 3594/251/188 -f 3594/251/188 3592/252/188 3591/246/188 -f 3590/248/161 3589/247/161 3595/250/161 -f 3595/250/161 3594/249/161 3590/248/161 -f 3596/195/72 3597/196/72 3598/197/72 -f 3598/197/72 3599/198/72 3596/195/72 -f 3600/199/73 3601/200/73 3602/201/73 -f 3602/201/73 3603/202/73 3600/199/73 -f 3604/203/74 3605/204/74 3606/205/74 -f 3606/205/74 3607/206/74 3604/203/74 -f 3608/202/75 3609/201/75 3610/200/75 -f 3610/200/75 3611/199/75 3608/202/75 -f 3612/207/76 3613/207/76 3614/208/76 -f 3614/208/76 3615/209/76 3612/207/76 -f 3616/209/77 3617/210/77 3618/211/77 -f 3605/212/78 3619/196/78 3620/213/78 -f 3620/213/78 3606/214/78 3605/212/78 -f 3621/210/79 3622/209/79 3623/211/79 -f 3624/215/80 3625/216/80 3623/211/80 -f 3623/211/80 3622/209/80 3624/215/80 -f 3626/217/81 3627/218/81 3598/197/482 -f 3598/197/482 3597/196/482 3626/217/81 -f 3628/219/82 3629/220/82 3605/204/82 -f 3605/204/82 3604/203/82 3628/219/82 -f 3630/209/83 3631/208/83 3613/207/83 -f 3613/207/83 3612/207/83 3630/209/83 -f 3605/212/84 3629/214/84 3632/213/84 -f 3632/213/84 3619/196/84 3605/212/84 -f 3624/215/85 3616/209/85 3618/211/85 -f 3618/211/85 3625/216/85 3624/215/85 -f 3633/221/75 3620/222/75 3596/222/75 -f 3596/222/75 3599/221/75 3633/221/75 -f 3620/222/86 3619/203/86 3597/203/86 -f 3597/203/86 3596/222/86 3620/222/86 -f 3619/203/87 3632/206/87 3626/206/87 -f 3626/206/87 3597/203/87 3619/203/87 -f 3632/206/73 3634/223/73 3627/223/73 -f 3627/223/73 3626/206/73 3632/206/73 -f 3634/224/88 3635/225/88 3598/226/88 -f 3598/226/88 3627/224/88 3634/224/88 -f 3635/225/89 3633/224/89 3599/224/89 -f 3599/224/89 3598/226/89 3635/225/89 -f 3629/214/79 3636/227/79 3634/228/79 -f 3634/228/79 3632/213/79 3629/214/79 -f 3636/229/75 3629/220/75 3628/219/75 -f 3628/219/75 3637/221/75 3636/229/75 -f 3607/206/73 3606/205/73 3638/230/73 -f 3638/230/73 3639/223/73 3607/206/73 -f 3638/227/77 3606/214/77 3620/213/77 -f 3620/213/77 3633/228/77 3638/227/77 -f 3602/201/73 3601/200/73 3640/199/73 -f 3640/199/73 3641/202/73 3602/201/73 -f 3638/231/90 3633/224/90 3618/232/90 -f 3618/232/90 3617/233/90 3638/231/90 -f 3633/224/89 3635/225/89 3625/234/89 -f 3625/234/89 3618/232/89 3633/224/89 -f 3635/225/88 3634/224/88 3623/232/88 -f 3623/232/88 3625/234/88 3635/225/88 -f 3634/224/92 3636/231/92 3621/233/92 -f 3621/233/92 3623/232/92 3634/224/92 -f 3610/200/75 3609/201/75 3642/202/75 -f 3642/202/75 3643/199/75 3610/200/75 -f 3614/208/76 3613/207/76 3624/235/76 -f 3624/235/76 3622/236/76 3614/208/76 -f 3613/207/83 3631/208/83 3616/236/83 -f 3616/236/83 3624/235/83 3613/207/83 -f 3639/236/27 3638/231/27 3601/237/27 -f 3601/237/27 3600/238/27 3639/236/27 -f 3638/231/27 3617/233/27 3640/239/27 -f 3640/239/27 3601/237/27 3638/231/27 -f 3617/210/94 3616/209/94 3641/240/94 -f 3641/240/94 3640/241/94 3617/210/94 -f 3616/236/26 3631/208/26 3602/242/26 -f 3602/242/26 3641/238/26 3616/236/26 -f 3631/208/26 3630/209/26 3603/240/26 -f 3603/240/26 3602/242/26 3631/208/26 -f 3615/209/26 3614/208/26 3609/242/26 -f 3609/242/26 3608/240/26 3615/209/26 -f 3614/208/26 3622/236/26 3642/238/26 -f 3642/238/26 3609/242/26 3614/208/26 -f 3622/209/95 3621/210/95 3643/241/95 -f 3643/241/95 3642/240/95 3622/209/95 -f 3621/233/27 3636/231/27 3610/237/27 -f 3610/237/27 3643/239/27 3621/233/27 -f 3636/231/27 3637/236/27 3611/238/27 -f 3611/238/27 3610/237/27 3636/231/27 -f 3644/195/124 3645/196/96 3646/197/96 -f 3646/197/96 3647/198/124 3644/195/124 -f 3648/199/125 3649/200/125 3650/201/125 -f 3650/201/125 3651/202/125 3648/199/125 -f 3652/203/99 3653/204/99 3654/205/99 -f 3654/205/99 3655/206/99 3652/203/99 -f 3656/202/165 3657/201/165 3658/200/165 -f 3658/200/165 3659/199/165 3656/202/165 -f 3660/207/102 3661/207/102 3662/208/102 -f 3662/208/102 3663/209/102 3660/207/102 -f 3664/209/103 3665/210/103 3666/211/103 -f 3653/212/104 3667/196/104 3668/213/104 -f 3668/213/104 3654/214/104 3653/212/104 -f 3669/210/105 3670/209/105 3671/211/105 -f 3672/215/106 3673/216/106 3671/211/106 -f 3671/211/106 3670/209/106 3672/215/106 -f 3674/217/107 3675/218/107 3646/197/107 -f 3646/197/107 3645/196/107 3674/217/107 -f 3676/219/126 3677/220/108 3653/204/108 -f 3653/204/108 3652/203/108 3676/219/126 -f 3678/209/109 3679/208/109 3661/207/109 -f 3661/207/109 3660/207/109 3678/209/109 -f 3653/212/110 3677/214/110 3680/213/110 -f 3680/213/110 3667/196/110 3653/212/110 -f 3672/215/111 3664/209/111 3666/211/111 -f 3666/211/111 3673/216/111 3672/215/111 -f 3681/221/165 3668/222/165 3644/222/165 -f 3644/222/165 3647/221/165 3681/221/165 -f 3668/222/112 3667/203/112 3645/203/112 -f 3645/203/112 3644/222/112 3668/222/112 -f 3667/203/113 3680/206/113 3674/206/113 -f 3674/206/113 3645/203/113 3667/203/113 -f 3680/206/125 3682/223/125 3675/223/125 -f 3675/223/125 3674/206/125 3680/206/125 -f 3682/224/114 3683/225/114 3646/226/114 -f 3646/226/114 3675/224/114 3682/224/114 -f 3683/225/115 3681/224/115 3647/224/115 -f 3647/224/115 3646/226/115 3683/225/115 -f 3677/214/105 3684/227/105 3682/228/105 -f 3682/228/105 3680/213/105 3677/214/105 -f 3684/229/165 3677/220/165 3676/219/165 -f 3676/219/165 3685/221/165 3684/229/165 -f 3655/206/125 3654/205/125 3686/230/125 -f 3686/230/125 3687/223/125 3655/206/125 -f 3686/227/103 3654/214/103 3668/213/103 -f 3668/213/103 3681/228/103 3686/227/103 -f 3650/201/125 3649/200/125 3688/199/125 -f 3688/199/125 3689/202/125 3650/201/125 -f 3686/231/483 3681/224/483 3666/232/483 -f 3666/232/483 3665/233/483 3686/231/483 -f 3681/224/115 3683/225/115 3673/234/115 -f 3673/234/115 3666/232/115 3681/224/115 -f 3683/225/114 3682/224/114 3671/232/114 -f 3671/232/114 3673/234/114 3683/225/114 -f 3682/224/117 3684/231/117 3669/233/117 -f 3669/233/117 3671/232/117 3682/224/117 -f 3658/200/165 3657/201/165 3690/202/165 -f 3690/202/165 3691/199/165 3658/200/165 -f 3662/208/102 3661/207/102 3672/235/102 -f 3672/235/102 3670/236/102 3662/208/102 -f 3661/207/109 3679/208/109 3664/236/109 -f 3664/236/109 3672/235/109 3661/207/109 -f 3687/236/27 3686/231/27 3649/237/27 -f 3649/237/27 3648/238/27 3687/236/27 -f 3686/231/27 3665/233/27 3688/239/27 -f 3688/239/27 3649/237/27 3686/231/27 -f 3665/210/118 3664/209/118 3689/240/118 -f 3689/240/118 3688/241/118 3665/210/118 -f 3664/236/26 3679/208/26 3650/242/26 -f 3650/242/26 3689/238/26 3664/236/26 -f 3679/208/26 3678/209/26 3651/240/26 -f 3651/240/26 3650/242/26 3679/208/26 -f 3663/209/26 3662/208/26 3657/242/26 -f 3657/242/26 3656/240/26 3663/209/26 -f 3662/208/26 3670/236/26 3690/238/26 -f 3690/238/26 3657/242/26 3662/208/26 -f 3670/209/119 3669/210/119 3691/241/119 -f 3691/241/119 3690/240/119 3670/209/119 -f 3669/233/27 3684/231/27 3658/237/27 -f 3658/237/27 3691/239/27 3669/233/27 -f 3684/231/27 3685/236/27 3659/238/27 -f 3659/238/27 3658/237/27 3684/231/27 -f 3692/243/150 3693/244/150 3694/245/150 -f 3694/245/150 3695/246/150 3692/243/150 -f 3692/247/151 3695/248/151 3696/249/151 -f 3696/249/151 3697/250/151 3692/247/151 -f 3695/246/152 3694/245/152 3698/251/152 -f 3698/251/152 3696/252/152 3695/246/152 -f 3694/248/153 3693/247/153 3699/250/153 -f 3699/250/153 3698/249/153 3694/248/153 -f 3700/195/96 3701/196/124 3702/197/124 -f 3702/197/124 3703/198/96 3700/195/96 -f 3704/199/125 3705/200/125 3706/201/125 -f 3706/201/125 3707/202/125 3704/199/125 -f 3708/203/99 3709/204/99 3710/205/99 -f 3710/205/99 3711/206/99 3708/203/99 -f 3712/202/165 3713/201/165 3714/200/165 -f 3714/200/165 3715/199/165 3712/202/165 -f 3716/207/102 3717/207/102 3718/208/102 -f 3718/208/102 3719/209/102 3716/207/102 -f 3720/209/103 3721/210/103 3722/211/103 -f 3709/212/104 3723/196/104 3724/213/104 -f 3724/213/104 3710/214/104 3709/212/104 -f 3725/210/105 3726/209/105 3727/211/105 -f 3728/215/106 3729/216/106 3727/211/106 -f 3727/211/106 3726/209/106 3728/215/106 -f 3730/217/107 3731/218/107 3702/197/107 -f 3702/197/107 3701/196/107 3730/217/107 -f 3732/219/108 3733/220/108 3709/204/126 -f 3709/204/126 3708/203/108 3732/219/108 -f 3734/209/109 3735/208/109 3717/207/109 -f 3717/207/109 3716/207/109 3734/209/109 -f 3709/212/110 3733/214/110 3736/213/110 -f 3736/213/110 3723/196/110 3709/212/110 -f 3728/215/111 3720/209/111 3722/211/111 -f 3722/211/111 3729/216/111 3728/215/111 -f 3737/221/165 3724/222/165 3700/222/165 -f 3700/222/165 3703/221/165 3737/221/165 -f 3724/222/112 3723/203/112 3701/203/112 -f 3701/203/112 3700/222/112 3724/222/112 -f 3723/203/113 3736/206/113 3730/206/113 -f 3730/206/113 3701/203/113 3723/203/113 -f 3736/206/125 3738/223/125 3731/223/125 -f 3731/223/125 3730/206/125 3736/206/125 -f 3738/224/114 3739/225/114 3702/226/114 -f 3702/226/114 3731/224/114 3738/224/114 -f 3739/225/115 3737/224/115 3703/224/115 -f 3703/224/115 3702/226/115 3739/225/115 -f 3733/214/105 3740/227/105 3738/228/105 -f 3738/228/105 3736/213/105 3733/214/105 -f 3740/229/165 3733/220/165 3732/219/165 -f 3732/219/165 3741/221/165 3740/229/165 -f 3711/206/125 3710/205/125 3742/230/125 -f 3742/230/125 3743/223/125 3711/206/125 -f 3742/227/103 3710/214/103 3724/213/103 -f 3724/213/103 3737/228/103 3742/227/103 -f 3706/201/125 3705/200/125 3744/199/125 -f 3744/199/125 3745/202/125 3706/201/125 -f 3742/231/483 3737/224/483 3722/232/483 -f 3722/232/483 3721/233/483 3742/231/483 -f 3737/224/115 3739/225/115 3729/234/115 -f 3729/234/115 3722/232/115 3737/224/115 -f 3739/225/114 3738/224/114 3727/232/114 -f 3727/232/114 3729/234/114 3739/225/114 -f 3738/224/117 3740/231/117 3725/233/117 -f 3725/233/117 3727/232/117 3738/224/117 -f 3714/200/165 3713/201/165 3746/202/165 -f 3746/202/165 3747/199/165 3714/200/165 -f 3718/208/102 3717/207/102 3728/235/102 -f 3728/235/102 3726/236/102 3718/208/102 -f 3717/207/109 3735/208/109 3720/236/109 -f 3720/236/109 3728/235/109 3717/207/109 -f 3743/236/27 3742/231/27 3705/237/27 -f 3705/237/27 3704/238/27 3743/236/27 -f 3742/231/27 3721/233/27 3744/239/27 -f 3744/239/27 3705/237/27 3742/231/27 -f 3721/210/118 3720/209/118 3745/240/118 -f 3745/240/118 3744/241/118 3721/210/118 -f 3720/236/26 3735/208/26 3706/242/26 -f 3706/242/26 3745/238/26 3720/236/26 -f 3735/208/26 3734/209/26 3707/240/26 -f 3707/240/26 3706/242/26 3735/208/26 -f 3719/209/26 3718/208/26 3713/242/26 -f 3713/242/26 3712/240/26 3719/209/26 -f 3718/208/26 3726/236/26 3746/238/26 -f 3746/238/26 3713/242/26 3718/208/26 -f 3726/209/119 3725/210/119 3747/241/119 -f 3747/241/119 3746/240/119 3726/209/119 -f 3725/233/27 3740/231/27 3714/237/27 -f 3714/237/27 3747/239/27 3725/233/27 -f 3740/231/27 3741/236/27 3715/238/27 -f 3715/238/27 3714/237/27 3740/231/27 -f 3748/243/120 3749/244/120 3750/245/120 -f 3750/245/120 3751/246/120 3748/243/120 -f 3748/247/121 3751/248/121 3752/249/121 -f 3752/249/121 3753/250/121 3748/247/121 -f 3751/246/122 3750/245/122 3754/251/122 -f 3754/251/122 3752/252/122 3751/246/122 -f 3750/248/123 3749/247/123 3755/250/123 -f 3755/250/123 3754/249/123 3750/248/123 -f 3756/195/131 3757/196/131 3758/197/131 -f 3758/197/131 3759/198/131 3756/195/131 -f 3760/199/75 3761/200/75 3762/201/75 -f 3762/201/75 3763/202/75 3760/199/75 -f 3764/203/132 3765/204/132 3766/205/132 -f 3766/205/132 3767/206/132 3764/203/132 -f 3768/202/73 3769/201/73 3770/200/73 -f 3770/200/73 3771/199/73 3768/202/73 -f 3772/207/83 3773/207/83 3774/208/83 -f 3774/208/83 3775/209/83 3772/207/83 -f 3776/209/133 3777/210/133 3778/211/133 -f 3765/212/134 3779/196/134 3780/213/134 -f 3780/213/134 3766/214/134 3765/212/134 -f 3781/210/135 3782/209/135 3783/211/135 -f 3784/215/136 3785/216/136 3783/211/136 -f 3783/211/136 3782/209/136 3784/215/136 -f 3786/217/137 3787/218/137 3758/197/137 -f 3758/197/137 3757/196/137 3786/217/137 -f 3788/219/139 3789/220/139 3765/204/139 -f 3765/204/139 3764/203/139 3788/219/139 -f 3790/209/76 3791/208/76 3773/207/76 -f 3773/207/76 3772/207/76 3790/209/76 -f 3765/212/140 3789/214/140 3792/213/140 -f 3792/213/140 3779/196/140 3765/212/140 -f 3784/215/141 3776/209/141 3778/211/141 -f 3778/211/141 3785/216/141 3784/215/141 -f 3793/221/73 3780/222/73 3756/222/73 -f 3756/222/73 3759/221/73 3793/221/73 -f 3780/222/87 3779/203/87 3757/203/87 -f 3757/203/87 3756/222/87 3780/222/87 -f 3779/203/86 3792/206/86 3786/206/86 -f 3786/206/86 3757/203/86 3779/203/86 -f 3792/206/75 3794/223/75 3787/223/75 -f 3787/223/75 3786/206/75 3792/206/75 -f 3794/224/142 3795/225/142 3758/226/142 -f 3758/226/142 3787/224/142 3794/224/142 -f 3795/225/143 3793/224/143 3759/224/143 -f 3759/224/143 3758/226/143 3795/225/143 -f 3789/214/135 3796/227/135 3794/228/135 -f 3794/228/135 3792/213/135 3789/214/135 -f 3796/229/73 3789/220/73 3788/219/73 -f 3788/219/73 3797/221/73 3796/229/73 -f 3767/206/75 3766/205/75 3798/230/75 -f 3798/230/75 3799/223/75 3767/206/75 -f 3798/227/133 3766/214/133 3780/213/133 -f 3780/213/133 3793/228/133 3798/227/133 -f 3762/201/75 3761/200/75 3800/199/75 -f 3800/199/75 3801/202/75 3762/201/75 -f 3798/231/144 3793/224/144 3778/232/144 -f 3778/232/144 3777/233/144 3798/231/144 -f 3793/224/143 3795/225/143 3785/234/143 -f 3785/234/143 3778/232/143 3793/224/143 -f 3795/225/142 3794/224/142 3783/232/142 -f 3783/232/142 3785/234/142 3795/225/142 -f 3794/224/145 3796/231/145 3781/233/145 -f 3781/233/145 3783/232/145 3794/224/145 -f 3770/200/73 3769/201/73 3802/202/73 -f 3802/202/73 3803/199/73 3770/200/73 -f 3774/208/83 3773/207/83 3784/235/83 -f 3784/235/83 3782/236/83 3774/208/83 -f 3773/207/76 3791/208/76 3776/236/76 -f 3776/236/76 3784/235/76 3773/207/76 -f 3799/236/27 3798/231/27 3761/237/27 -f 3761/237/27 3760/238/27 3799/236/27 -f 3798/231/27 3777/233/27 3800/239/27 -f 3800/239/27 3761/237/27 3798/231/27 -f 3777/210/480 3776/209/480 3801/240/480 -f 3801/240/480 3800/241/480 3777/210/480 -f 3776/236/26 3791/208/26 3762/242/26 -f 3762/242/26 3801/238/26 3776/236/26 -f 3791/208/26 3790/209/26 3763/240/26 -f 3763/240/26 3762/242/26 3791/208/26 -f 3775/209/26 3774/208/26 3769/242/26 -f 3769/242/26 3768/240/26 3775/209/26 -f 3774/208/26 3782/236/26 3802/238/26 -f 3802/238/26 3769/242/26 3774/208/26 -f 3782/209/147 3781/210/147 3803/241/147 -f 3803/241/147 3802/240/147 3782/209/147 -f 3781/233/27 3796/231/27 3770/237/27 -f 3770/237/27 3803/239/27 3781/233/27 -f 3796/231/27 3797/236/27 3771/238/27 -f 3771/238/27 3770/237/27 3796/231/27 -f 3804/243/160 3805/244/160 3806/245/160 -f 3806/245/160 3807/246/160 3804/243/160 -f 3804/247/161 3807/248/161 3808/249/161 -f 3808/249/161 3809/250/161 3804/247/161 -f 3807/246/162 3806/245/162 3810/251/162 -f 3810/251/162 3808/252/162 3807/246/162 -f 3806/248/163 3805/247/163 3811/250/163 -f 3811/250/163 3810/249/163 3806/248/163 -f 3812/253/19 3813/254/19 3814/255/19 -f 3814/255/19 3815/256/19 3812/253/19 -f 3816/257/20 3812/253/20 3815/256/20 -f 3815/256/20 3817/258/20 3816/257/20 -f 3818/259/21 3816/257/21 3817/258/21 -f 3817/258/21 3819/260/21 3818/259/21 -f 3820/261/22 3818/262/191 3819/263/22 -f 3819/263/22 3821/264/22 3820/261/22 -f 3822/265/23 3820/261/23 3821/264/23 -f 3821/264/23 3823/266/23 3822/265/23 -f 3824/267/24 3822/265/24 3823/266/24 -f 3823/266/24 3825/268/24 3824/267/24 -f 3826/269/192 3824/267/13 3825/268/13 -f 3825/268/13 3827/270/192 3826/269/192 -f 3828/271/14 3826/269/14 3827/270/14 -f 3827/270/14 3829/272/14 3828/271/14 -f 3830/273/118 3828/271/15 3829/272/15 -f 3829/272/15 3831/274/15 3830/273/118 -f 3832/275/16 3830/273/16 3831/274/16 -f 3831/274/16 3833/276/16 3832/275/16 -f 3834/277/17 3832/275/17 3833/276/17 -f 3833/276/17 3835/278/17 3834/277/17 -f 3813/254/18 3834/277/194 3835/278/194 -f 3835/278/194 3814/255/18 3813/254/18 -f 3815/279/27 3814/280/27 3836/281/27 -f 3836/281/27 3837/282/27 3815/279/27 -f 3838/283/27 3839/279/27 3840/282/27 -f 3840/282/27 3841/284/27 3838/283/27 -f 3819/285/27 3817/283/27 3842/284/27 -f 3842/284/27 3843/285/27 3819/285/27 -f 3844/286/27 3845/285/27 3846/285/27 -f 3846/285/27 3847/287/27 3844/286/27 -f 3823/288/27 3821/286/27 3848/287/27 -f 3848/287/27 3849/289/27 3823/288/27 -f 3850/290/27 3851/288/27 3852/289/27 -f 3852/289/27 3853/291/27 3850/290/27 -f 3827/292/27 3825/290/27 3854/291/27 -f 3854/291/27 3855/293/27 3827/292/27 -f 3856/294/27 3857/292/27 3858/293/27 -f 3858/293/27 3859/295/27 3856/294/27 -f 3831/296/27 3829/294/27 3860/295/27 -f 3860/295/27 3861/297/27 3831/296/27 -f 3862/298/27 3863/296/27 3864/297/27 -f 3864/297/27 3865/299/27 3862/298/27 -f 3835/300/27 3833/298/27 3866/299/27 -f 3866/299/27 3867/300/27 3835/300/27 -f 3868/280/27 3869/300/27 3870/300/27 -f 3870/300/27 3871/281/27 3868/280/27 -f 3837/301/13 3836/302/13 3872/303/13 -f 3872/303/13 3873/304/13 3837/301/13 -f 3842/305/14 3837/301/14 3873/304/14 -f 3873/304/14 3874/306/14 3842/305/14 -f 3843/307/15 3842/305/118 3874/306/15 -f 3874/306/15 3875/308/15 3843/307/15 -f 3848/309/16 3843/307/16 3875/308/16 -f 3875/308/16 3876/310/16 3848/309/16 -f 3849/311/17 3848/309/17 3876/310/17 -f 3876/310/17 3877/312/17 3849/311/17 -f 3854/313/18 3849/311/18 3877/312/18 -f 3877/312/18 3878/314/18 3854/313/18 -f 3855/315/190 3854/313/19 3878/314/19 -f 3878/314/19 3879/316/190 3855/315/190 -f 3860/317/20 3855/315/20 3879/316/20 -f 3879/316/20 3880/318/20 3860/317/20 -f 3861/319/21 3860/317/21 3880/318/21 -f 3880/318/21 3881/320/21 3861/319/21 -f 3866/321/191 3861/322/22 3881/323/22 -f 3881/323/22 3882/324/22 3866/321/191 -f 3867/325/23 3866/321/23 3882/324/23 -f 3882/324/23 3883/326/23 3867/325/23 -f 3836/302/24 3867/325/25 3883/326/25 -f 3883/326/25 3872/303/24 3836/302/24 -f 3873/327/27 3872/328/27 3884/329/27 -f 3874/330/27 3873/327/27 3884/329/27 -f 3875/331/27 3874/330/27 3884/329/27 -f 3876/332/27 3875/331/27 3884/329/27 -f 3877/333/27 3876/332/27 3884/329/27 -f 3878/334/27 3877/333/27 3884/329/27 -f 3879/335/27 3878/334/27 3884/329/27 -f 3880/336/27 3879/335/27 3884/329/27 -f 3881/337/27 3880/336/27 3884/329/27 -f 3882/338/27 3881/337/27 3884/329/27 -f 3883/339/27 3882/338/27 3884/329/27 -f 3872/328/27 3883/339/27 3884/329/27 -f 3817/258/20 3815/256/20 3839/340/20 -f 3839/340/20 3838/341/20 3817/258/20 -f 3815/279/163 3837/282/163 3840/282/163 -f 3840/282/163 3839/279/163 3815/279/163 -f 3837/301/14 3842/305/14 3841/342/14 -f 3841/342/14 3840/343/14 3837/301/14 -f 3842/284/197 3817/283/197 3838/283/197 -f 3838/283/197 3841/284/197 3842/284/197 -f 3821/264/22 3819/263/22 3845/344/22 -f 3845/344/22 3844/345/22 3821/264/22 -f 3819/285/7 3843/285/7 3846/285/7 -f 3846/285/7 3845/285/7 3819/285/7 -f 3843/307/16 3848/309/16 3847/346/16 -f 3847/346/16 3846/347/16 3843/307/16 -f 3848/287/198 3821/286/198 3844/286/198 -f 3844/286/198 3847/287/198 3848/287/198 -f 3825/268/24 3823/266/24 3851/348/24 -f 3851/348/24 3850/349/24 3825/268/24 -f 3823/288/151 3849/289/151 3852/289/151 -f 3852/289/151 3851/288/151 3823/288/151 -f 3849/311/18 3854/313/18 3853/350/18 -f 3853/350/18 3852/351/18 3849/311/18 -f 3854/291/4 3825/290/4 3850/290/4 -f 3850/290/4 3853/291/4 3854/291/4 -f 3829/272/14 3827/270/14 3857/352/14 -f 3857/352/14 3856/353/14 3829/272/14 -f 3827/292/161 3855/293/161 3858/293/161 -f 3858/293/161 3857/292/161 3827/292/161 -f 3855/315/20 3860/317/20 3859/354/20 -f 3859/354/20 3858/355/20 3855/315/20 -f 3860/295/195 3829/294/195 3856/294/195 -f 3856/294/195 3859/295/195 3860/295/195 -f 3833/276/16 3831/274/16 3863/356/193 -f 3863/356/193 3862/357/16 3833/276/16 -f 3831/296/1 3861/297/1 3864/297/1 -f 3864/297/1 3863/296/1 3831/296/1 -f 3861/322/22 3866/321/191 3865/358/22 -f 3865/358/22 3864/359/22 3861/322/22 -f 3866/299/196 3833/298/196 3862/298/196 -f 3862/298/196 3865/299/196 3866/299/196 -f 3814/255/18 3835/278/194 3869/360/18 -f 3869/360/18 3868/361/18 3814/255/18 -f 3835/300/153 3867/300/153 3870/300/153 -f 3870/300/153 3869/300/153 3835/300/153 -f 3867/325/25 3836/302/24 3871/362/24 -f 3871/362/24 3870/363/25 3867/325/25 -f 3836/281/10 3814/280/10 3868/280/10 -f 3868/280/10 3871/281/10 3836/281/10 -f 3885/3/6 3886/2/6 3887/1/7 -f 3887/1/7 3888/4/7 3885/3/6 -f 3889/6/5 3890/5/5 3886/2/6 -f 3886/2/6 3885/3/6 3889/6/5 -f 3891/8/4 3892/7/4 3890/5/5 -f 3890/5/5 3889/6/5 3891/8/4 -f 3893/11/3 3894/10/3 3892/9/4 -f 3892/9/4 3891/12/4 3893/11/3 -f 3895/14/2 3896/13/2 3894/10/3 -f 3894/10/3 3893/11/3 3895/14/2 -f 3897/16/1 3898/15/1 3896/13/2 -f 3896/13/2 3895/14/2 3897/16/1 -f 3899/18/12 3900/17/12 3898/15/1 -f 3898/15/1 3897/16/1 3899/18/12 -f 3901/20/11 3902/19/11 3900/17/12 -f 3900/17/12 3899/18/12 3901/20/11 -f 3903/22/10 3904/21/10 3902/19/11 -f 3902/19/11 3901/20/11 3903/22/10 -f 3905/24/9 3906/23/9 3904/21/10 -f 3904/21/10 3903/22/10 3905/24/9 -f 3907/26/8 3908/25/8 3906/23/9 -f 3906/23/9 3905/24/9 3907/26/8 -f 3888/4/7 3887/1/7 3908/25/8 -f 3908/25/8 3907/26/8 3888/4/7 -f 3909/27/18 3910/30/18 3911/29/18 -f 3911/29/18 3912/28/18 3909/27/18 -f 3913/31/17 3914/32/17 3910/30/17 -f 3910/30/17 3909/27/17 3913/31/17 -f 3915/33/16 3916/34/16 3914/32/16 -f 3914/32/16 3913/31/16 3915/33/16 -f 3917/35/15 3918/38/15 3916/37/15 -f 3916/37/15 3915/36/15 3917/35/15 -f 3919/39/14 3920/40/14 3918/38/14 -f 3918/38/14 3917/35/14 3919/39/14 -f 3921/41/13 3922/42/13 3920/40/13 -f 3920/40/13 3919/39/13 3921/41/13 -f 3923/43/24 3924/44/24 3922/42/24 -f 3922/42/24 3921/41/24 3923/43/24 -f 3925/45/23 3926/46/23 3924/44/23 -f 3924/44/23 3923/43/23 3925/45/23 -f 3927/47/22 3928/48/22 3926/46/22 -f 3926/46/22 3925/45/22 3927/47/22 -f 3929/49/21 3930/50/21 3928/48/21 -f 3928/48/21 3927/47/21 3929/49/21 -f 3931/51/20 3932/52/20 3930/50/20 -f 3930/50/20 3929/49/20 3931/51/20 -f 3912/28/19 3911/29/19 3932/52/19 -f 3932/52/19 3931/51/190 3912/28/19 -f 3886/53/26 3909/53/26 3912/54/26 -f 3912/54/26 3887/54/26 3886/53/26 -f 3887/54/26 3912/54/26 3931/55/26 -f 3931/55/26 3908/55/26 3887/54/26 -f 3908/55/26 3931/55/26 3929/56/26 -f 3929/56/26 3906/56/26 3908/55/26 -f 3906/56/26 3929/56/26 3927/57/26 -f 3927/57/26 3904/57/26 3906/56/26 -f 3904/57/26 3927/57/26 3925/59/26 -f 3925/59/26 3902/58/26 3904/57/26 -f 3902/58/26 3925/59/26 3923/61/26 -f 3923/61/26 3900/60/26 3902/58/26 -f 3900/60/26 3923/61/26 3921/62/26 -f 3921/62/26 3898/62/26 3900/60/26 -f 3898/62/26 3921/62/26 3919/64/26 -f 3919/64/26 3896/63/26 3898/62/26 -f 3896/63/26 3919/64/26 3917/66/26 -f 3917/66/26 3894/65/26 3896/63/26 -f 3894/65/26 3917/66/26 3915/67/26 -f 3915/67/26 3892/67/26 3894/65/26 -f 3892/67/26 3915/67/26 3913/68/26 -f 3913/68/26 3890/68/26 3892/67/26 -f 3890/68/26 3913/68/26 3909/53/26 -f 3909/53/26 3886/53/26 3890/68/26 -f 3933/54/27 3911/54/27 3910/53/27 -f 3910/53/27 3934/53/27 3933/54/27 -f 3934/53/27 3910/53/27 3914/68/27 -f 3914/68/27 3935/68/27 3934/53/27 -f 3935/68/27 3914/68/27 3916/67/27 -f 3916/67/27 3936/67/27 3935/68/27 -f 3936/67/27 3916/67/27 3918/66/27 -f 3918/66/27 3937/65/27 3936/67/27 -f 3937/65/27 3918/66/27 3920/64/27 -f 3920/64/27 3938/63/27 3937/65/27 -f 3938/63/27 3920/64/27 3922/62/27 -f 3922/62/27 3939/62/27 3938/63/27 -f 3939/62/27 3922/62/27 3924/61/27 -f 3924/61/27 3940/60/27 3939/62/27 -f 3940/60/27 3924/61/27 3926/59/27 -f 3926/59/27 3941/58/27 3940/60/27 -f 3941/58/27 3926/59/27 3928/57/27 -f 3928/57/27 3942/57/27 3941/58/27 -f 3942/57/27 3928/57/27 3930/56/27 -f 3930/56/27 3943/56/27 3942/57/27 -f 3943/56/27 3930/56/27 3932/55/27 -f 3932/55/27 3944/55/27 3943/56/27 -f 3944/55/27 3932/55/27 3911/54/27 -f 3911/54/27 3933/54/27 3944/55/27 -f 3945/71/6 3946/70/7 3933/69/7 -f 3933/69/7 3934/72/6 3945/71/6 -f 3947/73/17 3945/71/6 3934/72/6 -f 3934/72/6 3935/74/17 3947/73/17 -f 3948/75/16 3947/73/16 3935/74/16 -f 3935/74/16 3936/76/16 3948/75/16 -f 3949/77/3 3948/75/15 3936/76/15 -f 3936/76/15 3937/78/3 3949/77/3 -f 3950/79/2 3949/77/3 3937/78/3 -f 3937/78/3 3938/80/2 3950/79/2 -f 3951/83/1 3950/82/2 3938/81/2 -f 3938/81/2 3939/84/1 3951/83/1 -f 3952/85/12 3951/83/1 3939/84/1 -f 3939/84/1 3940/86/12 3952/85/12 -f 3953/87/11 3952/85/12 3940/86/12 -f 3940/86/12 3941/88/11 3953/87/11 -f 3954/89/10 3953/87/11 3941/88/11 -f 3941/88/11 3942/90/10 3954/89/10 -f 3955/91/9 3954/89/10 3942/90/10 -f 3942/90/10 3943/92/9 3955/91/9 -f 3956/93/8 3955/91/9 3943/92/9 -f 3943/92/9 3944/94/8 3956/93/8 -f 3946/70/7 3956/93/8 3944/94/8 -f 3944/94/8 3933/69/7 3946/70/7 -f 3957/95/26 3958/95/26 3959/96/26 -f 3959/96/26 3960/96/26 3957/95/26 -f 3961/97/26 3962/97/26 3958/95/26 -f 3958/95/26 3957/95/26 3961/97/26 -f 3963/67/26 3964/98/26 3962/97/26 -f 3962/97/26 3961/97/26 3963/67/26 -f 3965/99/26 3966/99/26 3964/98/26 -f 3964/98/26 3963/67/26 3965/99/26 -f 3967/100/26 3968/100/26 3966/99/26 -f 3966/99/26 3965/99/26 3967/100/26 -f 3969/101/26 3970/101/26 3968/100/26 -f 3968/100/26 3967/100/26 3969/101/26 -f 3971/61/26 3972/61/26 3970/101/26 -f 3970/101/26 3969/101/26 3971/61/26 -f 3973/59/26 3974/102/26 3972/61/26 -f 3972/61/26 3971/61/26 3973/59/26 -f 3975/103/26 3976/103/26 3974/102/26 -f 3974/102/26 3973/59/26 3975/103/26 -f 3977/104/26 3978/105/26 3976/103/26 -f 3976/103/26 3975/103/26 3977/104/26 -f 3979/106/26 3980/106/26 3978/105/26 -f 3978/105/26 3977/104/26 3979/106/26 -f 3960/96/26 3959/96/26 3980/106/26 -f 3980/106/26 3979/106/26 3960/96/26 -f 3958/107/33 3981/110/33 3982/109/33 -f 3982/109/33 3959/108/33 3958/107/33 -f 3962/111/32 3983/112/32 3981/110/32 -f 3981/110/32 3958/107/32 3962/111/32 -f 3964/113/31 3984/114/31 3983/112/31 -f 3983/112/31 3962/111/31 3964/113/31 -f 3966/115/30 3985/116/30 3984/114/30 -f 3984/114/30 3964/113/30 3966/115/30 -f 3968/117/29 3986/118/29 3985/116/29 -f 3985/116/29 3966/115/29 3968/117/29 -f 3970/119/28 3987/120/28 3986/118/28 -f 3986/118/28 3968/117/28 3970/119/28 -f 3972/121/39 3988/122/39 3987/120/39 -f 3987/120/39 3970/119/39 3972/121/39 -f 3974/123/38 3989/124/38 3988/122/38 -f 3988/122/38 3972/121/38 3974/123/38 -f 3976/125/37 3990/126/37 3989/124/37 -f 3989/124/37 3974/123/37 3976/125/37 -f 3978/127/36 3991/130/36 3990/129/36 -f 3990/129/36 3976/128/36 3978/127/36 -f 3980/131/35 3992/132/35 3991/130/35 -f 3991/130/35 3978/127/35 3980/131/35 -f 3959/108/34 3982/109/34 3992/132/34 -f 3992/132/34 3980/131/34 3959/108/34 -f 3981/110/46 3993/134/46 3994/133/46 -f 3994/133/46 3982/109/46 3981/110/46 -f 3983/112/45 3995/135/45 3993/134/45 -f 3993/134/45 3981/110/45 3983/112/45 -f 3984/114/44 3996/136/44 3995/135/44 -f 3995/135/44 3983/112/44 3984/114/44 -f 3985/116/42 3997/137/42 3996/136/43 -f 3996/136/43 3984/114/42 3985/116/42 -f 3986/118/41 3998/138/41 3997/137/41 -f 3997/137/41 3985/116/41 3986/118/41 -f 3987/120/40 3999/139/40 3998/138/40 -f 3998/138/40 3986/118/40 3987/120/40 -f 3988/122/55 4000/140/54 3999/139/54 -f 3999/139/54 3987/120/54 3988/122/55 -f 3989/124/53 4001/141/53 4000/140/53 -f 4000/140/53 3988/122/53 3989/124/53 -f 3990/126/51 4002/142/52 4001/141/51 -f 4001/141/51 3989/124/51 3990/126/51 -f 3991/130/50 4003/144/50 4002/143/50 -f 4002/143/50 3990/129/50 3991/130/50 -f 3992/132/49 4004/145/49 4003/144/49 -f 4003/144/49 3991/130/49 3992/132/49 -f 3982/109/48 3994/133/48 4004/145/48 -f 4004/145/48 3992/132/47 3982/109/48 -f 3945/148/63 4005/147/63 4006/146/63 -f 4006/146/63 3946/149/63 3945/148/63 -f 3947/151/62 4007/150/61 4005/147/61 -f 4005/147/61 3945/148/62 3947/151/62 -f 3948/154/60 4008/153/60 4007/152/60 -f 4007/152/60 3947/155/60 3948/154/60 -f 3949/156/59 4009/142/59 4008/153/59 -f 4008/153/59 3948/154/59 3949/156/59 -f 3950/158/58 4010/157/57 4009/142/57 -f 4009/142/57 3949/156/58 3950/158/58 -f 3951/160/56 4011/159/56 4010/157/56 -f 4010/157/56 3950/158/56 3951/160/56 -f 3952/162/71 4012/161/71 4011/159/71 -f 4011/159/71 3951/160/71 3952/162/71 -f 3953/164/69 4013/163/70 4012/161/70 -f 4012/161/70 3952/162/69 3953/164/69 -f 3954/166/68 4014/165/68 4013/163/68 -f 4013/163/68 3953/164/68 3954/166/68 -f 3955/168/67 4015/167/67 4014/165/67 -f 4014/165/67 3954/166/67 3955/168/67 -f 3956/170/66 4016/169/66 4015/167/66 -f 4015/167/66 3955/168/65 3956/170/66 -f 3946/149/64 4006/146/64 4016/169/64 -f 4016/169/64 3956/170/64 3946/149/64 -f 4005/173/6 3957/172/6 3960/171/7 -f 3960/171/7 4006/174/7 4005/173/6 -f 4007/176/5 3961/175/5 3957/172/6 -f 3957/172/6 4005/173/6 4007/176/5 -f 4008/179/4 3963/178/4 3961/177/5 -f 3961/177/5 4007/180/5 4008/179/4 -f 4009/181/3 3965/86/3 3963/178/4 -f 3963/178/4 4008/179/4 4009/181/3 -f 4010/183/2 3967/182/2 3965/86/3 -f 3965/86/3 4009/181/3 4010/183/2 -f 4011/185/1 3969/184/1 3967/182/2 -f 3967/182/2 4010/183/2 4011/185/1 -f 4012/187/12 3971/186/12 3969/184/1 -f 3969/184/1 4011/185/1 4012/187/12 -f 4013/189/11 3973/188/11 3971/186/12 -f 3971/186/12 4012/187/12 4013/189/11 -f 4014/191/10 3975/190/10 3973/188/11 -f 3973/188/11 4013/189/11 4014/191/10 -f 4015/192/9 3977/76/9 3975/190/10 -f 3975/190/10 4014/191/10 4015/192/9 -f 4016/194/8 3979/193/8 3977/76/9 -f 3977/76/9 4015/192/9 4016/194/8 -f 4006/174/7 3960/171/7 3979/193/8 -f 3979/193/8 4016/194/8 4006/174/7 -f 4017/195/443 4018/198/443 4019/197/443 -f 4019/197/443 4020/196/443 4017/195/443 -f 4021/199/390 4022/202/390 4023/201/390 -f 4023/201/390 4024/200/390 4021/199/390 -f 4025/203/444 4026/206/444 4027/205/444 -f 4027/205/444 4028/204/444 4025/203/444 -f 4029/202/388 4030/199/388 4031/200/388 -f 4031/200/388 4032/201/388 4029/202/388 -f 4033/207/398 4034/209/398 4035/208/398 -f 4035/208/398 4036/207/398 4033/207/398 -f 4037/209/445 4038/211/445 4039/210/445 -f 4028/212/446 4027/214/446 4040/213/446 -f 4040/213/446 4041/196/446 4028/212/446 -f 4042/210/447 4043/211/447 4044/209/447 -f 4045/215/448 4044/209/448 4043/211/448 -f 4043/211/448 4046/216/448 4045/215/448 -f 4047/217/449 4020/196/449 4019/197/449 -f 4019/197/449 4048/218/449 4047/217/449 -f 4049/219/451 4025/203/451 4028/204/451 -f 4028/204/451 4050/220/451 4049/219/451 -f 4051/209/391 4033/207/391 4036/207/391 -f 4036/207/391 4052/208/391 4051/209/391 -f 4028/212/452 4041/196/452 4053/213/452 -f 4053/213/452 4050/214/452 4028/212/452 -f 4045/215/453 4046/216/453 4038/211/453 -f 4038/211/453 4037/209/453 4045/215/453 -f 4054/221/388 4018/221/388 4017/222/388 -f 4017/222/388 4040/222/388 4054/221/388 -f 4040/222/402 4017/222/402 4020/203/402 -f 4020/203/402 4041/203/402 4040/222/402 -f 4041/203/401 4020/203/401 4047/206/401 -f 4047/206/401 4053/206/401 4041/203/401 -f 4053/206/390 4047/206/390 4048/223/390 -f 4048/223/390 4055/223/390 4053/206/390 -f 4055/224/454 4048/224/454 4019/226/454 -f 4019/226/454 4056/225/454 4055/224/454 -f 4056/225/455 4019/226/455 4018/224/455 -f 4018/224/455 4054/224/455 4056/225/455 -f 4050/214/447 4053/213/447 4055/228/447 -f 4055/228/447 4057/227/447 4050/214/447 -f 4057/229/388 4058/221/388 4049/219/388 -f 4049/219/388 4050/220/388 4057/229/388 -f 4026/206/390 4059/223/390 4060/230/390 -f 4060/230/390 4027/205/390 4026/206/390 -f 4060/227/445 4054/228/445 4040/213/445 -f 4040/213/445 4027/214/445 4060/227/445 -f 4023/201/390 4061/202/390 4062/199/390 -f 4062/199/390 4024/200/390 4023/201/390 -f 4060/231/456 4039/233/456 4038/232/456 -f 4038/232/456 4054/224/456 4060/231/456 -f 4054/224/455 4038/232/455 4046/234/455 -f 4046/234/455 4056/225/455 4054/224/455 -f 4056/225/454 4046/234/454 4043/232/454 -f 4043/232/454 4055/224/454 4056/225/454 -f 4055/224/457 4043/232/457 4042/233/457 -f 4042/233/457 4057/231/457 4055/224/457 -f 4031/200/388 4063/199/388 4064/202/388 -f 4064/202/388 4032/201/388 4031/200/388 -f 4035/208/398 4044/236/398 4045/235/398 -f 4045/235/398 4036/207/398 4035/208/398 -f 4036/207/391 4045/235/391 4037/236/391 -f 4037/236/391 4052/208/391 4036/207/391 -f 4059/236/27 4021/238/27 4024/237/27 -f 4024/237/27 4060/231/27 4059/236/27 -f 4060/231/27 4024/237/27 4062/239/27 -f 4062/239/27 4039/233/27 4060/231/27 -f 4039/210/484 4062/241/484 4061/240/484 -f 4061/240/484 4037/209/484 4039/210/484 -f 4037/236/26 4061/238/26 4023/242/26 -f 4023/242/26 4052/208/26 4037/236/26 -f 4052/208/26 4023/242/26 4022/240/26 -f 4022/240/26 4051/209/26 4052/208/26 -f 4034/209/26 4029/240/26 4032/242/26 -f 4032/242/26 4035/208/26 4034/209/26 -f 4035/208/26 4032/242/26 4064/238/26 -f 4064/238/26 4044/236/26 4035/208/26 -f 4044/209/459 4064/240/459 4063/241/459 -f 4063/241/459 4042/210/459 4044/209/459 -f 4042/233/27 4063/239/27 4031/237/27 -f 4031/237/27 4057/231/27 4042/233/27 -f 4057/231/27 4031/237/27 4030/238/27 -f 4030/238/27 4058/236/27 4057/231/27 -f 4065/195/4 4066/198/4 4067/197/4 -f 4067/197/4 4068/196/4 4065/195/4 -f 4069/199/416 4070/202/416 4071/201/415 -f 4071/201/415 4072/200/415 4069/199/416 -f 4073/203/421 4074/206/421 4075/205/421 -f 4075/205/421 4076/204/421 4073/203/421 -f 4077/202/413 4078/199/413 4079/200/412 -f 4079/200/412 4080/201/412 4077/202/413 -f 4081/207/466 4082/209/466 4083/208/466 -f 4083/208/466 4084/207/466 4081/207/466 -f 4085/209/107 4086/211/107 4087/210/107 -f 4076/212/467 4075/214/467 4088/213/467 -f 4088/213/467 4089/196/467 4076/212/467 -f 4090/210/468 4091/211/468 4092/209/468 -f 4093/215/469 4092/209/469 4091/211/469 -f 4091/211/469 4094/216/469 4093/215/469 -f 4095/217/103 4068/196/103 4067/197/103 -f 4067/197/103 4096/218/103 4095/217/103 -f 4097/219/414 4073/203/414 4076/204/414 -f 4076/204/414 4098/220/414 4097/219/414 -f 4099/209/471 4081/207/471 4084/207/471 -f 4084/207/471 4100/208/471 4099/209/471 -f 4076/212/472 4089/196/472 4101/213/472 -f 4101/213/472 4098/214/472 4076/212/472 -f 4093/215/332 4094/216/332 4086/211/332 -f 4086/211/332 4085/209/332 4093/215/332 -f 4102/221/413 4066/221/412 4065/222/412 -f 4065/222/412 4088/222/413 4102/221/413 -f 4088/222/426 4065/222/426 4068/203/426 -f 4068/203/426 4089/203/426 4088/222/426 -f 4089/203/425 4068/203/425 4095/206/425 -f 4095/206/425 4101/206/425 4089/203/425 -f 4101/206/415 4095/206/415 4096/223/415 -f 4096/223/415 4103/223/415 4101/206/415 -f 4103/224/473 4096/224/473 4067/226/473 -f 4067/226/473 4104/225/473 4103/224/473 -f 4104/225/430 4067/226/430 4066/224/430 -f 4066/224/430 4102/224/430 4104/225/430 -f 4098/214/468 4101/213/468 4103/228/468 -f 4103/228/468 4105/227/468 4098/214/468 -f 4105/229/413 4106/221/413 4097/219/413 -f 4097/219/413 4098/220/413 4105/229/413 -f 4074/206/415 4107/223/415 4108/230/415 -f 4108/230/415 4075/205/415 4074/206/415 -f 4108/227/107 4102/228/107 4088/213/107 -f 4088/213/107 4075/214/107 4108/227/107 -f 4071/201/415 4109/202/416 4110/199/416 -f 4110/199/416 4072/200/415 4071/201/415 -f 4108/231/485 4087/233/485 4086/232/485 -f 4086/232/485 4102/224/485 4108/231/485 -f 4102/224/430 4086/232/430 4094/234/430 -f 4094/234/430 4104/225/430 4102/224/430 -f 4104/225/473 4094/234/473 4091/232/473 -f 4091/232/473 4103/224/473 4104/225/473 -f 4103/224/428 4091/232/428 4090/233/428 -f 4090/233/428 4105/231/428 4103/224/428 -f 4079/200/412 4111/199/413 4112/202/413 -f 4112/202/413 4080/201/412 4079/200/412 -f 4083/208/466 4092/236/466 4093/235/466 -f 4093/235/466 4084/207/466 4083/208/466 -f 4084/207/471 4093/235/471 4085/236/471 -f 4085/236/471 4100/208/471 4084/207/471 -f 4107/236/27 4069/238/27 4072/237/27 -f 4072/237/27 4108/231/27 4107/236/27 -f 4108/231/27 4072/237/27 4110/239/27 -f 4110/239/27 4087/233/27 4108/231/27 -f 4087/210/193 4110/241/193 4109/240/193 -f 4109/240/193 4085/209/193 4087/210/193 -f 4085/236/26 4109/238/26 4071/242/26 -f 4071/242/26 4100/208/26 4085/236/26 -f 4100/208/26 4071/242/26 4070/240/26 -f 4070/240/26 4099/209/26 4100/208/26 -f 4082/209/26 4077/240/26 4080/242/26 -f 4080/242/26 4083/208/26 4082/209/26 -f 4083/208/26 4080/242/26 4112/238/26 -f 4112/238/26 4092/236/26 4083/208/26 -f 4092/209/475 4112/240/475 4111/241/475 -f 4111/241/475 4090/210/475 4092/209/475 -f 4090/233/27 4111/239/27 4079/237/27 -f 4079/237/27 4105/231/27 4090/233/27 -f 4105/231/27 4079/237/27 4078/238/27 -f 4078/238/27 4106/236/27 4105/231/27 -f 4113/243/476 4114/246/476 4115/245/476 -f 4115/245/476 4116/244/476 4113/243/476 -f 4113/247/477 4117/250/477 4118/249/477 -f 4118/249/477 4114/248/477 4113/247/477 -f 4114/246/478 4118/252/478 4119/251/478 -f 4119/251/478 4115/245/478 4114/246/478 -f 4115/248/479 4119/249/479 4120/250/479 -f 4120/250/479 4116/247/479 4115/248/479 -f 4121/195/464 4122/198/464 4123/197/464 -f 4123/197/464 4124/196/464 4121/195/464 -f 4125/199/416 4126/202/416 4127/201/415 -f 4127/201/415 4128/200/415 4125/199/416 -f 4129/203/421 4130/206/421 4131/205/421 -f 4131/205/421 4132/204/421 4129/203/421 -f 4133/202/413 4134/199/413 4135/200/412 -f 4135/200/412 4136/201/412 4133/202/413 -f 4137/207/466 4138/209/466 4139/208/466 -f 4139/208/466 4140/207/466 4137/207/466 -f 4141/209/107 4142/211/107 4143/210/107 -f 4132/212/467 4131/214/467 4144/213/467 -f 4144/213/467 4145/196/467 4132/212/467 -f 4146/210/468 4147/211/468 4148/209/468 -f 4149/215/469 4148/209/469 4147/211/469 -f 4147/211/469 4150/216/469 4149/215/469 -f 4151/217/103 4124/196/103 4123/197/103 -f 4123/197/103 4152/218/103 4151/217/103 -f 4153/219/470 4129/203/414 4132/204/414 -f 4132/204/414 4154/220/470 4153/219/470 -f 4155/209/471 4137/207/471 4140/207/471 -f 4140/207/471 4156/208/471 4155/209/471 -f 4132/212/472 4145/196/472 4157/213/472 -f 4157/213/472 4154/214/472 4132/212/472 -f 4149/215/332 4150/216/332 4142/211/332 -f 4142/211/332 4141/209/332 4149/215/332 -f 4158/221/413 4122/221/413 4121/222/413 -f 4121/222/413 4144/222/413 4158/221/413 -f 4144/222/426 4121/222/426 4124/203/426 -f 4124/203/426 4145/203/426 4144/222/426 -f 4145/203/425 4124/203/425 4151/206/425 -f 4151/206/425 4157/206/425 4145/203/425 -f 4157/206/415 4151/206/415 4152/223/415 -f 4152/223/415 4159/223/415 4157/206/415 -f 4159/224/473 4152/224/473 4123/226/473 -f 4123/226/473 4160/225/473 4159/224/473 -f 4160/225/430 4123/226/430 4122/224/430 -f 4122/224/430 4158/224/430 4160/225/430 -f 4154/214/468 4157/213/468 4159/228/468 -f 4159/228/468 4161/227/468 4154/214/468 -f 4161/229/437 4162/221/412 4153/219/412 -f 4153/219/412 4154/220/437 4161/229/437 -f 4130/206/415 4163/223/415 4164/230/416 -f 4164/230/416 4131/205/416 4130/206/415 -f 4164/227/107 4158/228/107 4144/213/107 -f 4144/213/107 4131/214/107 4164/227/107 -f 4127/201/415 4165/202/416 4166/199/416 -f 4166/199/416 4128/200/415 4127/201/415 -f 4164/231/485 4143/233/485 4142/232/485 -f 4142/232/485 4158/224/485 4164/231/485 -f 4158/224/430 4142/232/430 4150/234/430 -f 4150/234/430 4160/225/430 4158/224/430 -f 4160/225/473 4150/234/473 4147/232/473 -f 4147/232/473 4159/224/473 4160/225/473 -f 4159/224/428 4147/232/428 4146/233/428 -f 4146/233/428 4161/231/428 4159/224/428 -f 4135/200/412 4167/199/413 4168/202/413 -f 4168/202/413 4136/201/412 4135/200/412 -f 4139/208/466 4148/236/466 4149/235/466 -f 4149/235/466 4140/207/466 4139/208/466 -f 4140/207/471 4149/235/471 4141/236/471 -f 4141/236/471 4156/208/471 4140/207/471 -f 4163/236/27 4125/238/27 4128/237/27 -f 4128/237/27 4164/231/27 4163/236/27 -f 4164/231/27 4128/237/27 4166/239/27 -f 4166/239/27 4143/233/27 4164/231/27 -f 4143/210/193 4166/241/193 4165/240/193 -f 4165/240/193 4141/209/193 4143/210/193 -f 4141/236/26 4165/238/26 4127/242/26 -f 4127/242/26 4156/208/26 4141/236/26 -f 4156/208/26 4127/242/26 4126/240/26 -f 4126/240/26 4155/209/26 4156/208/26 -f 4138/209/26 4133/240/26 4136/242/26 -f 4136/242/26 4139/208/26 4138/209/26 -f 4139/208/26 4136/242/26 4168/238/26 -f 4168/238/26 4148/236/26 4139/208/26 -f 4148/209/475 4168/240/475 4167/241/475 -f 4167/241/475 4146/210/475 4148/209/475 -f 4146/233/27 4167/239/27 4135/237/27 -f 4135/237/27 4161/231/27 4146/233/27 -f 4161/231/27 4135/237/27 4134/238/27 -f 4134/238/27 4162/236/27 4161/231/27 -f 4169/243/460 4170/246/460 4171/245/460 -f 4171/245/460 4172/244/460 4169/243/460 -f 4169/247/461 4173/250/461 4174/249/461 -f 4174/249/461 4170/248/461 4169/247/461 -f 4170/246/462 4174/252/462 4175/251/462 -f 4175/251/462 4171/245/462 4170/246/462 -f 4171/248/463 4175/249/463 4176/250/463 -f 4176/250/463 4172/247/463 4171/248/463 -f 4177/195/387 4178/198/387 4179/197/387 -f 4179/197/387 4180/196/387 4177/195/387 -f 4181/199/388 4182/202/388 4183/201/388 -f 4183/201/388 4184/200/388 4181/199/388 -f 4185/203/389 4186/206/389 4187/205/389 -f 4187/205/389 4188/204/389 4185/203/389 -f 4189/202/390 4190/199/390 4191/200/390 -f 4191/200/390 4192/201/390 4189/202/390 -f 4193/207/391 4194/209/391 4195/208/391 -f 4195/208/391 4196/207/391 4193/207/391 -f 4197/209/392 4198/211/392 4199/210/392 -f 4188/212/393 4187/214/393 4200/213/393 -f 4200/213/393 4201/196/393 4188/212/393 -f 4202/210/394 4203/211/394 4204/209/394 -f 4205/215/395 4204/209/395 4203/211/395 -f 4203/211/395 4206/216/395 4205/215/395 -f 4207/217/396 4180/196/486 4179/197/486 -f 4179/197/486 4208/218/396 4207/217/396 -f 4209/219/397 4185/203/397 4188/204/397 -f 4188/204/397 4210/220/397 4209/219/397 -f 4211/209/398 4193/207/398 4196/207/398 -f 4196/207/398 4212/208/398 4211/209/398 -f 4188/212/399 4201/196/399 4213/213/399 -f 4213/213/399 4210/214/399 4188/212/399 -f 4205/215/400 4206/216/400 4198/211/400 -f 4198/211/400 4197/209/400 4205/215/400 -f 4214/221/390 4178/221/390 4177/222/390 -f 4177/222/390 4200/222/390 4214/221/390 -f 4200/222/401 4177/222/401 4180/203/401 -f 4180/203/401 4201/203/401 4200/222/401 -f 4201/203/402 4180/203/402 4207/206/402 -f 4207/206/402 4213/206/402 4201/203/402 -f 4213/206/388 4207/206/388 4208/223/388 -f 4208/223/388 4215/223/388 4213/206/388 -f 4215/224/403 4208/224/403 4179/226/403 -f 4179/226/403 4216/225/403 4215/224/403 -f 4216/225/404 4179/226/404 4178/224/404 -f 4178/224/404 4214/224/404 4216/225/404 -f 4210/214/394 4213/213/394 4215/228/394 -f 4215/228/394 4217/227/394 4210/214/394 -f 4217/229/390 4218/221/390 4209/219/390 -f 4209/219/390 4210/220/390 4217/229/390 -f 4186/206/388 4219/223/388 4220/230/388 -f 4220/230/388 4187/205/388 4186/206/388 -f 4220/227/392 4214/228/392 4200/213/392 -f 4200/213/392 4187/214/392 4220/227/392 -f 4183/201/388 4221/202/388 4222/199/388 -f 4222/199/388 4184/200/388 4183/201/388 -f 4220/231/405 4199/233/405 4198/232/405 -f 4198/232/405 4214/224/405 4220/231/405 -f 4214/224/404 4198/232/404 4206/234/404 -f 4206/234/404 4216/225/404 4214/224/404 -f 4216/225/403 4206/234/403 4203/232/403 -f 4203/232/403 4215/224/403 4216/225/403 -f 4215/224/407 4203/232/407 4202/233/407 -f 4202/233/407 4217/231/407 4215/224/407 -f 4191/200/390 4223/199/390 4224/202/390 -f 4224/202/390 4192/201/390 4191/200/390 -f 4195/208/391 4204/236/391 4205/235/391 -f 4205/235/391 4196/207/391 4195/208/391 -f 4196/207/398 4205/235/398 4197/236/398 -f 4197/236/398 4212/208/398 4196/207/398 -f 4219/236/27 4181/238/27 4184/237/27 -f 4184/237/27 4220/231/27 4219/236/27 -f 4220/231/27 4184/237/27 4222/239/27 -f 4222/239/27 4199/233/27 4220/231/27 -f 4199/210/409 4222/241/409 4221/240/409 -f 4221/240/409 4197/209/409 4199/210/409 -f 4197/236/26 4221/238/26 4183/242/26 -f 4183/242/26 4212/208/26 4197/236/26 -f 4212/208/26 4183/242/26 4182/240/26 -f 4182/240/26 4211/209/26 4212/208/26 -f 4194/209/26 4189/240/26 4192/242/26 -f 4192/242/26 4195/208/26 4194/209/26 -f 4195/208/26 4192/242/26 4224/238/26 -f 4224/238/26 4204/236/26 4195/208/26 -f 4204/209/410 4224/240/410 4223/241/410 -f 4223/241/410 4202/210/410 4204/209/410 -f 4202/233/27 4223/239/27 4191/237/27 -f 4191/237/27 4217/231/27 4202/233/27 -f 4217/231/27 4191/237/27 4190/238/27 -f 4190/238/27 4218/236/27 4217/231/27 -f 4225/243/148 4226/246/148 4227/245/148 -f 4227/245/148 4228/244/148 4225/243/148 -f 4225/247/7 4229/250/7 4230/249/7 -f 4230/249/7 4226/248/7 4225/247/7 -f 4226/246/149 4230/252/149 4231/251/149 -f 4231/251/149 4227/245/149 4226/246/149 -f 4227/248/1 4231/249/1 4232/250/1 -f 4232/250/1 4228/247/1 4227/248/1 -f 4233/243/187 4234/246/187 4235/245/187 -f 4235/245/187 4236/244/187 4233/243/187 -f 4233/247/161 4237/250/161 4238/249/161 -f 4238/249/161 4234/248/161 4233/247/161 -f 4234/246/188 4238/252/188 4239/251/188 -f 4239/251/188 4235/245/188 4234/246/188 -f 4235/248/163 4239/249/163 4240/250/163 -f 4240/250/163 4236/247/163 4235/248/163 -f 4241/243/154 4242/246/154 4243/245/154 -f 4243/245/154 4244/244/154 4241/243/154 -f 4241/247/1 4245/250/1 4246/249/1 -f 4246/249/1 4242/248/1 4241/247/1 -f 4242/246/155 4246/252/155 4247/251/155 -f 4247/251/155 4243/245/155 4242/246/155 -f 4243/248/7 4247/249/7 4248/250/7 -f 4248/250/7 4244/247/7 4243/248/7 -f 4249/243/439 4250/246/439 4251/245/439 -f 4251/245/439 4252/244/439 4249/243/439 -f 4249/247/440 4253/250/440 4254/249/440 -f 4254/249/440 4250/248/440 4249/247/440 -f 4250/246/441 4254/252/441 4255/251/441 -f 4255/251/441 4251/245/441 4250/246/441 -f 4251/248/442 4255/249/442 4256/250/442 -f 4256/250/442 4252/247/442 4251/248/442 -f 4257/243/180 4258/246/180 4259/245/180 -f 4259/245/180 4260/244/180 4257/243/180 -f 4257/247/151 4261/250/151 4262/249/151 -f 4262/249/151 4258/248/151 4257/247/151 -f 4258/246/181 4262/252/181 4263/251/181 -f 4263/251/181 4259/245/181 4258/246/181 -f 4259/248/153 4263/249/153 4264/250/153 -f 4264/250/153 4260/247/153 4259/248/153 -f 4265/195/387 4266/198/387 4267/197/387 -f 4267/197/387 4268/196/387 4265/195/387 -f 4269/199/388 4270/202/388 4271/201/388 -f 4271/201/388 4272/200/388 4269/199/388 -f 4273/203/389 4274/206/389 4275/205/389 -f 4275/205/389 4276/204/389 4273/203/389 -f 4277/202/390 4278/199/390 4279/200/390 -f 4279/200/390 4280/201/390 4277/202/390 -f 4281/207/391 4282/209/391 4283/208/391 -f 4283/208/391 4284/207/391 4281/207/391 -f 4285/209/392 4286/211/392 4287/210/392 -f 4276/212/393 4275/214/393 4288/213/393 -f 4288/213/393 4289/196/393 4276/212/393 -f 4290/210/394 4291/211/394 4292/209/394 -f 4293/215/395 4292/209/395 4291/211/395 -f 4291/211/395 4294/216/395 4293/215/395 -f 4295/217/396 4268/196/486 4267/197/486 -f 4267/197/486 4296/218/396 4295/217/396 -f 4297/219/397 4273/203/397 4276/204/397 -f 4276/204/397 4298/220/397 4297/219/397 -f 4299/209/398 4281/207/398 4284/207/398 -f 4284/207/398 4300/208/398 4299/209/398 -f 4276/212/399 4289/196/399 4301/213/399 -f 4301/213/399 4298/214/399 4276/212/399 -f 4293/215/400 4294/216/400 4286/211/400 -f 4286/211/400 4285/209/400 4293/215/400 -f 4302/221/390 4266/221/390 4265/222/390 -f 4265/222/390 4288/222/390 4302/221/390 -f 4288/222/401 4265/222/401 4268/203/401 -f 4268/203/401 4289/203/401 4288/222/401 -f 4289/203/402 4268/203/402 4295/206/402 -f 4295/206/402 4301/206/402 4289/203/402 -f 4301/206/388 4295/206/388 4296/223/388 -f 4296/223/388 4303/223/388 4301/206/388 -f 4303/224/403 4296/224/403 4267/226/403 -f 4267/226/403 4304/225/403 4303/224/403 -f 4304/225/404 4267/226/404 4266/224/404 -f 4266/224/404 4302/224/404 4304/225/404 -f 4298/214/394 4301/213/394 4303/228/394 -f 4303/228/394 4305/227/394 4298/214/394 -f 4305/229/390 4306/221/390 4297/219/390 -f 4297/219/390 4298/220/390 4305/229/390 -f 4274/206/388 4307/223/388 4308/230/388 -f 4308/230/388 4275/205/388 4274/206/388 -f 4308/227/392 4302/228/392 4288/213/392 -f 4288/213/392 4275/214/392 4308/227/392 -f 4271/201/388 4309/202/388 4310/199/388 -f 4310/199/388 4272/200/388 4271/201/388 -f 4308/231/405 4287/233/405 4286/232/405 -f 4286/232/405 4302/224/405 4308/231/405 -f 4302/224/404 4286/232/404 4294/234/404 -f 4294/234/404 4304/225/404 4302/224/404 -f 4304/225/403 4294/234/403 4291/232/403 -f 4291/232/403 4303/224/403 4304/225/403 -f 4303/224/407 4291/232/407 4290/233/407 -f 4290/233/407 4305/231/407 4303/224/407 -f 4279/200/390 4311/199/390 4312/202/390 -f 4312/202/390 4280/201/390 4279/200/390 -f 4283/208/391 4292/236/391 4293/235/391 -f 4293/235/391 4284/207/391 4283/208/391 -f 4284/207/398 4293/235/398 4285/236/398 -f 4285/236/398 4300/208/398 4284/207/398 -f 4307/236/27 4269/238/27 4272/237/27 -f 4272/237/27 4308/231/27 4307/236/27 -f 4308/231/27 4272/237/27 4310/239/27 -f 4310/239/27 4287/233/27 4308/231/27 -f 4287/210/409 4310/241/409 4309/240/409 -f 4309/240/409 4285/209/409 4287/210/409 -f 4285/236/26 4309/238/26 4271/242/26 -f 4271/242/26 4300/208/26 4285/236/26 -f 4300/208/26 4271/242/26 4270/240/26 -f 4270/240/26 4299/209/26 4300/208/26 -f 4282/209/26 4277/240/26 4280/242/26 -f 4280/242/26 4283/208/26 4282/209/26 -f 4283/208/26 4280/242/26 4312/238/26 -f 4312/238/26 4292/236/26 4283/208/26 -f 4292/209/410 4312/240/410 4311/241/410 -f 4311/241/410 4290/210/410 4292/209/410 -f 4290/233/27 4311/239/27 4279/237/27 -f 4279/237/27 4305/231/27 4290/233/27 -f 4305/231/27 4279/237/27 4278/238/27 -f 4278/238/27 4306/236/27 4305/231/27 -f 4313/195/436 4314/198/436 4315/197/411 -f 4315/197/411 4316/196/411 4313/195/436 -f 4317/199/437 4318/202/437 4319/201/437 -f 4319/201/437 4320/200/437 4317/199/437 -f 4321/203/414 4322/206/414 4323/205/414 -f 4323/205/414 4324/204/414 4321/203/414 -f 4325/202/465 4326/199/465 4327/200/465 -f 4327/200/465 4328/201/465 4325/202/465 -f 4329/207/417 4330/209/417 4331/208/417 -f 4331/208/417 4332/207/417 4329/207/417 -f 4333/209/171 4334/211/171 4335/210/171 -f 4324/212/418 4323/214/418 4336/213/418 -f 4336/213/418 4337/196/418 4324/212/418 -f 4338/210/419 4339/211/419 4340/209/419 -f 4341/215/420 4340/209/420 4339/211/420 -f 4339/211/420 4342/216/420 4341/215/420 -f 4343/217/167 4316/196/167 4315/197/167 -f 4315/197/167 4344/218/167 4343/217/167 -f 4345/219/438 4321/203/421 4324/204/421 -f 4324/204/421 4346/220/421 4345/219/438 -f 4347/209/422 4329/207/422 4332/207/422 -f 4332/207/422 4348/208/422 4347/209/422 -f 4324/212/423 4337/196/423 4349/213/423 -f 4349/213/423 4346/214/423 4324/212/423 -f 4341/215/424 4342/216/424 4334/211/424 -f 4334/211/424 4333/209/424 4341/215/424 -f 4350/221/465 4314/221/465 4313/222/465 -f 4313/222/465 4336/222/465 4350/221/465 -f 4336/222/425 4313/222/425 4316/203/425 -f 4316/203/425 4337/203/425 4336/222/425 -f 4337/203/426 4316/203/426 4343/206/426 -f 4343/206/426 4349/206/426 4337/203/426 -f 4349/206/437 4343/206/437 4344/223/437 -f 4344/223/437 4351/223/437 4349/206/437 -f 4351/224/427 4344/224/427 4315/226/427 -f 4315/226/427 4352/225/427 4351/224/427 -f 4352/225/428 4315/226/428 4314/224/428 -f 4314/224/428 4350/224/428 4352/225/428 -f 4346/214/419 4349/213/419 4351/228/419 -f 4351/228/419 4353/227/419 4346/214/419 -f 4353/229/465 4354/221/465 4345/219/465 -f 4345/219/465 4346/220/465 4353/229/465 -f 4322/206/437 4355/223/437 4356/230/437 -f 4356/230/437 4323/205/437 4322/206/437 -f 4356/227/171 4350/228/171 4336/213/171 -f 4336/213/171 4323/214/171 4356/227/171 -f 4319/201/437 4357/202/437 4358/199/437 -f 4358/199/437 4320/200/437 4319/201/437 -f 4356/231/487 4335/233/487 4334/232/487 -f 4334/232/487 4350/224/487 4356/231/487 -f 4350/224/428 4334/232/428 4342/234/428 -f 4342/234/428 4352/225/428 4350/224/428 -f 4352/225/427 4342/234/427 4339/232/427 -f 4339/232/427 4351/224/427 4352/225/427 -f 4351/224/430 4339/232/430 4338/233/430 -f 4338/233/430 4353/231/430 4351/224/430 -f 4327/200/465 4359/199/465 4360/202/465 -f 4360/202/465 4328/201/465 4327/200/465 -f 4331/208/417 4340/236/417 4341/235/417 -f 4341/235/417 4332/207/417 4331/208/417 -f 4332/207/422 4341/235/422 4333/236/422 -f 4333/236/422 4348/208/422 4332/207/422 -f 4355/236/27 4317/238/27 4320/237/27 -f 4320/237/27 4356/231/27 4355/236/27 -f 4356/231/27 4320/237/27 4358/239/27 -f 4358/239/27 4335/233/27 4356/231/27 -f 4335/210/191 4358/241/191 4357/240/191 -f 4357/240/191 4333/209/191 4335/210/191 -f 4333/236/26 4357/238/26 4319/242/26 -f 4319/242/26 4348/208/26 4333/236/26 -f 4348/208/26 4319/242/26 4318/240/26 -f 4318/240/26 4347/209/26 4348/208/26 -f 4330/209/26 4325/240/26 4328/242/26 -f 4328/242/26 4331/208/26 4330/209/26 -f 4331/208/26 4328/242/26 4360/238/26 -f 4360/238/26 4340/236/26 4331/208/26 -f 4340/209/431 4360/240/431 4359/241/431 -f 4359/241/431 4338/210/431 4340/209/431 -f 4338/233/27 4359/239/27 4327/237/27 -f 4327/237/27 4353/231/27 4338/233/27 -f 4353/231/27 4327/237/27 4326/238/27 -f 4326/238/27 4354/236/27 4353/231/27 -f 4361/243/160 4362/246/160 4363/245/160 -f 4363/245/160 4364/244/160 4361/243/160 -f 4361/247/163 4365/250/163 4366/249/163 -f 4366/249/163 4362/248/163 4361/247/163 -f 4362/246/162 4366/252/162 4367/251/162 -f 4367/251/162 4363/245/162 4362/246/162 -f 4363/248/161 4367/249/161 4368/250/161 -f 4368/250/161 4364/247/161 4363/248/161 -f 4369/195/411 4370/198/411 4371/197/436 -f 4371/197/436 4372/196/436 4369/195/411 -f 4373/199/437 4374/202/437 4375/201/437 -f 4375/201/437 4376/200/437 4373/199/437 -f 4377/203/414 4378/206/414 4379/205/414 -f 4379/205/414 4380/204/414 4377/203/414 -f 4381/202/465 4382/199/465 4383/200/465 -f 4383/200/465 4384/201/465 4381/202/465 -f 4385/207/417 4386/209/417 4387/208/417 -f 4387/208/417 4388/207/417 4385/207/417 -f 4389/209/171 4390/211/171 4391/210/171 -f 4380/212/418 4379/214/418 4392/213/418 -f 4392/213/418 4393/196/418 4380/212/418 -f 4394/210/419 4395/211/419 4396/209/419 -f 4397/215/420 4396/209/420 4395/211/420 -f 4395/211/420 4398/216/420 4397/215/420 -f 4399/217/167 4372/196/167 4371/197/167 -f 4371/197/167 4400/218/167 4399/217/167 -f 4401/219/421 4377/203/421 4380/204/438 -f 4380/204/438 4402/220/421 4401/219/421 -f 4403/209/422 4385/207/422 4388/207/422 -f 4388/207/422 4404/208/422 4403/209/422 -f 4380/212/423 4393/196/423 4405/213/423 -f 4405/213/423 4402/214/423 4380/212/423 -f 4397/215/424 4398/216/424 4390/211/424 -f 4390/211/424 4389/209/424 4397/215/424 -f 4406/221/465 4370/221/465 4369/222/465 -f 4369/222/465 4392/222/465 4406/221/465 -f 4392/222/425 4369/222/425 4372/203/425 -f 4372/203/425 4393/203/425 4392/222/425 -f 4393/203/426 4372/203/426 4399/206/426 -f 4399/206/426 4405/206/426 4393/203/426 -f 4405/206/437 4399/206/437 4400/223/437 -f 4400/223/437 4407/223/437 4405/206/437 -f 4407/224/427 4400/224/427 4371/226/427 -f 4371/226/427 4408/225/427 4407/224/427 -f 4408/225/428 4371/226/428 4370/224/428 -f 4370/224/428 4406/224/428 4408/225/428 -f 4402/214/419 4405/213/419 4407/228/419 -f 4407/228/419 4409/227/419 4402/214/419 -f 4409/229/465 4410/221/465 4401/219/465 -f 4401/219/465 4402/220/465 4409/229/465 -f 4378/206/437 4411/223/437 4412/230/437 -f 4412/230/437 4379/205/437 4378/206/437 -f 4412/227/171 4406/228/171 4392/213/171 -f 4392/213/171 4379/214/171 4412/227/171 -f 4375/201/437 4413/202/437 4414/199/437 -f 4414/199/437 4376/200/437 4375/201/437 -f 4412/231/487 4391/233/487 4390/232/487 -f 4390/232/487 4406/224/487 4412/231/487 -f 4406/224/428 4390/232/428 4398/234/428 -f 4398/234/428 4408/225/428 4406/224/428 -f 4408/225/427 4398/234/427 4395/232/427 -f 4395/232/427 4407/224/427 4408/225/427 -f 4407/224/430 4395/232/430 4394/233/430 -f 4394/233/430 4409/231/430 4407/224/430 -f 4383/200/465 4415/199/465 4416/202/465 -f 4416/202/465 4384/201/465 4383/200/465 -f 4387/208/417 4396/236/417 4397/235/417 -f 4397/235/417 4388/207/417 4387/208/417 -f 4388/207/422 4397/235/422 4389/236/422 -f 4389/236/422 4404/208/422 4388/207/422 -f 4411/236/27 4373/238/27 4376/237/27 -f 4376/237/27 4412/231/27 4411/236/27 -f 4412/231/27 4376/237/27 4414/239/27 -f 4414/239/27 4391/233/27 4412/231/27 -f 4391/210/191 4414/241/191 4413/240/191 -f 4413/240/191 4389/209/191 4391/210/191 -f 4389/236/26 4413/238/26 4375/242/26 -f 4375/242/26 4404/208/26 4389/236/26 -f 4404/208/26 4375/242/26 4374/240/26 -f 4374/240/26 4403/209/26 4404/208/26 -f 4386/209/26 4381/240/26 4384/242/26 -f 4384/242/26 4387/208/26 4386/209/26 -f 4387/208/26 4384/242/26 4416/238/26 -f 4416/238/26 4396/236/26 4387/208/26 -f 4396/209/431 4416/240/431 4415/241/431 -f 4415/241/431 4394/210/431 4396/209/431 -f 4394/233/27 4415/239/27 4383/237/27 -f 4383/237/27 4409/231/27 4394/233/27 -f 4409/231/27 4383/237/27 4382/238/27 -f 4382/238/27 4410/236/27 4409/231/27 -f 4417/243/432 4418/246/432 4419/245/432 -f 4419/245/432 4420/244/432 4417/243/432 -f 4417/247/433 4421/250/433 4422/249/433 -f 4422/249/433 4418/248/433 4417/247/433 -f 4418/246/434 4422/252/434 4423/251/434 -f 4423/251/434 4419/245/434 4418/246/434 -f 4419/248/435 4423/249/435 4424/250/435 -f 4424/250/435 4420/247/435 4419/248/435 -f 4425/195/443 4426/198/443 4427/197/443 -f 4427/197/443 4428/196/443 4425/195/443 -f 4429/199/390 4430/202/390 4431/201/390 -f 4431/201/390 4432/200/390 4429/199/390 -f 4433/203/444 4434/206/444 4435/205/444 -f 4435/205/444 4436/204/444 4433/203/444 -f 4437/202/388 4438/199/388 4439/200/388 -f 4439/200/388 4440/201/388 4437/202/388 -f 4441/207/398 4442/209/398 4443/208/398 -f 4443/208/398 4444/207/398 4441/207/398 -f 4445/209/445 4446/211/445 4447/210/445 -f 4436/212/446 4435/214/446 4448/213/446 -f 4448/213/446 4449/196/446 4436/212/446 -f 4450/210/447 4451/211/447 4452/209/447 -f 4453/215/448 4452/209/448 4451/211/448 -f 4451/211/448 4454/216/448 4453/215/448 -f 4455/217/449 4428/196/449 4427/197/449 -f 4427/197/449 4456/218/449 4455/217/449 -f 4457/219/451 4433/203/451 4436/204/451 -f 4436/204/451 4458/220/451 4457/219/451 -f 4459/209/391 4441/207/391 4444/207/391 -f 4444/207/391 4460/208/391 4459/209/391 -f 4436/212/452 4449/196/452 4461/213/452 -f 4461/213/452 4458/214/452 4436/212/452 -f 4453/215/453 4454/216/453 4446/211/453 -f 4446/211/453 4445/209/453 4453/215/453 -f 4462/221/388 4426/221/388 4425/222/388 -f 4425/222/388 4448/222/388 4462/221/388 -f 4448/222/402 4425/222/402 4428/203/402 -f 4428/203/402 4449/203/402 4448/222/402 -f 4449/203/401 4428/203/401 4455/206/401 -f 4455/206/401 4461/206/401 4449/203/401 -f 4461/206/390 4455/206/390 4456/223/390 -f 4456/223/390 4463/223/390 4461/206/390 -f 4463/224/454 4456/224/454 4427/226/454 -f 4427/226/454 4464/225/454 4463/224/454 -f 4464/225/455 4427/226/455 4426/224/455 -f 4426/224/455 4462/224/455 4464/225/455 -f 4458/214/447 4461/213/447 4463/228/447 -f 4463/228/447 4465/227/447 4458/214/447 -f 4465/229/388 4466/221/388 4457/219/388 -f 4457/219/388 4458/220/388 4465/229/388 -f 4434/206/390 4467/223/390 4468/230/390 -f 4468/230/390 4435/205/390 4434/206/390 -f 4468/227/445 4462/228/445 4448/213/445 -f 4448/213/445 4435/214/445 4468/227/445 -f 4431/201/390 4469/202/390 4470/199/390 -f 4470/199/390 4432/200/390 4431/201/390 -f 4468/231/456 4447/233/456 4446/232/456 -f 4446/232/456 4462/224/456 4468/231/456 -f 4462/224/455 4446/232/455 4454/234/455 -f 4454/234/455 4464/225/455 4462/224/455 -f 4464/225/454 4454/234/454 4451/232/454 -f 4451/232/454 4463/224/454 4464/225/454 -f 4463/224/457 4451/232/457 4450/233/457 -f 4450/233/457 4465/231/457 4463/224/457 -f 4439/200/388 4471/199/388 4472/202/388 -f 4472/202/388 4440/201/388 4439/200/388 -f 4443/208/398 4452/236/398 4453/235/398 -f 4453/235/398 4444/207/398 4443/208/398 -f 4444/207/391 4453/235/391 4445/236/391 -f 4445/236/391 4460/208/391 4444/207/391 -f 4467/236/27 4429/238/27 4432/237/27 -f 4432/237/27 4468/231/27 4467/236/27 -f 4468/231/27 4432/237/27 4470/239/27 -f 4470/239/27 4447/233/27 4468/231/27 -f 4447/210/484 4470/241/484 4469/240/484 -f 4469/240/484 4445/209/484 4447/210/484 -f 4445/236/26 4469/238/26 4431/242/26 -f 4431/242/26 4460/208/26 4445/236/26 -f 4460/208/26 4431/242/26 4430/240/26 -f 4430/240/26 4459/209/26 4460/208/26 -f 4442/209/26 4437/240/26 4440/242/26 -f 4440/242/26 4443/208/26 4442/209/26 -f 4443/208/26 4440/242/26 4472/238/26 -f 4472/238/26 4452/236/26 4443/208/26 -f 4452/209/459 4472/240/459 4471/241/459 -f 4471/241/459 4450/210/459 4452/209/459 -f 4450/233/27 4471/239/27 4439/237/27 -f 4439/237/27 4465/231/27 4450/233/27 -f 4465/231/27 4439/237/27 4438/238/27 -f 4438/238/27 4466/236/27 4465/231/27 -f 4473/243/150 4474/246/150 4475/245/150 -f 4475/245/150 4476/244/150 4473/243/150 -f 4473/247/153 4477/250/153 4478/249/153 -f 4478/249/153 4474/248/153 4473/247/153 -f 4474/246/152 4478/252/152 4479/251/152 -f 4479/251/152 4475/245/152 4474/246/152 -f 4475/248/151 4479/249/151 4480/250/151 -f 4480/250/151 4476/247/151 4475/248/151 -f 4481/253/18 4482/256/18 4483/255/18 -f 4483/255/18 4484/254/18 4481/253/18 -f 4485/257/17 4486/258/17 4482/256/17 -f 4482/256/17 4481/253/17 4485/257/17 -f 4487/259/16 4488/260/16 4486/258/16 -f 4486/258/16 4485/257/16 4487/259/16 -f 4489/261/15 4490/264/15 4488/263/15 -f 4488/263/15 4487/262/118 4489/261/15 -f 4491/265/14 4492/266/14 4490/264/14 -f 4490/264/14 4489/261/14 4491/265/14 -f 4493/267/13 4494/268/13 4492/266/13 -f 4492/266/13 4491/265/13 4493/267/13 -f 4495/269/25 4496/270/25 4494/268/24 -f 4494/268/24 4493/267/24 4495/269/25 -f 4497/271/23 4498/272/23 4496/270/23 -f 4496/270/23 4495/269/23 4497/271/23 -f 4499/273/191 4500/274/22 4498/272/22 -f 4498/272/22 4497/271/22 4499/273/191 -f 4501/275/21 4502/276/21 4500/274/21 -f 4500/274/21 4499/273/21 4501/275/21 -f 4503/277/20 4504/278/20 4502/276/20 -f 4502/276/20 4501/275/20 4503/277/20 -f 4484/254/19 4483/255/19 4504/278/190 -f 4504/278/190 4503/277/190 4484/254/19 -f 4482/279/27 4505/282/27 4506/281/27 -f 4506/281/27 4483/280/27 4482/279/27 -f 4507/283/27 4508/284/27 4509/282/27 -f 4509/282/27 4510/279/27 4507/283/27 -f 4488/285/27 4511/285/27 4512/284/27 -f 4512/284/27 4486/283/27 4488/285/27 -f 4513/286/27 4514/287/27 4515/285/27 -f 4515/285/27 4516/285/27 4513/286/27 -f 4492/288/27 4517/289/27 4518/287/27 -f 4518/287/27 4490/286/27 4492/288/27 -f 4519/290/27 4520/291/27 4521/289/27 -f 4521/289/27 4522/288/27 4519/290/27 -f 4496/292/27 4523/293/27 4524/291/27 -f 4524/291/27 4494/290/27 4496/292/27 -f 4525/294/27 4526/295/27 4527/293/27 -f 4527/293/27 4528/292/27 4525/294/27 -f 4500/296/27 4529/297/27 4530/295/27 -f 4530/295/27 4498/294/27 4500/296/27 -f 4531/298/27 4532/299/27 4533/297/27 -f 4533/297/27 4534/296/27 4531/298/27 -f 4504/300/27 4535/300/27 4536/299/27 -f 4536/299/27 4502/298/27 4504/300/27 -f 4537/280/27 4538/281/27 4539/300/27 -f 4539/300/27 4540/300/27 4537/280/27 -f 4505/301/24 4541/304/24 4542/303/24 -f 4542/303/24 4506/302/24 4505/301/24 -f 4512/305/23 4543/306/23 4541/304/23 -f 4541/304/23 4505/301/23 4512/305/23 -f 4511/307/22 4544/308/22 4543/306/22 -f 4543/306/22 4512/305/191 4511/307/22 -f 4518/309/21 4545/310/21 4544/308/21 -f 4544/308/21 4511/307/21 4518/309/21 -f 4517/311/20 4546/312/20 4545/310/20 -f 4545/310/20 4518/309/20 4517/311/20 -f 4524/313/19 4547/314/19 4546/312/19 -f 4546/312/19 4517/311/19 4524/313/19 -f 4523/315/194 4548/316/194 4547/314/18 -f 4547/314/18 4524/313/18 4523/315/194 -f 4530/317/17 4549/318/17 4548/316/17 -f 4548/316/17 4523/315/17 4530/317/17 -f 4529/319/16 4550/320/16 4549/318/16 -f 4549/318/16 4530/317/16 4529/319/16 -f 4536/321/118 4551/324/15 4550/323/15 -f 4550/323/15 4529/322/15 4536/321/118 -f 4535/325/14 4552/326/14 4551/324/14 -f 4551/324/14 4536/321/14 4535/325/14 -f 4506/302/13 4542/303/13 4552/326/192 -f 4552/326/192 4535/325/192 4506/302/13 -f 4541/327/27 4553/329/27 4542/328/27 -f 4543/330/27 4553/329/27 4541/327/27 -f 4544/331/27 4553/329/27 4543/330/27 -f 4545/332/27 4553/329/27 4544/331/27 -f 4546/333/27 4553/329/27 4545/332/27 -f 4547/334/27 4553/329/27 4546/333/27 -f 4548/335/27 4553/329/27 4547/334/27 -f 4549/336/27 4553/329/27 4548/335/27 -f 4550/337/27 4553/329/27 4549/336/27 -f 4551/338/27 4553/329/27 4550/337/27 -f 4552/339/27 4553/329/27 4551/338/27 -f 4542/328/27 4553/329/27 4552/339/27 -f 4486/258/17 4507/341/17 4510/340/17 -f 4510/340/17 4482/256/17 4486/258/17 -f 4482/279/151 4510/279/151 4509/282/151 -f 4509/282/151 4505/282/151 4482/279/151 -f 4505/301/23 4509/343/23 4508/342/23 -f 4508/342/23 4512/305/23 4505/301/23 -f 4512/284/198 4508/284/198 4507/283/198 -f 4507/283/198 4486/283/198 4512/284/198 -f 4490/264/15 4513/345/15 4516/344/15 -f 4516/344/15 4488/263/15 4490/264/15 -f 4488/285/7 4516/285/7 4515/285/7 -f 4515/285/7 4511/285/7 4488/285/7 -f 4511/307/21 4515/347/21 4514/346/21 -f 4514/346/21 4518/309/21 4511/307/21 -f 4518/287/197 4514/287/197 4513/286/197 -f 4513/286/197 4490/286/197 4518/287/197 -f 4494/268/13 4519/349/13 4522/348/13 -f 4522/348/13 4492/266/13 4494/268/13 -f 4492/288/163 4522/288/163 4521/289/163 -f 4521/289/163 4517/289/163 4492/288/163 -f 4517/311/19 4521/351/19 4520/350/19 -f 4520/350/19 4524/313/19 4517/311/19 -f 4524/291/10 4520/291/10 4519/290/10 -f 4519/290/10 4494/290/10 4524/291/10 -f 4498/272/23 4525/353/23 4528/352/23 -f 4528/352/23 4496/270/23 4498/272/23 -f 4496/292/153 4528/292/153 4527/293/153 -f 4527/293/153 4523/293/153 4496/292/153 -f 4523/315/17 4527/355/17 4526/354/17 -f 4526/354/17 4530/317/17 4523/315/17 -f 4530/295/196 4526/295/196 4525/294/196 -f 4525/294/196 4498/294/196 4530/295/196 -f 4502/276/21 4531/357/21 4534/356/178 -f 4534/356/178 4500/274/21 4502/276/21 -f 4500/296/1 4534/296/1 4533/297/1 -f 4533/297/1 4529/297/1 4500/296/1 -f 4529/322/15 4533/359/15 4532/358/15 -f 4532/358/15 4536/321/118 4529/322/15 -f 4536/299/195 4532/299/195 4531/298/195 -f 4531/298/195 4502/298/195 4536/299/195 -f 4483/255/19 4537/361/19 4540/360/19 -f 4540/360/19 4504/278/190 4483/255/19 -f 4504/300/161 4540/300/161 4539/300/161 -f 4539/300/161 4535/300/161 4504/300/161 -f 4535/325/192 4539/363/192 4538/362/13 -f 4538/362/13 4506/302/13 4535/325/192 -f 4506/281/4 4538/281/4 4537/280/4 -f 4537/280/4 4483/280/4 4506/281/4 -# 7168 faces - diff --git a/examples/web/models/resources/models/castle_diffuse.png b/examples/web/models/resources/models/castle_diffuse.png Binary files differdeleted file mode 100644 index c7085a3..0000000 --- a/examples/web/models/resources/models/castle_diffuse.png +++ /dev/null diff --git a/examples/web/models/resources/models/cube.obj b/examples/web/models/resources/models/cube.obj deleted file mode 100644 index bf7e3be..0000000 --- a/examples/web/models/resources/models/cube.obj +++ /dev/null @@ -1,68 +0,0 @@ -# reference material -#mtllib cube.mtl - -# object box - -# vertex (XZY) -v 5.5 0 1.5 -v 8.5 0 1.5 -v 5.5 0 -1.5 -v 8.5 0 -1.5 -v 5.5 3 1.5 -v 8.5 3 1.5 -v 5.5 3 -1.5 -v 8.5 3 -1.5 - -# normals (XYZ) -vn 0 -1 0 -vn 0 1 0 -vn 0 0 1 -vn 1 0 0 -vn 0 0 -1 -vn -1 0 0 - -# UVs (XY) -vt 0.5 0 0 -vt 1 0 0 -vt 1 0.5 0 -vt 0.5 0.5 0 -vt 0.5 0.5 0 -vt 1 0.5 0 -vt 0.5 1 0 -vt 1 1 0 -vt 0 0.5 0 -vt 1 0.5 0 -vt 1 0 0 -vt 0 0 0 -vt 0 0.5 0 -vt 1 0.5 0 -vt 1 1 0 -vt 0 1 0 -vt 0.5 0 0 -vt 0 0 0 -vt 0 0.5 0 -vt 0.5 0.5 0 -vt 0 0.5 0 -vt 0.5 0.5 0 -vt 0.5 1 0 -vt 0 1 0 - -# merger -g box - -# reference material -#usemtl mat01 - -# faces -f 1/9/1 3/10/1 4/11/1 -f 4/11/1 2/12/1 1/9/1 -f 5/13/2 6/14/2 8/15/2 -f 8/15/2 7/16/2 5/13/2 -f 1/17/6 2/18/6 6/19/6 -f 6/19/6 5/20/6 1/17/6 -f 2/6/1 4/5/1 8/7/1 -f 8/7/1 6/8/1 2/6/1 -f 4/2/3 3/1/3 7/4/3 -f 7/4/3 8/3/3 4/2/3 -f 3/22/5 1/21/5 5/24/5 -f 5/24/5 7/23/5 3/22/5 diff --git a/examples/web/models/resources/models/cube_diffuse.png b/examples/web/models/resources/models/cube_diffuse.png Binary files differdeleted file mode 100644 index 6becd47..0000000 --- a/examples/web/models/resources/models/cube_diffuse.png +++ /dev/null diff --git a/examples/web/models/resources/models/house.obj b/examples/web/models/resources/models/house.obj deleted file mode 100644 index 67d2c88..0000000 --- a/examples/web/models/resources/models/house.obj +++ /dev/null @@ -1,4564 +0,0 @@ -# (c) 2018 Medieval Assets Pack by Alberto Cano -# Licensed as Creative Commons Attribution-NonCommercial 4.0 - -# -# object house -# - -v -6.3138 8.7250 -0.7017 -v -7.4057 8.9558 -0.7017 -v -7.3659 9.1439 -0.7017 -v -6.2741 8.9132 -0.7017 -v -7.2840 9.5316 -0.1884 -v -6.1921 9.3008 -0.1884 -v -6.2319 9.1127 -0.1884 -v -6.1895 9.3135 -0.0777 -v -7.2813 9.5443 -0.0777 -v -6.2292 9.1254 -0.0777 -v -6.3138 8.7250 0.5464 -v -6.2741 8.9132 0.5464 -v -7.3659 9.1439 0.5464 -v -7.4057 8.9558 0.5464 -v -6.1921 9.3008 0.0331 -v -7.2840 9.5316 0.0331 -v -6.2319 9.1127 0.0331 -v -5.1675 8.5556 -0.7017 -v -6.2794 8.6512 -0.7017 -v -6.2629 8.8428 -0.7017 -v -5.1510 8.7472 -0.7017 -v -6.2290 9.2375 -0.1884 -v -5.1171 9.1420 -0.1884 -v -5.1335 8.9504 -0.1884 -v -5.1160 9.1549 -0.0777 -v -6.2279 9.2504 -0.0777 -v -5.1324 8.9633 -0.0777 -v -5.1675 8.5556 0.5464 -v -5.1510 8.7472 0.5464 -v -6.2629 8.8428 0.5464 -v -6.2794 8.6512 0.5464 -v -5.1171 9.1420 0.0331 -v -6.2290 9.2375 0.0331 -v -5.1335 8.9504 0.0331 -v -3.1858 8.2183 -0.7017 -v -4.3011 8.2559 -0.7017 -v -4.2946 8.4481 -0.7017 -v -3.1793 8.4104 -0.7017 -v -4.2813 8.8441 -0.1884 -v -3.1659 8.8064 -0.1884 -v -3.1724 8.6143 -0.1884 -v -3.1655 8.8194 -0.0777 -v -4.2808 8.8570 -0.0777 -v -3.1720 8.6272 -0.0777 -v -3.1858 8.2183 0.5464 -v -3.1793 8.4104 0.5464 -v -4.2946 8.4481 0.5464 -v -4.3011 8.2559 0.5464 -v -3.1659 8.8064 0.0331 -v -4.2813 8.8441 0.0331 -v -3.1724 8.6143 0.0331 -v -4.2172 8.3089 -0.7017 -v -5.3250 8.4436 -0.7017 -v -5.3018 8.6344 -0.7017 -v -4.1940 8.4997 -0.7017 -v -5.2540 9.0278 -0.1884 -v -4.1462 8.8931 -0.1884 -v -4.1694 8.7022 -0.1884 -v -4.1446 8.9059 -0.0777 -v -5.2524 9.0406 -0.0777 -v -4.1678 8.7150 -0.0777 -v -4.2172 8.3089 0.5464 -v -4.1940 8.4997 0.5464 -v -5.3018 8.6344 0.5464 -v -5.3250 8.4436 0.5464 -v -4.1462 8.8931 0.0331 -v -5.2540 9.0278 0.0331 -v -4.1694 8.7022 0.0331 -v 6.7499 10.4845 -0.7017 -v 6.7434 10.6766 -0.7017 -v 7.8588 10.7143 -0.7017 -v 7.8653 10.5221 -0.7017 -v 7.8454 11.1103 -0.1884 -v 6.7301 11.0726 -0.1884 -v 6.7366 10.8805 -0.1884 -v 6.7296 11.0856 -0.0777 -v 7.8450 11.1232 -0.0777 -v 6.7361 10.8934 -0.0777 -v 6.7499 10.4845 0.5464 -v 7.8653 10.5221 0.5464 -v 7.8588 10.7143 0.5464 -v 6.7434 10.6766 0.5464 -v 7.8454 11.1103 0.0331 -v 6.7301 11.0726 0.0331 -v 6.7366 10.8805 0.0331 -v 5.8327 10.2129 -0.7017 -v 5.7996 10.4023 -0.7017 -v 6.8989 10.5944 -0.7017 -v 6.9320 10.4050 -0.7017 -v 6.8307 10.9847 -0.1884 -v 5.7314 10.7926 -0.1884 -v 5.7645 10.6032 -0.1884 -v 5.7291 10.8054 -0.0777 -v 6.8284 10.9974 -0.0777 -v 5.7622 10.6159 -0.0777 -v 5.8327 10.2129 0.5464 -v 6.9320 10.4050 0.5464 -v 6.8989 10.5944 0.5464 -v 5.7996 10.4023 0.5464 -v 6.8307 10.9847 0.0331 -v 5.7314 10.7926 0.0331 -v 5.7645 10.6032 0.0331 -v 4.8462 10.0032 -0.7017 -v 4.8230 10.1940 -0.7017 -v 5.9308 10.3287 -0.7017 -v 5.9540 10.1379 -0.7017 -v 5.8830 10.7221 -0.1884 -v 4.7752 10.5874 -0.1884 -v 4.7984 10.3965 -0.1884 -v 4.7736 10.6002 -0.0777 -v 5.8814 10.7349 -0.0777 -v 4.7968 10.4094 -0.0777 -v 4.8462 10.0032 0.5464 -v 5.9540 10.1379 0.5464 -v 5.9308 10.3287 0.5464 -v 4.8230 10.1940 0.5464 -v 5.8830 10.7221 0.0331 -v 4.7752 10.5874 0.0331 -v 4.7984 10.3965 0.0331 -v 3.8496 9.8167 -0.7017 -v 3.8264 10.0075 -0.7017 -v 4.9342 10.1423 -0.7017 -v 4.9574 9.9514 -0.7017 -v 4.8864 10.5356 -0.1884 -v 3.7786 10.4009 -0.1884 -v 3.8018 10.2100 -0.1884 -v 3.7770 10.4137 -0.0777 -v 4.8848 10.5484 -0.0777 -v 3.8002 10.2229 -0.0777 -v 3.8496 9.8167 0.5464 -v 4.9574 9.9514 0.5464 -v 4.9342 10.1423 0.5464 -v 3.8264 10.0076 0.5464 -v 4.8864 10.5356 0.0331 -v 3.7786 10.4009 0.0331 -v 3.8018 10.2100 0.0331 -v 2.9090 9.7161 -0.7017 -v 2.9025 9.9083 -0.7017 -v 4.0178 9.9460 -0.7017 -v 4.0243 9.7538 -0.7017 -v 4.0044 10.3420 -0.1884 -v 2.8891 10.3043 -0.1884 -v 2.8956 10.1121 -0.1884 -v 2.8887 10.3173 -0.0777 -v 4.0040 10.3549 -0.0777 -v 2.8952 10.1251 -0.0777 -v 2.9090 9.7161 0.5464 -v 4.0243 9.7538 0.5464 -v 4.0178 9.9460 0.5464 -v 2.9025 9.9083 0.5464 -v 4.0044 10.3420 0.0331 -v 2.8891 10.3043 0.0331 -v 2.8956 10.1121 0.0331 -v 1.9911 9.6053 -0.7017 -v 1.9808 9.7973 -0.7017 -v 3.0952 9.8570 -0.7017 -v 3.1055 9.6650 -0.7017 -v 3.0740 10.2527 -0.1884 -v 1.9596 10.1930 -0.1884 -v 1.9699 10.0010 -0.1884 -v 1.9589 10.2059 -0.0777 -v 3.0733 10.2656 -0.0777 -v 1.9692 10.0139 -0.0777 -v 1.9911 9.6053 0.5464 -v 3.1055 9.6650 0.5464 -v 3.0952 9.8570 0.5464 -v 1.9808 9.7973 0.5464 -v 3.0740 10.2527 0.0331 -v 1.9596 10.1930 0.0331 -v 1.9699 10.0010 0.0331 -v -3.0236 10.4055 -0.7017 -v -4.1154 10.6363 -0.7017 -v -4.0757 10.8244 -0.7017 -v -2.9838 10.5936 -0.7017 -v -3.9937 11.2121 -0.1884 -v -2.9019 10.9813 -0.1884 -v -2.9417 10.7932 -0.1884 -v -2.8992 10.9940 -0.0777 -v -3.9911 11.2247 -0.0777 -v -2.9390 10.8059 -0.0777 -v -3.0236 10.4055 0.5464 -v -2.9838 10.5937 0.5464 -v -4.0757 10.8244 0.5464 -v -4.1154 10.6363 0.5464 -v -2.9019 10.9813 0.0331 -v -3.9937 11.2121 0.0331 -v -2.9417 10.7932 0.0331 -v -1.8772 10.2361 -0.7017 -v -2.9891 10.3316 -0.7017 -v -2.9726 10.5232 -0.7017 -v -1.8608 10.4277 -0.7017 -v -2.9387 10.9180 -0.1884 -v -1.8268 10.8225 -0.1884 -v -1.8433 10.6309 -0.1884 -v -1.8257 10.8354 -0.0777 -v -2.9376 10.9309 -0.0777 -v -1.8422 10.6438 -0.0777 -v -1.8772 10.2361 0.5464 -v -1.8608 10.4277 0.5464 -v -2.9726 10.5232 0.5464 -v -2.9891 10.3316 0.5464 -v -1.8268 10.8225 0.0331 -v -2.9387 10.9180 0.0331 -v -1.8433 10.6309 0.0331 -v -0.9270 9.9893 -0.7017 -v -2.0348 10.1241 -0.7017 -v -2.0116 10.3149 -0.7017 -v -0.9038 10.1802 -0.7017 -v -1.9637 10.7083 -0.1884 -v -0.8559 10.5736 -0.1884 -v -0.8791 10.3827 -0.1884 -v -0.8544 10.5864 -0.0777 -v -1.9622 10.7211 -0.0777 -v -0.8776 10.3955 -0.0777 -v -0.9270 9.9893 0.5464 -v -0.9038 10.1802 0.5464 -v -2.0116 10.3149 0.5464 -v -2.0348 10.1241 0.5464 -v -0.8559 10.5736 0.0331 -v -1.9637 10.7083 0.0331 -v -0.8791 10.3827 0.0331 -v 0.1045 9.8987 -0.7017 -v -1.0109 9.9364 -0.7017 -v -1.0044 10.1286 -0.7017 -v 0.1109 10.0909 -0.7017 -v -0.9910 10.5246 -0.1884 -v 0.1243 10.4869 -0.1884 -v 0.1178 10.2947 -0.1884 -v 0.1248 10.4999 -0.0777 -v -0.9906 10.5375 -0.0777 -v 0.1183 10.3077 -0.0777 -v 0.1045 9.8987 0.5464 -v 0.1109 10.0909 0.5464 -v -1.0044 10.1286 0.5464 -v -1.0109 9.9364 0.5464 -v 0.1243 10.4869 0.0331 -v -0.9910 10.5246 0.0331 -v 0.1178 10.2947 0.0331 -v 1.1663 9.7500 -0.7017 -v 0.0510 9.7876 -0.7017 -v 0.0575 9.9798 -0.7017 -v 1.1728 9.9421 -0.7017 -v 0.0708 10.3758 -0.1884 -v 1.1862 10.3381 -0.1884 -v 1.1797 10.1460 -0.1884 -v 1.1866 10.3511 -0.0777 -v 0.0713 10.3887 -0.0777 -v 1.1801 10.1589 -0.0777 -v 1.1663 9.7500 0.5464 -v 1.1728 9.9422 0.5464 -v 0.0575 9.9798 0.5464 -v 0.0510 9.7876 0.5464 -v 1.1862 10.3381 0.0331 -v 0.0708 10.3758 0.0331 -v 1.1797 10.1460 0.0331 -v 2.0591 9.7227 -0.7017 -v 0.9513 9.5879 -0.7017 -v 0.9281 9.7788 -0.7017 -v 2.0359 9.9135 -0.7017 -v 0.8803 10.1721 -0.1884 -v 1.9881 10.3069 -0.1884 -v 2.0113 10.1160 -0.1884 -v 1.9865 10.3197 -0.0777 -v 0.8787 10.1850 -0.0777 -v 2.0097 10.1289 -0.0777 -v 2.0591 9.7227 0.5464 -v 2.0359 9.9135 0.5464 -v 0.9281 9.7788 0.5464 -v 0.9513 9.5879 0.5464 -v 1.9881 10.3069 0.0331 -v 0.8803 10.1721 0.0331 -v 2.0113 10.1160 0.0331 -v 0.9445 11.6574 4.7943 -v 0.9445 11.7921 5.9021 -v 0.9445 11.9830 5.8789 -v 0.9445 11.8483 4.7711 -v 1.4578 12.3763 5.8310 -v 1.4578 12.2416 4.7232 -v 1.4578 12.0508 4.7465 -v 1.5686 12.2545 4.7217 -v 1.5686 12.3892 5.8295 -v 1.5686 12.0636 4.7449 -v 2.1926 11.6574 4.7943 -v 2.1926 11.8483 4.7711 -v 2.1926 11.9830 5.8789 -v 2.1926 11.7921 5.9021 -v 1.6793 12.2416 4.7232 -v 1.6793 12.3763 5.8310 -v 1.6793 12.0508 4.7465 -v 0.9445 11.4668 3.7151 -v 0.9445 11.5624 4.8270 -v 0.9445 11.7540 4.8105 -v 0.9445 11.6584 3.6987 -v 1.4578 12.1487 4.7766 -v 1.4578 12.0532 3.6647 -v 1.4578 11.8616 3.6812 -v 1.5686 12.0661 3.6636 -v 1.5686 12.1616 4.7755 -v 1.5686 11.8745 3.6801 -v 2.1926 11.4668 3.7151 -v 2.1926 11.6584 3.6987 -v 2.1926 11.7540 4.8105 -v 2.1926 11.5624 4.8270 -v 1.6793 12.0532 3.6647 -v 1.6793 12.1487 4.7766 -v 1.6793 11.8616 3.6812 -v 0.9445 11.2863 3.3077 -v 0.9445 11.3239 4.4230 -v 0.9445 11.5161 4.4165 -v 0.9445 11.4784 3.3012 -v 1.4578 11.9121 4.4032 -v 1.4578 11.8745 3.2879 -v 1.4578 11.6823 3.2943 -v 1.5686 11.8874 3.2874 -v 1.5686 11.9250 4.4027 -v 1.5686 11.6952 3.2939 -v 2.1926 11.2863 3.3077 -v 2.1926 11.4784 3.3012 -v 2.1926 11.5161 4.4165 -v 2.1926 11.3239 4.4230 -v 1.6793 11.8745 3.2879 -v 1.6793 11.9121 4.4032 -v 1.6793 11.6823 3.2943 -v 2.1926 11.3823 3.3259 -v 2.1926 11.5170 2.2181 -v 2.1926 11.7079 2.2413 -v 2.1926 11.5732 3.3492 -v 1.6793 12.1012 2.2892 -v 1.6793 11.9665 3.3970 -v 1.6793 11.7757 3.3738 -v 1.5686 11.9794 3.3985 -v 1.5686 12.1141 2.2907 -v 1.5686 11.7885 3.3753 -v 0.9445 11.3823 3.3259 -v 0.9445 11.5732 3.3492 -v 0.9445 11.7079 2.2413 -v 0.9445 11.5170 2.2181 -v 1.4578 11.9665 3.3970 -v 1.4578 12.1012 2.2892 -v 1.4578 11.7757 3.3738 -v 2.1926 11.5582 2.4201 -v 2.1926 11.6929 1.3123 -v 2.1926 11.8838 1.3355 -v 2.1926 11.7491 2.4433 -v 1.6793 12.2771 1.3833 -v 1.6793 12.1424 2.4911 -v 1.6793 11.9516 2.4679 -v 1.5686 12.1553 2.4927 -v 1.5686 12.2900 1.3849 -v 1.5686 11.9644 2.4695 -v 0.9445 11.5582 2.4201 -v 0.9445 11.7491 2.4433 -v 0.9445 11.8838 1.3355 -v 0.9445 11.6929 1.3123 -v 1.4578 12.1424 2.4911 -v 1.4578 12.2771 1.3833 -v 1.4578 11.9516 2.4679 -v 2.1926 11.7610 1.6115 -v 2.1926 11.8957 0.5037 -v 2.1926 12.0866 0.5269 -v 2.1926 11.9519 1.6347 -v 1.6793 12.4799 0.5747 -v 1.6793 12.3452 1.6826 -v 1.6793 12.1543 1.6593 -v 1.5686 12.3580 1.6841 -v 1.5686 12.4928 0.5763 -v 1.5686 12.1672 1.6609 -v 0.9445 11.7610 1.6115 -v 0.9445 11.9519 1.6347 -v 0.9445 12.0866 0.5269 -v 0.9445 11.8957 0.5037 -v 1.4578 12.3452 1.6826 -v 1.4578 12.4799 0.5747 -v 1.4578 12.1543 1.6593 -v -1.1371 7.4582 -4.0955 -v -4.2338 7.4582 -4.3121 -v -4.2273 7.6317 -4.5957 -v -1.1338 7.6317 -4.3617 -v -3.2516 7.7677 3.5028 -v -4.2338 7.4582 4.2507 -v -4.6406 11.0258 -0.0777 -v -3.2516 10.6900 -0.0777 -v -3.2516 7.7677 -3.8461 -v -0.6460 7.7677 -3.6582 -v -4.6406 11.2779 -0.0777 -v -1.3405 10.5888 -0.0777 -v -1.1371 7.4582 3.9402 -v 1.9596 7.4582 3.9402 -v 1.9596 7.6317 4.2064 -v -1.1338 7.6317 4.2064 -v -0.6460 7.7677 3.5028 -v 1.9596 7.7677 3.5028 -v 1.9596 10.0791 -0.0777 -v 1.9596 7.4582 -4.0955 -v 1.9596 7.6317 -4.3617 -v 1.9596 7.7677 -3.6582 -v -4.2273 7.6317 4.5343 -v 8.1465 7.6317 -4.5957 -v 8.1530 7.4582 -4.3121 -v 5.0563 7.4582 -4.0955 -v 5.0531 7.6317 -4.3617 -v 7.1709 7.7677 3.5028 -v 7.1709 10.6900 -0.0777 -v 8.5599 11.0258 -0.0777 -v 8.1530 7.4582 4.2507 -v 7.1709 7.7677 -3.8461 -v 4.5652 7.7677 -3.6582 -v 5.2597 10.5888 -0.0777 -v 8.5599 11.2779 -0.0777 -v 5.0563 7.4582 3.9402 -v 5.0531 7.6317 4.2064 -v 4.5652 7.7677 3.5028 -v 8.1465 7.6317 4.5343 -v -4.6567 6.8869 -2.9522 -v -7.7534 6.8869 -3.1079 -v -7.7469 7.0605 -3.3117 -v -4.6535 7.0605 -3.1435 -v -6.7712 7.1965 2.5090 -v -7.7534 6.8869 3.0465 -v -8.1602 9.3059 -0.0645 -v -6.7712 8.9701 -0.0645 -v -6.7712 7.1965 -2.7729 -v -4.1656 7.1965 -2.6379 -v -8.1602 9.5581 -0.0645 -v -4.8601 8.8689 -0.0645 -v -4.6567 6.8869 2.8233 -v -3.2516 6.8869 2.8233 -v -3.2516 7.0605 3.0146 -v -4.6535 7.0605 3.0146 -v -4.1656 7.1965 2.5090 -v -3.2516 7.1965 2.5090 -v -3.2516 8.5897 -0.0645 -v -3.2516 6.8869 -2.9522 -v -3.2516 7.0605 -3.1435 -v -3.2516 7.1965 -2.6379 -v -7.7469 7.0605 3.2504 -v -6.7232 3.1632 -3.0057 -v -7.2373 3.1632 -3.0057 -v -7.2146 4.8291 -2.9829 -v -6.8069 4.8291 -2.9829 -v -6.7232 3.1632 -2.4581 -v -6.8069 4.8291 -2.5099 -v -7.2373 3.1632 -2.4581 -v -7.2146 4.8291 -2.5099 -v -6.6744 6.9707 -3.0545 -v -7.2862 6.9707 -3.0545 -v -6.6744 7.4227 -2.4093 -v -7.2862 7.4227 -2.4093 -v -7.1861 2.8938 -0.0777 -v -3.1845 2.8938 -0.0777 -v -3.1845 2.8938 2.8036 -v -7.1861 2.8938 2.8036 -v -3.1845 7.0912 2.8036 -v -7.1861 7.0912 2.8036 -v -3.1845 2.8938 -2.9589 -v -7.1861 2.8938 -2.9589 -v -7.1861 7.0912 -2.9589 -v -3.1845 7.0912 -2.9589 -v -7.1861 9.1993 -0.0777 -v -7.1931 5.9506 -0.5142 -v -7.1931 4.9600 -0.5142 -v -7.1931 4.9340 -0.0777 -v -7.1931 6.2676 -0.0777 -v -7.1671 4.9838 -0.8556 -v -7.1671 4.8411 -0.8556 -v -7.2673 4.8411 -0.8556 -v -7.2673 4.9838 -0.8556 -v -7.1671 6.5014 -0.0777 -v -7.1671 6.0404 -0.7429 -v -7.2673 6.0404 -0.7429 -v -7.2673 6.5014 -0.0777 -v -7.1671 4.8411 0.7003 -v -7.1671 4.9838 0.7003 -v -7.2673 4.9838 0.7003 -v -7.2673 4.8411 0.7003 -v -7.1671 4.7914 -0.0777 -v -7.1671 4.8411 0.5875 -v -7.2673 4.8411 0.5875 -v -7.2673 4.7914 -0.0777 -v -7.3772 4.8411 -0.7429 -v -7.3772 4.9600 -0.5142 -v -7.3772 4.9838 -0.7429 -v -7.2673 5.9506 -0.5142 -v -7.2673 6.2676 -0.0777 -v -7.3772 4.9838 0.5875 -v -7.3772 4.9692 0.3589 -v -7.3772 4.8411 0.5875 -v -7.3772 4.7914 -0.0777 -v -7.3772 4.9340 -0.0777 -v -7.1931 5.9506 0.3589 -v -7.1931 4.9692 0.3589 -v -7.1671 6.0404 0.5875 -v -7.2673 6.0404 0.5875 -v -7.1671 4.8411 -0.7429 -v -7.2673 4.8411 -0.7429 -v -7.2673 5.9506 0.3589 -v -7.2673 4.9600 -0.5142 -v -7.2673 4.9692 0.3589 -v -7.2673 4.9340 -0.0777 -v -7.2673 4.9838 0.5875 -v -7.1671 4.9838 0.5875 -v -7.1671 4.9838 -0.7429 -v -7.2673 4.9838 -0.7429 -v -7.3772 4.8411 -0.8556 -v -7.3772 4.9838 -0.8556 -v -7.3772 4.9838 0.7003 -v -7.3772 4.8411 0.7003 -v -7.4310 3.2178 2.3310 -v -7.4310 2.7084 2.3310 -v -7.4310 2.7084 2.8790 -v -7.4310 3.2178 2.8790 -v -2.7750 2.7084 2.8790 -v -5.1030 2.5335 2.8790 -v -5.1030 2.5335 2.3310 -v -2.7750 2.7084 2.3310 -v -2.7750 3.2178 2.8790 -v -5.1030 3.0429 2.8790 -v -2.7750 3.2178 2.3310 -v -5.1030 3.0429 2.3310 -v -7.4310 3.2178 -2.4864 -v -7.4310 3.2178 -3.0343 -v -7.4310 2.7084 -3.0343 -v -7.4310 2.7084 -2.4864 -v -2.7750 2.7084 -3.0343 -v -2.7750 2.7084 -2.4864 -v -5.1030 2.5335 -2.4864 -v -5.1030 2.5335 -3.0343 -v -2.7750 3.2178 -3.0343 -v -5.1030 3.0429 -3.0343 -v -2.7750 3.2178 -2.4864 -v -5.1030 3.0429 -2.4864 -v -6.8803 -0.0302 2.7568 -v -6.8202 0.4686 2.6769 -v -6.8202 0.4686 1.9103 -v -6.8803 -0.0302 1.8305 -v -6.1832 -0.0302 2.7568 -v -6.2433 0.4686 2.6769 -v -6.1832 -0.0302 1.8305 -v -6.2433 0.4686 1.9103 -v -6.7553 3.1304 2.0287 -v -6.6814 1.5987 2.0734 -v -6.6814 1.5987 2.5139 -v -6.7553 3.1304 2.5586 -v -6.3096 1.5987 2.5139 -v -6.3082 3.1304 2.5586 -v -6.3096 1.5987 2.0734 -v -6.3082 3.1304 2.0287 -v -6.7553 0.5951 2.5586 -v -6.7553 0.5951 2.0287 -v -6.7995 0.5454 1.9480 -v -6.7995 0.5454 2.6393 -v -6.3082 0.5951 2.0287 -v -6.2639 0.5454 1.9480 -v -6.3082 0.5951 2.5586 -v -6.2639 0.5454 2.6393 -v -6.8803 -0.0302 -1.9648 -v -6.8202 0.4686 -2.0447 -v -6.8202 0.4686 -2.8113 -v -6.8803 -0.0302 -2.8911 -v -6.1832 -0.0302 -1.9648 -v -6.2433 0.4686 -2.0447 -v -6.1832 -0.0302 -2.8911 -v -6.2433 0.4686 -2.8113 -v -6.7553 3.1304 -2.6929 -v -6.6814 1.5987 -2.6482 -v -6.6814 1.5987 -2.2077 -v -6.7553 3.1304 -2.1631 -v -6.3096 1.5987 -2.2077 -v -6.3082 3.1304 -2.1631 -v -6.3096 1.5987 -2.6482 -v -6.3082 3.1304 -2.6929 -v -6.7553 0.5951 -2.1631 -v -6.7553 0.5951 -2.6929 -v -6.7995 0.5454 -2.7737 -v -6.7995 0.5454 -2.0823 -v -6.3082 0.5951 -2.6929 -v -6.2639 0.5454 -2.7737 -v -6.3082 0.5951 -2.1631 -v -6.2639 0.5454 -2.0823 -v -3.2516 2.9096 3.5028 -v 7.1709 2.9096 3.5028 -v 7.1709 7.9373 3.5028 -v -3.2516 7.9373 3.5028 -v 7.1709 2.9096 -0.0777 -v 7.1709 10.8036 -0.0777 -v 7.1709 2.9096 -3.6582 -v -3.2516 2.9096 -3.6582 -v -3.2516 7.9373 -3.6582 -v 7.1709 7.9373 -3.6582 -v -3.2516 2.9096 -0.0777 -v -3.2516 10.8036 -0.0777 -v -2.8467 2.9096 3.2440 -v 6.7660 2.9096 3.2440 -v -2.8467 2.9096 -0.0777 -v -2.8467 2.9096 -3.3994 -v 6.7660 2.9096 -3.3994 -v 6.7660 2.9096 -0.0777 -v -2.8468 -0.0302 3.2440 -v 6.7660 -0.0302 3.2440 -v -2.8468 -0.0302 -0.0777 -v -2.8468 -0.0302 -3.3994 -v 6.7660 -0.0302 -3.3994 -v 6.7660 -0.0302 -0.0777 -v 7.0102 3.0089 -4.2256 -v 7.5581 3.0089 -4.2256 -v 7.5581 2.4996 -4.2256 -v 7.0102 2.4996 -4.2256 -v 7.0102 3.0089 4.1317 -v 7.0102 2.4996 4.1317 -v 7.5581 2.4996 4.1317 -v 7.5581 3.0089 4.1317 -v -3.7439 3.0089 3.3027 -v -3.7439 2.4996 3.3027 -v -3.7439 2.4996 3.8506 -v -3.7439 3.0089 3.8506 -v 7.7366 3.0089 3.3027 -v 7.7366 3.0089 3.8506 -v 7.7366 2.4996 3.8506 -v 7.7366 2.4996 3.3027 -v -3.7439 3.0089 -3.4580 -v -3.7439 3.0089 -4.0060 -v -3.7439 2.4996 -4.0060 -v -3.7439 2.4996 -3.4580 -v 7.7366 3.0089 -3.4580 -v 7.7366 2.4996 -3.4580 -v 7.7366 2.4996 -4.0060 -v 7.7366 3.0089 -4.0060 -v -2.5135 6.6183 -3.5180 -v -2.5135 5.7934 -6.4571 -v 0.6090 5.7934 -6.4571 -v 0.6090 6.6183 -3.5180 -v -2.5135 6.8326 -3.5754 -v 0.6090 6.8326 -3.5754 -v 0.6090 6.0078 -6.5145 -v -2.5135 6.0078 -6.5145 -v 0.3848 3.3060 -6.2601 -v -2.4169 3.3060 -6.2601 -v -2.4169 3.3060 -3.5850 -v 0.3848 3.3060 -3.5850 -v 0.3848 2.8320 -3.5850 -v 0.3848 2.8320 -6.2601 -v -2.4169 2.8320 -6.2601 -v -2.4169 2.8320 -3.5850 -v -2.9596 2.9096 -4.0064 -v -3.5423 2.9096 -4.0064 -v -3.2948 5.6756 -3.7907 -v -2.8870 5.6756 -3.7907 -v -2.9596 2.9096 -3.3856 -v -2.8870 5.6756 -3.3177 -v -3.5423 2.9096 -3.3856 -v -3.2948 5.6756 -3.3177 -v -2.9450 7.9058 -4.0186 -v -3.5568 7.9058 -4.0186 -v -2.9450 8.2459 -3.3733 -v -3.5568 8.2459 -3.3733 -v -2.9596 2.9096 3.8510 -v -2.8870 5.6756 3.6354 -v -3.2948 5.6756 3.6354 -v -3.5423 2.9096 3.8510 -v -2.9596 2.9096 3.2303 -v -2.8870 5.6756 3.1623 -v -3.5423 2.9096 3.2303 -v -3.2948 5.6756 3.1623 -v -2.9450 7.9058 3.8633 -v -3.5568 7.9058 3.8633 -v -2.9450 8.2459 3.2180 -v -3.5568 8.2459 3.2180 -v -1.8648 5.8242 -3.6286 -v -0.5551 5.8242 -3.6286 -v -0.5551 5.8242 -3.9835 -v -1.8648 5.8242 -3.9835 -v -0.5551 3.3060 -3.6286 -v -0.5551 3.3060 -3.9835 -v -0.7855 3.3060 -3.8323 -v -1.6344 3.3060 -3.8323 -v -1.6344 5.4437 -3.8323 -v -0.7855 5.4437 -3.8323 -v -1.8648 3.3060 -3.9835 -v -1.8648 3.3060 -3.6286 -v -1.6344 5.4437 -3.9835 -v -1.6344 3.3060 -3.9835 -v -0.7855 5.4437 -3.9835 -v -0.7855 3.3060 -3.9835 -v 0.3607 2.7805 -6.2096 -v 1.9873 1.2273 -6.1877 -v 1.9873 1.2273 -5.9635 -v 0.3607 2.7805 -5.9635 -v 2.3459 1.5102 -5.9635 -v 2.3459 1.5102 -6.2096 -v 0.3607 3.3463 -6.2096 -v 0.3607 3.3463 -5.9635 -v 3.2877 -0.0134 -6.2096 -v 4.0129 -0.0134 -6.2096 -v 3.2877 -0.0134 -5.9635 -v 4.0129 -0.0134 -5.9635 -v -2.3337 -0.0302 -5.9479 -v -2.0764 -0.0302 -5.9479 -v -2.0324 2.9450 -5.7109 -v -2.2898 2.9450 -5.7109 -v -2.3337 -0.0302 -6.2053 -v -2.2898 2.9450 -5.9682 -v -2.0764 -0.0302 -6.2053 -v -2.0324 2.9450 -5.9682 -v -2.3337 5.9816 -5.9479 -v -2.0764 5.9816 -5.9479 -v -2.3337 5.9816 -6.2053 -v -2.0764 5.9816 -6.2053 -v -0.0074 -0.0302 -5.9479 -v 0.2500 -0.0302 -5.9479 -v 0.2939 2.9450 -5.7109 -v 0.0366 2.9450 -5.7109 -v -0.0074 -0.0302 -6.2053 -v 0.0366 2.9450 -5.9682 -v 0.2500 -0.0302 -6.2053 -v 0.2939 2.9450 -5.9682 -v -0.0074 5.9816 -5.9479 -v 0.2500 5.9816 -5.9479 -v -0.0074 5.9816 -6.2053 -v 0.2500 5.9816 -6.2053 -v -2.6217 0.0000 -3.7376 -v -3.2044 0.0000 -3.7376 -v -2.9569 1.0456 -3.5220 -v -2.5492 1.0456 -3.5220 -v -2.6217 0.0000 -3.1169 -v -2.5492 1.0456 -3.0489 -v -3.2044 0.0000 -3.1169 -v -2.9569 1.0456 -3.0489 -v -2.6072 2.9699 -3.7499 -v -3.2190 2.9699 -3.7499 -v -2.6072 3.0985 -3.1046 -v -3.2190 3.0985 -3.1046 -v 4.8927 5.3687 -5.8348 -v 4.8927 5.2326 -5.8348 -v 4.8927 5.2326 -5.9129 -v 4.8927 5.3687 -5.9129 -v 4.8927 5.0965 -5.8348 -v 4.8927 5.0965 -5.9129 -v 4.8927 4.9605 -5.8348 -v 4.8927 4.9605 -5.9129 -v 4.8927 4.7832 -5.8348 -v 4.8927 4.8244 -5.9129 -v 4.8927 5.3687 -5.9909 -v 4.8927 5.2540 -5.9909 -v 4.8927 5.2754 -6.0690 -v 4.8927 5.3687 -6.0690 -v 4.8927 5.1730 -5.9909 -v 4.8927 5.1792 -6.0690 -v 4.8927 5.3687 -6.2250 -v 4.8927 5.3687 -6.1470 -v 4.8927 5.2540 -6.1470 -v 4.8927 5.2326 -6.2250 -v 4.8927 5.1730 -6.1470 -v 4.8927 5.0965 -6.2250 -v 4.8927 5.3687 -6.3030 -v 4.8927 5.2326 -6.3030 -v 4.8927 5.2326 -6.3811 -v 4.8927 5.3687 -6.3811 -v 4.8927 5.0965 -6.3030 -v 4.8927 5.0965 -6.3811 -v 4.8927 4.9605 -6.3030 -v 4.8927 4.9605 -6.3811 -v 4.8927 4.7832 -6.3030 -v 4.8927 4.8244 -6.3811 -v 4.8927 5.3687 -5.7568 -v 4.8927 5.2326 -5.7568 -v 4.8927 5.0965 -5.7568 -v 4.8927 4.9605 -5.7568 -v 4.8927 4.8244 -5.7568 -v 4.8927 4.9605 -6.2250 -v 4.8927 4.8244 -6.2250 -v 4.8927 5.4217 -6.8979 -v 4.8927 4.9763 -6.8979 -v 4.8927 4.9763 -7.1386 -v 4.8927 5.4217 -7.1386 -v 4.8927 4.5310 -6.8979 -v 4.8927 4.5310 -7.1386 -v 4.8927 4.0856 -6.8979 -v 4.8927 4.0856 -7.1386 -v 4.8927 3.6402 -6.8979 -v 4.8927 3.7482 -7.1386 -v 4.8927 4.9763 -7.3794 -v 4.8927 5.4217 -7.3794 -v 4.8927 4.5310 -7.3794 -v 4.8927 4.0856 -7.3794 -v 4.8927 3.8020 -7.3794 -v 4.8927 4.9763 -7.6201 -v 4.8927 5.4217 -7.6201 -v 4.8927 4.5310 -7.6201 -v 4.8927 4.0856 -7.6201 -v 4.8927 3.7482 -7.6201 -v 4.8927 4.9763 -7.8609 -v 4.8927 5.4217 -7.8609 -v 4.8927 4.5310 -7.8609 -v 4.8927 4.0856 -7.8609 -v 4.8927 3.6402 -7.8609 -v 4.8983 5.4267 -4.2675 -v 4.8983 5.3567 -6.1034 -v 4.9561 5.3919 -6.1034 -v 4.9561 5.4619 -4.2675 -v 4.8983 5.4971 -4.2675 -v 4.8983 5.4271 -6.1034 -v 4.8983 5.4971 -7.9394 -v 4.9561 5.4619 -7.9394 -v 4.8983 5.4267 -7.9394 -v 5.2716 4.9661 -3.7293 -v 3.3567 4.9661 -3.7293 -v 3.3567 6.2120 -3.7293 -v 5.2716 6.2120 -3.7293 -v 5.4434 4.8376 -3.8169 -v 3.2170 4.8376 -3.8169 -v 3.3567 4.9661 -3.8169 -v 5.2716 4.9661 -3.8169 -v 3.2170 6.3098 -3.8169 -v 3.3567 6.2120 -3.8169 -v 5.4434 6.3098 -3.8169 -v 5.2716 6.2120 -3.8169 -v 3.2170 4.8376 -3.5927 -v 5.4434 4.8376 -3.5927 -v 3.2170 6.3098 -3.5927 -v 5.4434 6.3098 -3.5927 -v 3.1685 4.7720 -3.6639 -v 3.6230 4.7720 -4.9127 -v 3.7254 4.7720 -4.8755 -v 3.2708 4.7720 -3.6267 -v 3.1685 6.3098 -3.6639 -v 3.2708 6.3098 -3.6267 -v 3.7254 6.3098 -4.8755 -v 3.6230 6.3098 -4.9127 -v 5.3873 4.7720 -3.6267 -v 4.9328 4.7720 -4.8755 -v 5.0351 4.7720 -4.9127 -v 5.4897 4.7720 -3.6639 -v 5.3873 6.3098 -3.6267 -v 5.4897 6.3098 -3.6639 -v 5.0351 6.3098 -4.9127 -v 4.9328 6.3098 -4.8755 -v 6.8788 2.9096 -4.0064 -v 6.8063 5.6756 -3.7907 -v 7.2140 5.6756 -3.7907 -v 7.4615 2.9096 -4.0064 -v 6.8788 2.9096 -3.3856 -v 6.8063 5.6756 -3.3177 -v 7.4615 2.9096 -3.3856 -v 7.2140 5.6756 -3.3177 -v 6.8642 7.9058 -4.0186 -v 7.4761 7.9058 -4.0186 -v 6.8642 8.2459 -3.3734 -v 7.4761 8.2459 -3.3734 -v 6.8788 2.9096 3.8510 -v 7.4615 2.9096 3.8510 -v 7.2140 5.6756 3.6354 -v 6.8063 5.6756 3.6354 -v 6.8788 2.9096 3.2303 -v 6.8063 5.6756 3.1623 -v 7.4615 2.9096 3.2303 -v 7.2140 5.6756 3.1623 -v 6.8642 7.9058 3.8633 -v 7.4761 7.9058 3.8633 -v 6.8642 8.2459 3.2180 -v 7.4761 8.2459 3.2180 -v -1.0499 7.1920 0.8801 -v 1.5686 7.1920 0.8801 -v 1.5686 7.1920 5.9052 -v -1.0499 7.1920 5.9052 -v 1.5686 12.3427 5.9052 -v -1.0499 10.1678 5.9052 -v 4.1870 7.1920 5.9052 -v 4.1870 7.1920 0.8801 -v 4.1870 10.1678 0.8801 -v 4.1870 10.1678 5.9052 -v 1.5686 12.3427 0.8801 -v -1.0499 10.1678 0.8801 -v 1.0847 11.4972 -1.1541 -v 1.0847 12.4648 -1.1541 -v 2.0524 12.4648 -1.1541 -v 2.0524 11.4972 -1.1541 -v 1.2329 10.9471 0.9987 -v 1.2329 11.5276 0.9987 -v 1.9042 11.5276 0.9987 -v 1.9042 10.9471 0.9987 -v 1.5686 12.6046 6.6574 -v 1.5686 11.7979 3.3926 -v -1.5299 9.9268 3.3926 -v -1.6653 9.9268 6.6574 -v 4.8024 9.9268 6.6574 -v 4.6670 9.9268 3.3926 -v -1.6653 9.6585 6.6574 -v 1.5686 12.3363 6.6574 -v 4.8024 9.6585 6.6574 -v 4.6670 9.6585 3.3926 -v 4.8024 9.6585 0.1279 -v 1.5686 12.3363 0.1279 -v 1.5686 12.6046 0.1279 -v 4.8024 9.9268 0.1279 -v -1.6653 9.6585 0.1279 -v -1.6653 9.9268 0.1279 -v -1.5299 9.6585 3.3926 -v 1.5686 11.5296 3.3926 -v 0.9445 11.9887 1.1864 -v 0.9445 12.1807 1.1967 -v 0.9445 12.2404 0.0823 -v 0.9445 12.0484 0.0720 -v 1.4578 12.4440 0.0932 -v 1.4578 12.6360 0.1035 -v 1.4578 12.5763 1.2179 -v 1.4578 12.3843 1.2076 -v 1.5686 12.6490 0.1042 -v 1.5686 12.4569 0.0939 -v 1.5686 12.5893 1.2186 -v 1.5686 12.3972 1.2083 -v 2.1926 11.9887 1.1864 -v 2.1926 12.0484 0.0720 -v 2.1926 12.2404 0.0823 -v 2.1926 12.1807 1.1967 -v 1.6793 12.4440 0.0932 -v 1.6793 12.6360 0.1035 -v 1.6793 12.5763 1.2179 -v 1.6793 12.3843 1.2076 -v 0.9445 12.0392 6.7986 -v 0.9445 12.2301 6.7754 -v 0.9445 12.0954 5.6676 -v 0.9445 11.9045 5.6908 -v 1.4578 12.2978 5.6430 -v 1.4578 12.4887 5.6198 -v 1.4578 12.6234 6.7276 -v 1.4578 12.4325 6.7508 -v 1.5686 12.5016 5.6182 -v 1.5686 12.3107 5.6414 -v 1.5686 12.6363 6.7260 -v 1.5686 12.4454 6.7492 -v 2.1926 12.0392 6.7986 -v 2.1926 11.9045 5.6908 -v 2.1926 12.0954 5.6676 -v 2.1926 12.2301 6.7754 -v 1.6793 12.2978 5.6430 -v 1.6793 12.4887 5.6198 -v 1.6793 12.6234 6.7276 -v 1.6793 12.4325 6.7508 -v -4.7348 10.7447 -0.7017 -v -4.7116 10.9356 -0.7017 -v -3.6038 10.8009 -0.7017 -v -3.6270 10.6100 -0.7017 -v -3.5792 11.0033 -0.1884 -v -3.5560 11.1942 -0.1884 -v -4.6638 11.3289 -0.1884 -v -4.6870 11.1380 -0.1884 -v -3.5544 11.2071 -0.0777 -v -3.5776 11.0162 -0.0777 -v -4.6622 11.3418 -0.0777 -v -4.6854 11.1509 -0.0777 -v -4.7348 10.7447 0.5464 -v -3.6270 10.6100 0.5464 -v -3.6038 10.8009 0.5464 -v -4.7116 10.9356 0.5464 -v -3.5792 11.0033 0.0331 -v -3.5560 11.1942 0.0331 -v -4.6638 11.3289 0.0331 -v -4.6870 11.1380 0.0331 -v -4.7348 10.7185 -0.7017 -v -4.7116 10.9094 -0.7017 -v -3.6038 10.7747 -0.7017 -v -3.6270 10.5838 -0.7017 -v -3.5792 10.9772 -0.1884 -v -3.5560 11.1680 -0.1884 -v -4.6638 11.3028 -0.1884 -v -4.6870 11.1119 -0.1884 -v -3.5544 11.1809 -0.0777 -v -3.5776 10.9900 -0.0777 -v -4.6622 11.3156 -0.0777 -v -4.6854 11.1247 -0.0777 -v -4.7348 10.7185 0.5464 -v -3.6270 10.5838 0.5464 -v -3.6038 10.7747 0.5464 -v -4.7116 10.9094 0.5464 -v -3.5792 10.9772 0.0331 -v -3.5560 11.1680 0.0331 -v -4.6638 11.3028 0.0331 -v -4.6870 11.1119 0.0331 -v -5.3701 9.6711 0.4061 -v -5.3701 10.6387 0.4061 -v -5.3701 10.6387 -0.5615 -v -5.3701 9.6711 -0.5615 -v -3.2173 9.1210 0.2580 -v -3.2173 9.7015 0.2580 -v -3.2173 9.7015 -0.4133 -v -3.2173 9.1210 -0.4133 -v -8.2811 9.1402 -0.7017 -v -8.2579 9.3310 -0.7017 -v -7.1501 9.1963 -0.7017 -v -7.1733 9.0054 -0.7017 -v -7.1255 9.3988 -0.1884 -v -7.1023 9.5897 -0.1884 -v -8.2101 9.7244 -0.1884 -v -8.2333 9.5335 -0.1884 -v -7.1007 9.6025 -0.0777 -v -7.1239 9.4116 -0.0777 -v -8.2085 9.7372 -0.0777 -v -8.2317 9.5463 -0.0777 -v -8.2811 9.1402 0.5464 -v -7.1733 9.0054 0.5464 -v -7.1501 9.1963 0.5464 -v -8.2579 9.3310 0.5464 -v -7.1255 9.3988 0.0331 -v -7.1023 9.5897 0.0331 -v -8.2101 9.7244 0.0331 -v -8.2333 9.5335 0.0331 -v -9.2893 8.2216 0.4061 -v -9.2893 9.1892 0.4061 -v -9.2893 9.1892 -0.5615 -v -9.2893 8.2216 -0.5615 -v -7.1365 7.6714 0.2580 -v -7.1365 8.2520 0.2580 -v -7.1365 8.2520 -0.4133 -v -7.1365 7.6714 -0.4133 -v 8.6541 10.7185 -0.7017 -v 7.5463 10.5838 -0.7017 -v 7.5230 10.7747 -0.7017 -v 8.6309 10.9094 -0.7017 -v 7.4984 10.9772 -0.1884 -v 7.4752 11.1680 -0.1884 -v 8.5830 11.3028 -0.1884 -v 8.6062 11.1119 -0.1884 -v 7.4969 10.9900 -0.0777 -v 7.4736 11.1809 -0.0777 -v 8.5814 11.3156 -0.0777 -v 8.6047 11.1247 -0.0777 -v 8.6541 10.7185 0.5464 -v 8.6308 10.9094 0.5464 -v 7.5230 10.7747 0.5464 -v 7.5463 10.5838 0.5464 -v 7.4752 11.1680 0.0331 -v 7.4984 10.9772 0.0331 -v 8.5830 11.3028 0.0331 -v 8.6062 11.1119 0.0331 -v 1.0847 11.4972 7.9394 -v 2.0524 11.4972 7.9394 -v 2.0524 12.4648 7.9394 -v 1.0847 12.4648 7.9394 -v 1.2329 10.9471 5.7866 -v 1.2329 11.5276 5.7866 -v 1.9042 11.5276 5.7866 -v 1.9042 10.9471 5.7866 -v 4.7414 7.7419 5.5111 -v 4.7414 7.7419 6.0591 -v 4.7414 7.2325 6.0591 -v 4.7414 7.2325 5.5111 -v -1.6043 7.7419 5.5111 -v -1.6043 7.2325 5.5111 -v -1.6043 7.2325 6.0591 -v -1.6043 7.7419 6.0591 -v 1.5686 7.1097 6.0591 -v 1.5686 7.1097 5.5111 -v 1.5686 7.6191 6.0591 -v 1.5686 7.6191 5.5111 -v -1.2469 7.6233 5.5056 -v -1.2469 7.6233 6.0196 -v -1.2309 8.9468 5.9403 -v -1.2309 8.9468 5.5326 -v -0.6993 7.6233 5.5056 -v -0.7579 8.9468 5.5326 -v -0.6993 7.6233 6.0196 -v -0.7579 8.9468 5.9403 -v -1.2958 10.1392 5.4567 -v -1.2958 10.1392 6.0685 -v -0.6505 10.5249 5.4567 -v -0.6505 10.5249 6.0685 -v -0.6744 7.6552 6.1897 -v -1.2224 7.6552 6.1897 -v -1.2224 7.1458 6.1897 -v -0.6744 7.1458 6.1897 -v -0.6744 7.0906 4.5742 -v -1.2224 7.0906 4.5742 -v -1.2224 7.2524 3.0420 -v -0.6744 7.2524 3.0420 -v -1.2224 7.6000 4.5742 -v -1.2224 7.7618 3.0420 -v -0.6744 7.6000 4.5742 -v -0.6744 7.7618 3.0420 -v -0.1324 5.2606 3.5028 -v -0.1877 6.0816 4.8319 -v -0.7894 6.0816 4.8319 -v -0.8447 5.2606 3.5028 -v -0.1324 6.0605 3.5028 -v -0.1877 6.3358 4.2867 -v -0.8447 6.0605 3.5028 -v -0.7894 6.3358 4.2867 -v -0.1324 7.1920 5.8631 -v -0.8447 7.1920 5.8631 -v -0.1324 7.1920 5.1509 -v -0.8447 7.1920 5.1509 -v -2.6217 0.0000 3.5823 -v -2.5492 1.0456 3.3666 -v -2.9569 1.0456 3.3666 -v -3.2044 0.0000 3.5823 -v -2.6217 0.0000 2.9615 -v -2.5492 1.0456 2.8936 -v -3.2044 0.0000 2.9615 -v -2.9569 1.0456 2.8936 -v -2.6072 2.9699 3.5946 -v -3.2190 2.9699 3.5946 -v -2.6072 3.0985 2.9493 -v -3.2190 3.0985 2.9493 -v -6.7232 3.1632 2.8503 -v -6.8069 4.8291 2.8276 -v -7.2146 4.8291 2.8276 -v -7.2373 3.1632 2.8503 -v -6.7232 3.1632 2.3028 -v -6.8069 4.8291 2.3546 -v -7.2373 3.1632 2.3028 -v -7.2146 4.8291 2.3546 -v -6.6744 6.9707 2.8992 -v -7.2862 6.9707 2.8992 -v -6.6744 7.4227 2.2539 -v -7.2862 7.4227 2.2539 -v -6.7182 3.2178 3.0952 -v -7.2662 3.2178 3.0952 -v -7.2662 2.7084 3.0952 -v -6.7182 2.7084 3.0952 -v -6.7182 3.2178 -3.2505 -v -6.7182 2.7084 -3.2505 -v -7.2662 2.7084 -3.2505 -v -7.2662 3.2178 -3.2505 -v -7.2662 2.5856 -0.0777 -v -6.7182 2.5856 -0.0777 -v -7.2662 3.0950 -0.0777 -v -6.7182 3.0950 -0.0777 -v 3.2696 5.2606 3.5028 -v 3.9818 5.2606 3.5028 -v 3.9265 6.0816 4.8319 -v 3.3249 6.0816 4.8319 -v 3.2696 6.0605 3.5028 -v 3.3249 6.3358 4.2867 -v 3.9818 6.0605 3.5028 -v 3.9265 6.3358 4.2867 -v 3.2696 7.1920 5.8631 -v 3.9818 7.1920 5.8631 -v 3.2696 7.1920 5.1509 -v 3.9818 7.1920 5.1509 -v 2.0051 9.8771 5.9061 -v 1.5686 10.1940 5.9061 -v 1.5686 8.8605 5.9061 -v 2.0051 8.8864 5.9061 -v 2.3465 8.9102 5.8801 -v 2.3465 8.9102 5.9803 -v 2.3465 8.7676 5.9803 -v 2.3465 8.7676 5.8801 -v 1.5686 10.4279 5.8801 -v 1.5686 10.4279 5.9803 -v 2.2338 9.9669 5.9803 -v 2.2338 9.9669 5.8801 -v 0.7906 8.7676 5.8801 -v 0.7906 8.7676 5.9803 -v 0.7906 8.9102 5.9803 -v 0.7906 8.9102 5.8801 -v 1.5686 8.7179 5.8801 -v 1.5686 8.7179 5.9803 -v 0.9033 8.7676 5.9803 -v 0.9033 8.7676 5.8801 -v 2.2338 8.7676 6.0902 -v 2.2338 8.9102 6.0902 -v 2.0051 8.8864 6.0902 -v 1.5686 10.1940 5.9803 -v 2.0051 9.8771 5.9803 -v 0.9033 8.9102 6.0902 -v 0.9033 8.7676 6.0902 -v 1.1320 8.8957 6.0902 -v 1.5686 8.7179 6.0902 -v 1.5686 8.8605 6.0902 -v 1.1320 9.8771 5.9061 -v 1.1320 8.8957 5.9061 -v 0.9033 9.9669 5.8801 -v 0.9033 9.9669 5.9803 -v 2.2338 8.7676 5.8801 -v 2.2338 8.7676 5.9803 -v 1.1320 9.8771 5.9803 -v 2.0051 8.8864 5.9803 -v 1.1320 8.8957 5.9803 -v 1.5686 8.8605 5.9803 -v 0.9033 8.9102 5.9803 -v 0.9033 8.9102 5.8801 -v 2.2338 8.9102 5.9803 -v 2.2338 8.9102 5.8801 -v 2.3465 8.9102 6.0902 -v 2.3465 8.7676 6.0902 -v 0.7906 8.7676 6.0902 -v 0.7906 8.9102 6.0902 -v 7.1954 5.9506 -0.5142 -v 7.1954 6.2676 -0.0777 -v 7.1954 4.9340 -0.0777 -v 7.1954 4.9600 -0.5142 -v 7.1694 4.9838 -0.8556 -v 7.2696 4.9838 -0.8556 -v 7.2696 4.8411 -0.8556 -v 7.1694 4.8411 -0.8556 -v 7.1694 6.5014 -0.0777 -v 7.2696 6.5014 -0.0777 -v 7.2696 6.0404 -0.7429 -v 7.1694 6.0404 -0.7429 -v 7.1694 4.8411 0.7003 -v 7.2696 4.8411 0.7003 -v 7.2696 4.9838 0.7003 -v 7.1694 4.9838 0.7003 -v 7.1694 4.7914 -0.0777 -v 7.2696 4.7914 -0.0777 -v 7.2696 4.8411 0.5875 -v 7.1694 4.8411 0.5875 -v 7.3796 4.8411 -0.7429 -v 7.3796 4.9838 -0.7429 -v 7.3796 4.9600 -0.5142 -v 7.2696 6.2676 -0.0777 -v 7.2696 5.9506 -0.5142 -v 7.3796 4.9838 0.5875 -v 7.3796 4.8411 0.5875 -v 7.3796 4.9692 0.3589 -v 7.3796 4.7914 -0.0777 -v 7.3796 4.9340 -0.0777 -v 7.1954 5.9506 0.3589 -v 7.1954 4.9692 0.3589 -v 7.1694 6.0404 0.5875 -v 7.2696 6.0404 0.5875 -v 7.1694 4.8411 -0.7429 -v 7.2696 4.8411 -0.7429 -v 7.2696 5.9506 0.3589 -v 7.2696 4.9600 -0.5142 -v 7.2696 4.9692 0.3589 -v 7.2696 4.9340 -0.0777 -v 7.2696 4.9838 0.5875 -v 7.1694 4.9838 0.5875 -v 7.2696 4.9838 -0.7429 -v 7.1694 4.9838 -0.7429 -v 7.3796 4.9838 -0.8556 -v 7.3796 4.8411 -0.8556 -v 7.3796 4.8411 0.7003 -v 7.3796 4.9838 0.7003 -v 6.4902 0.0000 3.5823 -v 7.0730 0.0000 3.5823 -v 6.8254 1.0456 3.3666 -v 6.4177 1.0456 3.3666 -v 6.4902 0.0000 2.9615 -v 6.4177 1.0456 2.8936 -v 7.0730 0.0000 2.9615 -v 6.8254 1.0456 2.8936 -v 6.4757 2.9699 3.5946 -v 7.0875 2.9699 3.5946 -v 6.4757 3.0985 2.9493 -v 7.0875 3.0985 2.9493 -v 6.4902 0.0000 -3.7376 -v 6.4177 1.0456 -3.5220 -v 6.8254 1.0456 -3.5220 -v 7.0730 0.0000 -3.7376 -v 6.4902 0.0000 -3.1169 -v 6.4177 1.0456 -3.0489 -v 7.0730 0.0000 -3.1169 -v 6.8254 1.0456 -3.0489 -v 6.4757 2.9699 -3.7499 -v 7.0875 2.9699 -3.7499 -v 6.4757 3.0985 -3.1046 -v 7.0875 3.0985 -3.1046 -v 9.2893 9.6711 0.4061 -v 9.2893 9.6711 -0.5615 -v 9.2893 10.6387 -0.5615 -v 9.2893 10.6387 0.4061 -v 7.1365 9.1210 0.2580 -v 7.1365 9.7015 0.2580 -v 7.1365 9.7015 -0.4133 -v 7.1365 9.1210 -0.4133 -v 2.3881 0.8227 -4.2558 -v 3.0109 0.8227 -4.2558 -v 3.0109 0.8227 -5.9635 -v 2.3881 0.8227 -5.9635 -v 3.0109 0.7221 -4.2558 -v 3.0109 0.7221 -5.9635 -v 2.7807 0.4301 -4.2558 -v 3.4035 0.4301 -4.2558 -v 3.4035 0.4301 -5.9635 -v 2.7807 0.4301 -5.9635 -v 3.4035 0.3295 -4.2558 -v 3.4035 0.3295 -5.9635 -v 3.2028 0.2090 -4.2558 -v 3.8256 0.2090 -4.2558 -v 3.8256 0.2090 -5.9635 -v 3.2028 0.2090 -5.9635 -v 3.8256 0.1084 -4.2558 -v 3.8256 0.1084 -5.9635 -v 0.3607 2.7805 -4.2760 -v 1.9873 1.2273 -4.2541 -v 1.9873 1.2273 -4.0299 -v 0.3607 2.7805 -4.0299 -v 2.3459 1.5102 -4.0299 -v 2.3459 1.5102 -4.2760 -v 0.3607 3.3463 -4.2760 -v 0.3607 3.3463 -4.0299 -v 3.2877 -0.0134 -4.2760 -v 4.0129 -0.0134 -4.2760 -v 3.2877 -0.0134 -4.0299 -v 4.0129 -0.0134 -4.0299 -v 1.2101 2.0007 -4.2558 -v 1.8329 2.0007 -4.2558 -v 1.8329 2.0007 -5.9635 -v 1.2101 2.0007 -5.9635 -v 1.8329 1.9001 -4.2558 -v 1.8329 1.9001 -5.9635 -v 1.9954 1.2154 -4.2558 -v 2.6182 1.2154 -4.2558 -v 2.6182 1.2154 -5.9635 -v 1.9954 1.2154 -5.9635 -v 2.6182 1.1148 -4.2558 -v 2.6182 1.1148 -5.9635 -v 1.6028 1.6080 -4.2558 -v 2.2256 1.6080 -4.2558 -v 2.2256 1.6080 -5.9635 -v 1.6028 1.6080 -5.9635 -v 2.2256 1.5074 -4.2558 -v 2.2256 1.5074 -5.9635 -v 0.8175 2.3933 -4.2558 -v 1.4403 2.3933 -4.2558 -v 1.4403 2.3933 -5.9635 -v 0.8175 2.3933 -5.9635 -v 1.4403 2.2927 -4.2558 -v 1.4403 2.2927 -5.9635 -v 0.4248 2.7860 -4.2558 -v 1.0476 2.7860 -4.2558 -v 1.0476 2.7860 -5.9635 -v 0.4248 2.7860 -5.9635 -v 1.0476 2.6854 -4.2558 -v 1.0476 2.6854 -5.9635 -v 4.3804 4.9359 -3.7128 -v 4.3804 4.9359 -3.8100 -v 4.3804 6.2446 -3.8100 -v 4.3804 6.2446 -3.7128 -v 4.2479 4.9359 -3.8100 -v 4.2479 6.2446 -3.8100 -v 4.2479 4.9359 -3.7128 -v 4.2479 6.2446 -3.7128 -v 4.3840 7.5263 5.5056 -v 4.3681 8.8497 5.5326 -v 4.3681 8.8497 5.9403 -v 4.3840 7.5263 6.0196 -v 3.8365 7.5263 5.5056 -v 3.8950 8.8497 5.5326 -v 3.8365 7.5263 6.0196 -v 3.8950 8.8497 5.9403 -v 4.4329 10.0421 5.4567 -v 4.4329 10.0421 6.0685 -v 3.7876 10.4278 5.4567 -v 3.7876 10.4278 6.0685 -v 3.8116 7.6552 6.1897 -v 3.8116 7.1458 6.1897 -v 4.3595 7.1458 6.1897 -v 4.3595 7.6552 6.1897 -v 3.8116 7.0906 4.5742 -v 3.8116 7.2524 3.0420 -v 4.3595 7.2524 3.0420 -v 4.3595 7.0906 4.5742 -v 4.3595 7.7618 3.0420 -v 4.3595 7.6000 4.5742 -v 3.8116 7.7618 3.0420 -v 3.8116 7.6000 4.5742 -v -1.4771 5.0898 -6.4637 -v -1.9428 5.1372 -6.7076 -v -2.0334 5.8873 -6.3814 -v -1.4996 5.8873 -6.3814 -v -0.9691 5.1030 -6.5948 -v -0.9657 5.8873 -6.3814 -v -0.4435 5.1002 -6.5399 -v -0.4319 5.8873 -6.3814 -v 0.0759 5.0635 -6.4447 -v 0.1019 5.8873 -6.3814 -v -1.4413 4.3211 -6.5007 -v -1.7739 4.4052 -6.9063 -v -0.9920 4.3538 -6.7854 -v -0.5263 4.3417 -6.5267 -v -0.0178 4.2732 -6.3949 -v -1.3879 3.5934 -6.5914 -v -1.5246 3.7366 -7.0874 -v -0.9385 3.6267 -6.8777 -v -0.4313 3.6518 -6.7088 -v -0.2051 3.5484 -6.2310 -v -1.2861 2.9368 -6.7930 -v -1.7756 3.1551 -6.8101 -v -0.7710 2.9815 -6.6713 -v -0.3018 3.0074 -6.9315 -v 0.1094 3.0048 -6.5830 -# 1383 vertices - -vn 0.0000 0.0000 -1.0000 -vn 0.4638 0.6957 -0.5486 -vn 0.4636 0.6954 -0.5490 -vn 0.4638 0.6957 -0.5485 -vn 0.9977 -0.0673 -0.0000 -vn 0.5491 0.8298 -0.0992 -vn 0.9977 -0.0673 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 0.4638 0.6957 0.5485 -vn 0.4637 0.6955 0.5489 -vn 0.4638 0.6957 0.5486 -vn 0.4637 0.6956 0.5488 -vn 0.5491 0.8298 0.0992 -vn 0.5492 0.8298 0.0991 -vn 0.2072 0.7740 -0.5984 -vn 0.2072 0.7738 -0.5986 -vn 0.2072 0.7741 -0.5981 -vn 0.9997 -0.0244 -0.0000 -vn 0.9995 -0.0305 -0.0000 -vn 0.2596 0.9591 -0.1127 -vn 0.2596 0.9591 -0.1126 -vn 0.2568 0.9599 -0.1127 -vn 0.2568 0.9599 -0.1128 -vn 0.9997 -0.0244 0.0000 -vn 0.9995 -0.0305 0.0000 -vn 0.2072 0.7740 0.5984 -vn 0.2596 0.9591 0.1126 -vn 0.2568 0.9599 0.1128 -vn 0.2568 0.9599 0.1127 -vn 0.2596 0.9591 0.1127 -vn 0.0825 0.7882 -0.6099 -vn 0.0855 0.7881 -0.6096 -vn 0.0855 0.7882 -0.6095 -vn 0.9999 -0.0122 -0.0000 -vn 0.1037 0.9879 -0.1155 -vn 0.1037 0.9879 -0.1153 -vn 0.1037 0.9879 -0.1154 -vn 0.0855 0.7880 0.6097 -vn 0.0855 0.7881 0.6096 -vn 0.0825 0.7882 0.6098 -vn 0.1037 0.9879 0.1155 -vn 0.1037 0.9879 0.1154 -vn 0.2867 0.7565 -0.5878 -vn 0.2896 0.7561 -0.5869 -vn 0.2868 0.7568 -0.5874 -vn 0.9993 -0.0367 -0.0000 -vn 0.3544 0.9287 -0.1096 -vn 0.9993 -0.0367 0.0000 -vn 0.2896 0.7559 0.5871 -vn 0.2867 0.7565 0.5878 -vn 0.2868 0.7568 0.5874 -vn 0.3544 0.9287 0.1096 -vn -0.0851 0.7903 -0.6068 -vn -0.0851 0.7905 -0.6065 -vn -0.9999 -0.0122 -0.0000 -vn -0.1037 0.9879 -0.1154 -vn -0.1037 0.9879 -0.1157 -vn -0.1037 0.9879 -0.1155 -vn -0.1037 0.9879 -0.1153 -vn -0.0851 0.7903 0.6068 -vn -0.1037 0.9879 0.1153 -vn -0.1037 0.9879 0.1155 -vn -0.1037 0.9879 0.1156 -vn -0.1037 0.9879 0.1154 -vn -0.3972 0.7211 -0.5676 -vn -0.3974 0.7215 -0.5671 -vn -0.9981 -0.0609 -0.0000 -vn -0.9985 -0.0548 -0.0000 -vn -0.4788 0.8717 -0.1041 -vn -0.4788 0.8717 -0.1043 -vn -0.4788 0.8717 -0.1044 -vn -0.4788 0.8717 -0.1042 -vn -0.3974 0.7215 0.5671 -vn -0.3972 0.7211 0.5676 -vn -0.3972 0.7212 0.5676 -vn -0.9981 -0.0609 0.0000 -vn -0.4788 0.8717 0.1041 -vn -0.4788 0.8717 0.1043 -vn -0.2868 0.7566 -0.5877 -vn -0.2868 0.7568 -0.5874 -vn -0.2895 0.7558 -0.5874 -vn -0.2896 0.7560 -0.5870 -vn -0.9993 -0.0367 -0.0000 -vn -0.3544 0.9287 -0.1095 -vn -0.3544 0.9287 -0.1096 -vn -0.9993 -0.0367 0.0000 -vn -0.2896 0.7559 0.5871 -vn -0.2868 0.7566 0.5877 -vn -0.2896 0.7560 0.5870 -vn -0.3544 0.9287 0.1096 -vn -0.3544 0.9287 0.1095 -vn -0.2896 0.7561 -0.5869 -vn -0.9991 -0.0428 -0.0000 -vn -0.9991 -0.0428 0.0000 -vn -0.0821 0.7905 -0.6069 -vn -0.0825 0.7884 -0.6096 -vn -0.9999 -0.0122 0.0000 -vn -0.0825 0.7882 0.6099 -vn -0.0821 0.7905 0.6069 -vn -0.1316 0.7835 -0.6073 -vn -0.1310 0.7857 -0.6045 -vn -0.1315 0.7830 -0.6079 -vn -0.9998 -0.0183 -0.0000 -vn -0.1668 0.9793 -0.1149 -vn -0.1653 0.9795 -0.1150 -vn -0.1653 0.9795 -0.1152 -vn -0.1643 0.9797 -0.1147 -vn -0.1668 0.9793 -0.1150 -vn -0.1315 0.7830 0.6079 -vn -0.1310 0.7859 0.6043 -vn -0.1316 0.7835 0.6073 -vn -0.1668 0.9793 0.1150 -vn -0.1643 0.9797 0.1146 -vn -0.1653 0.9795 0.1150 -vn -0.1668 0.9793 0.1149 -vn -0.9998 -0.0183 0.0000 -vn 0.4615 0.6968 -0.5491 -vn 0.4637 0.6955 -0.5489 -vn 0.4612 0.6964 -0.5498 -vn 0.9981 -0.0610 -0.0000 -vn 0.9973 -0.0732 -0.0000 -vn 0.5492 0.8298 -0.0991 -vn 0.5491 0.8298 -0.0994 -vn 0.9981 -0.0610 0.0000 -vn 0.4615 0.6968 0.5491 -vn 0.4611 0.6963 0.5501 -vn 0.5491 0.8298 0.0994 -vn 0.2082 0.7714 -0.6013 -vn 0.2082 0.7715 -0.6012 -vn 0.2081 0.7713 -0.6014 -vn 0.2082 0.7717 -0.6010 -vn 0.2567 0.9600 -0.1121 -vn 0.2567 0.9600 -0.1120 -vn 0.2581 0.9596 -0.1120 -vn 0.2082 0.7715 0.6012 -vn 0.2081 0.7714 0.6014 -vn 0.2567 0.9600 0.1120 -vn 0.2581 0.9596 0.1120 -vn 0.2567 0.9600 0.1121 -vn 0.2896 0.7560 -0.5870 -vn 0.2889 0.7562 -0.5871 -vn 0.2874 0.7563 -0.5878 -vn 0.9993 -0.0366 -0.0000 -vn 0.9991 -0.0427 -0.0000 -vn 0.3550 0.9284 -0.1096 -vn 0.9993 -0.0366 0.0000 -vn 0.2869 0.7569 0.5872 -vn 0.2889 0.7562 0.5872 -vn 0.2896 0.7560 0.5870 -vn 0.3550 0.9284 0.1096 -vn 0.0844 0.7904 -0.6067 -vn 0.0844 0.7899 -0.6074 -vn 0.0827 0.7884 -0.6096 -vn 0.0848 0.7882 -0.6095 -vn 0.1051 0.9877 -0.1155 -vn 0.1052 0.9877 -0.1153 -vn 0.1052 0.9877 -0.1155 -vn 0.0827 0.7882 0.6099 -vn 0.0844 0.7899 0.6074 -vn 0.0844 0.7904 0.6067 -vn 0.0848 0.7881 0.6097 -vn 0.1051 0.9877 0.1155 -vn 0.1052 0.9877 0.1155 -vn 0.1052 0.9878 0.1152 -vn 0.0823 0.7905 -0.6069 -vn 0.0821 0.7905 -0.6069 -vn 0.0847 0.7875 -0.6105 -vn 0.1029 0.9879 -0.1157 -vn 0.1050 0.9877 -0.1155 -vn 0.1052 0.9878 -0.1152 -vn 0.0821 0.7905 0.6069 -vn 0.0823 0.7905 0.6069 -vn 0.1050 0.9877 0.1155 -vn 0.1029 0.9880 0.1155 -vn 0.1052 0.9877 0.1153 -vn 0.9999 -0.0122 0.0000 -vn -0.2889 0.7562 -0.5871 -vn -0.2889 0.7563 -0.5870 -vn 0.9993 0.0366 0.0000 -vn 0.9991 0.0427 0.0000 -vn -0.3550 0.9284 -0.1096 -vn -0.3550 0.9284 -0.1095 -vn -0.2889 0.7562 0.5871 -vn -0.2889 0.7561 0.5873 -vn -0.3550 0.9284 0.1095 -vn -0.3550 0.9284 0.1096 -vn -1.0000 0.0000 -0.0000 -vn -0.9244 0.3783 -0.0488 -vn -0.9245 0.3784 -0.0458 -vn 0.0000 -0.1222 -0.9925 -vn -0.3448 0.9318 -0.1134 -vn -0.3462 0.9313 -0.1133 -vn -0.3461 0.9310 -0.1164 -vn -0.3447 0.9315 -0.1164 -vn 1.0000 0.0000 -0.0000 -vn 0.9245 0.3784 -0.0458 -vn 0.9244 0.3783 -0.0488 -vn 0.3462 0.9313 -0.1133 -vn 0.3461 0.9310 -0.1164 -vn -0.9250 0.3785 -0.0336 -vn 0.0000 -0.0856 -0.9963 -vn -0.3434 0.9359 -0.0790 -vn -0.3433 0.9356 -0.0820 -vn -0.3420 0.9364 -0.0790 -vn 0.9250 0.3785 -0.0336 -vn 0.3434 0.9359 -0.0790 -vn 0.3433 0.9356 -0.0820 -vn -0.9254 0.3787 -0.0122 -vn 0.0000 -0.0367 -0.9993 -vn 0.0000 -0.0366 -0.9993 -vn -0.3429 0.9389 -0.0305 -vn -0.3456 0.9379 -0.0305 -vn -0.3443 0.9384 -0.0305 -vn 0.9254 0.3787 -0.0122 -vn 0.3443 0.9384 -0.0305 -vn 0.3456 0.9379 -0.0305 -vn 0.9245 0.3784 0.0458 -vn 0.0000 -0.1222 0.9925 -vn 0.3462 0.9313 0.1133 -vn 0.3448 0.9318 0.1134 -vn 0.3448 0.9316 0.1149 -vn -0.9245 0.3784 0.0458 -vn -0.3462 0.9313 0.1133 -vn -0.3461 0.9311 0.1149 -vn -0.3448 0.9318 0.1134 -vn 0.0000 -0.1220 0.9925 -vn -0.9244 0.3786 0.0458 -vn 0.9245 0.3783 0.0461 -vn 0.3462 0.9313 0.1137 -vn 0.3448 0.9317 0.1142 -vn -0.9245 0.3783 0.0461 -vn -0.3462 0.9313 0.1137 -vn -0.3448 0.9317 0.1142 -vn 0.1113 -0.8478 -0.5185 -vn 0.1128 -0.8477 -0.5184 -vn 0.1284 -0.8312 -0.5409 -vn 0.1276 -0.8313 -0.5410 -vn -0.5831 -0.6350 -0.5068 -vn -0.5830 -0.6349 -0.5069 -vn -0.5055 -0.6699 -0.5437 -vn -0.5053 -0.6697 -0.5442 -vn -0.5051 -0.6694 -0.5447 -vn -0.5049 -0.6691 0.5454 -vn -0.5051 -0.6693 0.5449 -vn -0.5072 -0.6661 0.5469 -vn -0.1315 -0.7827 0.6084 -vn -0.1285 -0.7830 0.6086 -vn -0.1284 -0.7824 0.6095 -vn -0.1342 -0.7809 0.6101 -vn -0.1357 -0.7807 0.6099 -vn -0.1378 -0.7857 0.6030 -vn -0.1356 -0.7860 0.6032 -vn -0.1341 -0.7861 0.6033 -vn 0.4588 0.6974 -0.5506 -vn 0.4585 0.6969 -0.5515 -vn 0.1356 0.8168 -0.5607 -vn 0.1334 0.8170 -0.5609 -vn 0.1341 0.8170 -0.5609 -vn 0.0000 -0.8372 0.5469 -vn 0.0000 -0.8172 -0.5763 -vn 0.0000 0.8673 0.4978 -vn 0.0000 0.8680 0.4965 -vn 0.3717 0.7678 0.5219 -vn 0.3701 0.7677 0.5231 -vn 0.3693 0.7676 0.5239 -vn 0.0000 -0.8372 -0.5469 -vn 0.0000 -0.8172 0.5763 -vn 0.3700 0.7673 -0.5237 -vn 0.3701 0.7677 -0.5231 -vn 0.3717 0.7678 -0.5219 -vn 0.0000 0.8681 -0.4965 -vn 0.0000 0.8673 -0.4978 -vn 0.1682 -0.8258 0.5383 -vn 0.1700 -0.8418 0.5124 -vn 0.1708 -0.8417 0.5123 -vn -0.1354 -0.8945 -0.4260 -vn -0.1339 -0.8947 -0.4261 -vn 0.1830 0.8114 0.5551 -vn 0.1838 0.8113 0.5551 -vn 0.1853 0.8085 0.5585 -vn 0.4591 0.7053 0.5402 -vn 0.4589 0.7051 0.5405 -vn 0.4608 0.7019 0.5432 -vn -0.1158 -0.8474 -0.5182 -vn -0.1128 -0.8477 -0.5184 -vn -0.1284 -0.8312 -0.5409 -vn 0.5072 -0.6661 -0.5469 -vn 0.5054 -0.6698 -0.5441 -vn 0.5056 -0.6700 -0.5435 -vn 0.5809 -0.6359 -0.5081 -vn 0.5811 -0.6361 -0.5077 -vn 0.1284 -0.7824 0.6094 -vn 0.1285 -0.7830 0.6086 -vn 0.5072 -0.6661 0.5469 -vn 0.5051 -0.6694 0.5447 -vn 0.5049 -0.6691 0.5454 -vn 0.1341 -0.7861 0.6033 -vn 0.1371 -0.7858 0.6031 -vn 0.1342 -0.7809 0.6101 -vn -0.4585 0.6969 -0.5515 -vn -0.4587 0.6972 -0.5509 -vn -0.4588 0.6974 -0.5506 -vn -0.1341 0.8170 -0.5609 -vn -0.1341 0.8169 -0.5610 -vn -0.3719 0.7681 0.5212 -vn -0.3715 0.7674 0.5225 -vn -0.3717 0.7678 0.5219 -vn -0.3717 0.7678 -0.5219 -vn -0.3715 0.7674 -0.5225 -vn -0.3713 0.7669 -0.5234 -vn -0.1682 -0.8258 0.5383 -vn -0.1712 -0.8254 0.5380 -vn -0.1708 -0.8417 0.5123 -vn 0.1339 -0.8947 -0.4261 -vn -0.1838 0.8089 0.5585 -vn -0.1860 0.8109 0.5548 -vn -0.1830 0.8114 0.5551 -vn -0.4584 0.7029 0.5439 -vn -0.4568 0.7066 0.5404 -vn -0.4566 0.7062 0.5411 -vn 0.9996 0.0000 -0.0288 -vn 0.9997 -0.0183 -0.0183 -vn 0.9996 0.0000 -0.0291 -vn 0.9996 -0.0000 0.0282 -vn 0.9996 -0.0000 0.0285 -vn 0.9998 -0.0122 0.0183 -vn 0.9998 -0.0122 0.0152 -vn -0.9998 -0.0122 0.0183 -vn -0.9996 -0.0000 0.0285 -vn -0.9996 -0.0000 0.0282 -vn -0.9998 -0.0122 0.0152 -vn -0.9997 -0.0183 -0.0183 -vn -0.9996 0.0000 -0.0288 -vn -0.9996 0.0000 -0.0291 -vn 0.1039 -0.7575 -0.6445 -vn 0.1156 -0.7365 -0.6665 -vn 0.1096 -0.7370 -0.6669 -vn 0.1126 -0.7367 -0.6667 -vn -0.2503 -0.7694 -0.5877 -vn -0.2501 -0.7687 -0.5887 -vn -0.2503 -0.7693 -0.5879 -vn -0.5318 -0.6968 -0.4812 -vn -0.5318 -0.6968 -0.4813 -vn -0.5172 -0.6815 0.5177 -vn -0.5195 -0.6784 0.5195 -vn 0.2383 -0.8127 0.5316 -vn 0.2322 -0.8126 0.5346 -vn 0.2323 -0.8130 0.5338 -vn -0.1162 -0.6727 0.7308 -vn -0.1160 -0.6775 0.7263 -vn -0.1220 -0.6770 0.7258 -vn 0.4650 0.7097 -0.5292 -vn 0.4650 0.7098 -0.5291 -vn 0.4674 0.7088 -0.5283 -vn 0.0854 0.8601 -0.5030 -vn 0.0854 0.8600 -0.5032 -vn 0.0000 -0.7399 0.6727 -vn 0.0000 -0.7132 -0.7010 -vn 0.0000 0.8956 0.4448 -vn 0.0000 0.8960 0.4440 -vn 0.4281 0.7828 0.4516 -vn 0.4280 0.7826 0.4522 -vn 0.4279 0.7825 0.4524 -vn 0.0000 -0.7399 -0.6727 -vn 0.0000 -0.7132 0.7010 -vn 0.4279 0.7825 -0.4524 -vn 0.4280 0.7826 -0.4522 -vn 0.4281 0.7828 -0.4516 -vn 0.0000 0.8960 -0.4440 -vn 0.0000 0.8956 -0.4448 -vn 0.1524 -0.7316 0.6645 -vn 0.1494 -0.7319 0.6648 -vn 0.1528 -0.7516 0.6416 -vn -0.1223 -0.8258 -0.5505 -vn -0.1218 -0.8284 -0.5467 -vn 0.1223 0.8564 0.5016 -vn 0.1187 0.8583 0.4992 -vn 0.1193 0.8566 0.5019 -vn 0.4673 0.7148 0.5203 -vn 0.4648 0.7156 0.5214 -vn 0.4700 0.7141 0.5188 -vn -0.9995 -0.0183 0.0274 -vn -0.9992 -0.0000 0.0395 -vn -0.9992 -0.0000 0.0391 -vn -0.9995 -0.0183 -0.0274 -vn -0.9992 0.0000 -0.0399 -vn -0.9992 0.0000 -0.0404 -vn 0.0000 0.0122 -0.9999 -vn 0.0000 -0.0091 -1.0000 -vn 0.9999 0.0152 0.0000 -vn 0.0000 0.0305 0.9995 -vn -1.0000 0.0030 0.0000 -vn -1.0000 -0.0030 -0.0000 -vn 0.0000 -0.0305 -0.9995 -vn 0.9998 -0.0213 -0.0000 -vn 0.9998 -0.0183 -0.0000 -vn 0.9998 -0.0183 0.0122 -vn 0.9998 -0.0183 0.0107 -vn 0.0000 -0.0366 0.9993 -vn 0.0000 -0.0397 0.9992 -vn -0.9999 -0.0122 0.0061 -vn -1.0000 -0.0061 0.0061 -vn 0.0000 -1.0000 -0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.8224 -0.5689 -vn 0.0000 -0.9972 0.0743 -vn 0.0000 0.8224 0.5689 -vn 0.0000 -0.9973 -0.0740 -vn 0.0000 -0.9972 -0.0747 -vn 0.0000 -0.8101 0.5863 -vn 0.0000 -0.8103 0.5860 -vn 0.0000 -0.8103 -0.5860 -vn 0.0000 -0.8101 -0.5863 -vn 0.0000 0.9968 -0.0804 -vn 0.0000 0.9968 -0.0803 -vn 0.0000 0.9982 0.0594 -vn 0.0000 0.9982 0.0591 -vn 0.0000 0.9946 0.1037 -vn 0.0000 0.9946 0.1034 -vn 0.0000 0.9980 -0.0633 -vn 0.0000 -0.9972 0.0745 -vn 0.0000 -0.9972 -0.0745 -vn 0.2289 -0.9735 -0.0000 -vn -0.2289 0.9735 0.0000 -vn -0.2260 -0.9741 -0.0000 -vn 0.2318 0.9728 0.0000 -vn -0.9993 0.0383 0.0000 -vn -0.9993 0.0385 0.0000 -vn 0.0000 0.1578 0.9875 -vn 0.0000 0.1581 0.9874 -vn 0.0000 0.1580 0.9874 -vn 0.0000 0.1579 0.9875 -vn 0.9993 0.0383 0.0000 -vn 0.9993 0.0385 0.0000 -vn 0.0000 0.1581 -0.9874 -vn 0.0000 0.1583 -0.9874 -vn -0.9999 -0.0152 -0.0000 -vn -1.0000 0.0046 0.0000 -vn 0.0000 -0.0275 0.9996 -vn 0.0000 0.0076 1.0000 -vn 0.0000 -0.0275 -0.9996 -vn 0.0000 0.0076 -1.0000 -vn -0.9622 0.2725 0.0000 -vn -0.9623 0.2722 0.0000 -vn 0.0000 0.8520 -0.5235 -vn 0.0000 0.8512 -0.5248 -vn 0.9623 0.2722 0.0000 -vn 0.9622 0.2725 0.0000 -vn 0.0000 0.8520 0.5235 -vn 0.0000 0.8513 0.5246 -vn -0.9963 0.0856 0.0000 -vn -0.9964 0.0852 0.0000 -vn 0.0000 0.4396 -0.8982 -vn 0.9964 0.0852 0.0000 -vn 0.9963 0.0856 0.0000 -vn 0.0000 0.4405 0.8978 -vn 0.0000 0.4402 0.8979 -vn -0.9997 0.0236 0.0000 -vn 0.0000 0.0446 0.9990 -vn 1.0000 0.0004 0.0000 -vn 0.0000 0.0446 -0.9990 -vn 0.0000 0.1583 0.9874 -vn 0.0000 0.1579 -0.9875 -vn 0.0000 -0.0274 -0.9996 -vn 0.0000 0.8513 -0.5246 -vn 0.0000 0.4402 -0.8979 -vn 0.0000 0.4405 -0.8978 -vn 0.0000 0.4396 0.8982 -vn -0.9997 0.0232 0.0000 -vn 0.0000 0.0447 -0.9990 -vn 0.0000 -0.9633 0.2683 -vn 0.0000 0.9626 -0.2711 -vn 0.0000 0.9633 -0.2683 -vn 0.0000 -0.2569 -0.9664 -vn 0.0000 0.0762 -0.9971 -vn 0.0000 -0.0122 -0.9999 -vn 1.0000 -0.0091 -0.0000 -vn 1.0000 -0.0061 -0.0000 -vn 0.0000 -0.0244 0.9997 -vn -0.9996 0.0274 0.0000 -vn -1.0000 -0.0061 0.0030 -vn -1.0000 -0.0061 -0.0000 -vn 0.0000 -0.1037 -0.9946 -vn 1.0000 0.0061 0.0000 -vn 1.0000 0.0061 -0.0030 -vn 0.0000 0.0244 0.9997 -vn 0.0000 0.0183 0.9998 -vn -0.9994 -0.0306 0.0153 -vn -0.9994 -0.0306 0.0183 -vn 0.0000 0.0762 0.9971 -vn 0.0000 -0.0122 0.9999 -vn 0.0000 -0.0244 -0.9997 -vn -1.0000 -0.0061 -0.0030 -vn 0.0000 -0.1037 0.9946 -vn 1.0000 0.0061 0.0030 -vn 0.0000 0.0244 -0.9997 -vn 0.0000 0.0183 -0.9998 -vn -0.9994 -0.0306 -0.0153 -vn -0.9994 -0.0306 -0.0183 -vn -0.9483 -0.3173 -0.0000 -vn -0.9486 -0.3165 -0.0000 -vn 0.9451 0.3267 0.0000 -vn 0.9452 0.3265 0.0000 -vn -0.0122 -0.0025 -0.9999 -vn -0.1127 -0.0320 -0.9931 -vn -0.0870 -0.0321 -0.9957 -vn 0.9442 0.3295 0.0000 -vn -0.0061 -0.0030 -1.0000 -vn 0.0000 -0.0795 0.9968 -vn -1.0000 0.0047 0.0000 -vn 0.0000 0.0795 -0.9968 -vn 1.0000 -0.0047 -0.0000 -vn 0.0000 0.0795 0.9968 -vn 0.0000 -0.0795 -0.9968 -vn 0.0000 0.2019 -0.9794 -vn 0.0000 0.0458 -0.9989 -vn 0.0000 0.0420 -0.9991 -vn 0.9998 -0.0221 -0.0000 -vn 0.0000 -0.0649 0.9979 -vn 0.0000 -0.0648 0.9979 -vn -0.9972 0.0751 0.0000 -vn -0.9999 0.0152 0.0000 -vn -0.9998 0.0175 0.0000 -vn 0.0000 -0.1161 -0.9932 -vn 1.0000 0.0099 0.0000 -vn 1.0000 0.0091 0.0000 -vn 1.0000 0.0091 -0.0030 -vn 1.0000 0.0092 -0.0031 -vn 0.0000 0.0274 0.9996 -vn -0.9992 -0.0397 0.0061 -vn -0.9992 -0.0397 0.0092 -vn -0.5810 -0.8134 0.0306 -vn -0.5603 -0.8283 -0.0000 -vn 0.9999 0.0122 0.0000 -vn -0.5600 0.8279 -0.0304 -vn -0.5812 0.8137 0.0000 -vn -0.5810 -0.8134 -0.0306 -vn -0.5629 0.8260 0.0306 -vn 0.9932 -0.0000 0.1161 -vn 0.9933 -0.0000 0.1158 -vn 0.7528 0.0000 -0.6583 -vn 0.7514 0.0000 -0.6598 -vn -0.9933 0.0000 -0.1158 -vn -0.9932 0.0000 -0.1161 -vn 0.9933 0.0000 -0.1158 -vn -0.7514 0.0000 -0.6598 -vn -0.9932 -0.0000 0.1161 -vn -0.9933 -0.0000 0.1158 -vn -1.0000 -0.0091 -0.0000 -vn 0.9996 0.0274 0.0000 -vn -1.0000 0.0061 -0.0030 -vn -1.0000 0.0061 0.0000 -vn 0.9994 -0.0305 0.0152 -vn 0.9994 -0.0305 0.0183 -vn -1.0000 0.0061 0.0030 -vn 0.9994 -0.0305 -0.0152 -vn -0.9998 -0.0000 0.0221 -vn 0.0000 0.9167 0.3995 -vn 0.0000 0.9170 0.3989 -vn 0.9998 -0.0000 0.0221 -vn 0.0000 -0.9687 -0.2483 -vn 0.0000 -0.9685 -0.2490 -vn 0.0476 0.9818 -0.1841 -vn 0.0805 0.9968 0.0000 -vn -0.9123 0.4095 0.0000 -vn -0.9330 0.3598 -0.0122 -vn 0.9134 0.4033 -0.0550 -vn 0.8857 0.4642 0.0000 -vn 0.9999 0.0000 -0.0122 -vn -0.9999 -0.0000 0.0122 -vn -0.9999 -0.0000 0.0133 -vn -0.9133 -0.4032 -0.0575 -vn -0.8857 -0.4642 -0.0000 -vn -0.9100 -0.4146 -0.0000 -vn -0.9308 -0.3546 -0.0886 -vn 0.9137 -0.4027 -0.0538 -vn 0.8857 -0.4642 -0.0000 -vn 0.9100 -0.4146 -0.0000 -vn 0.9330 -0.3598 -0.0123 -vn 0.0475 0.9816 0.1852 -vn -0.9330 0.3598 0.0123 -vn 0.9133 0.4032 0.0576 -vn 0.9999 -0.0000 0.0132 -vn 0.9999 -0.0000 0.0122 -vn -0.9999 0.0000 -0.0122 -vn -0.9134 -0.4033 0.0550 -vn -0.9311 -0.3547 0.0856 -vn 0.9137 -0.4027 0.0549 -vn 0.9330 -0.3598 0.0122 -vn 0.0000 0.0488 -0.9988 -vn -0.9252 0.3789 0.0206 -vn -0.9253 0.3787 0.0206 -vn -0.9253 0.3787 0.0204 -vn -0.9252 0.3789 0.0204 -vn 0.0000 -0.0488 0.9988 -vn -0.3440 0.9376 0.0502 -vn -0.3440 0.9376 0.0501 -vn -0.3440 0.9376 0.0500 -vn 0.9253 0.3787 0.0204 -vn 0.9253 0.3787 0.0206 -vn 0.3427 0.9381 0.0503 -vn 0.3427 0.9381 0.0501 -vn 0.3427 0.9381 0.0502 -vn 0.0000 -0.1218 -0.9926 -vn 0.0000 0.1218 0.9926 -vn 0.3447 0.9315 -0.1164 -vn 0.2867 0.7564 -0.5879 -vn -0.9993 0.0367 0.0000 -vn 0.3544 0.9287 -0.1095 -vn 0.3544 0.9287 0.1095 -vn -0.9993 0.0367 -0.0000 -vn 0.2868 0.7566 0.5877 -vn 0.2106 -0.0000 0.9776 -vn 0.2135 -0.0000 0.9769 -vn 0.8058 0.5922 0.0000 -vn 0.8087 0.5882 0.0000 -vn 0.2106 0.0000 -0.9776 -vn 0.2135 0.0000 -0.9769 -vn -0.6251 -0.7806 -0.0000 -vn -0.6232 -0.7821 -0.0000 -vn 0.9991 -0.0426 -0.0000 -vn 0.2867 0.7563 -0.5880 -vn 0.2868 0.7567 -0.5875 -vn -0.9993 0.0366 0.0000 -vn 0.2868 0.7567 0.5875 -vn 0.2867 0.7564 0.5880 -vn 0.3544 0.9287 0.1097 -vn -0.9993 0.0366 -0.0000 -vn 0.2075 -0.0000 0.9782 -vn 0.2075 0.0000 -0.9782 -vn -0.6269 -0.7791 -0.0000 -vn -0.9993 -0.0366 -0.0000 -vn -0.2867 0.7564 -0.5879 -vn -0.2868 0.7567 -0.5875 -vn -0.9993 -0.0366 0.0000 -vn -0.3544 0.9287 -0.1094 -vn -0.2868 0.7567 0.5875 -vn 0.9993 0.0366 -0.0000 -vn -0.9997 0.0000 -0.0244 -vn 0.0000 0.9176 -0.3976 -vn 0.9997 0.0000 -0.0244 -vn 0.0000 -0.9679 0.2512 -vn 0.1188 -0.9929 -0.0000 -vn -0.1218 0.9926 0.0000 -vn -0.1188 -0.9929 -0.0000 -vn 0.1218 0.9926 0.0000 -vn 0.0000 0.0609 0.9981 -vn 0.0122 -0.0244 0.9996 -vn 0.0000 -0.0669 -0.9978 -vn 0.0946 -0.0488 -0.9943 -vn 0.1415 -0.0852 0.9863 -vn 0.1559 -0.0856 0.9841 -vn 0.0000 -0.9993 -0.0366 -vn 0.0000 -0.9946 -0.1037 -vn 0.0000 0.9993 0.0366 -vn 0.0000 -0.9993 0.0366 -vn 0.0000 0.9993 -0.0366 -vn 0.0000 -0.8504 0.5261 -vn 0.0000 -0.7737 0.6336 -vn 0.9999 0.0061 0.0122 -vn 0.9999 0.0122 0.0061 -vn 0.0000 0.9434 -0.3317 -vn 0.0000 0.8477 -0.5305 -vn -0.9999 0.0061 0.0153 -vn -1.0000 -0.0000 0.0061 -vn -0.9998 -0.0000 0.0214 -vn 0.0000 -0.6823 0.7311 -vn 0.0000 0.7102 -0.7040 -vn 0.0000 0.2019 0.9794 -vn 0.0000 0.0420 0.9991 -vn 0.0000 0.0458 0.9989 -vn 0.9998 -0.0220 -0.0000 -vn 0.0000 -0.0648 -0.9979 -vn -0.9972 0.0752 0.0000 -vn 0.0000 -0.1161 0.9932 -vn 1.0000 0.0092 0.0031 -vn 1.0000 0.0091 0.0030 -vn 0.0000 0.0274 -0.9996 -vn -0.9992 -0.0397 -0.0061 -vn -0.9992 -0.0397 -0.0092 -vn 0.0000 0.0152 0.9999 -vn 0.0000 -0.0091 1.0000 -vn 0.0000 0.0305 -0.9995 -vn 0.0000 0.0336 -0.9994 -vn 0.0000 -0.0367 0.9993 -vn 0.9998 -0.0152 -0.0122 -vn 0.9998 -0.0183 -0.0122 -vn 0.0000 -0.0397 -0.9992 -vn -0.9999 -0.0122 -0.0061 -vn -1.0000 -0.0061 -0.0061 -vn 0.0000 -0.9992 0.0397 -vn 0.0000 0.9992 -0.0397 -vn 0.0000 -0.9992 -0.0397 -vn 0.0000 0.9992 0.0397 -vn -0.9999 0.0061 0.0122 -vn -0.9999 0.0122 0.0061 -vn 0.9999 0.0061 0.0152 -vn 0.9998 -0.0000 0.0213 -vn 1.0000 -0.0000 0.0061 -vn 0.9095 0.4158 0.0000 -vn -0.2267 -0.9740 -0.0000 -vn -0.9096 0.4155 0.0000 -vn 0.2267 -0.9740 -0.0000 -vn -0.9153 -0.4027 -0.0000 -vn 0.9153 -0.4027 -0.0000 -vn 0.2447 0.9696 0.0000 -vn 0.2454 0.9694 0.0000 -vn -0.1847 0.9828 0.0000 -vn -0.3094 0.9509 0.0000 -vn 0.1957 0.9807 0.0000 -vn 0.0000 -0.8100 0.5864 -vn 0.0000 0.9982 0.0593 -vn -0.9998 -0.0220 -0.0000 -vn -0.9998 -0.0221 -0.0000 -vn 0.9971 0.0755 0.0000 -vn 0.9998 0.0175 0.0000 -vn 0.9972 0.0754 0.0000 -vn -1.0000 0.0099 0.0000 -vn -1.0000 0.0091 0.0000 -vn -1.0000 0.0091 0.0030 -vn 0.9992 -0.0396 -0.0061 -vn 0.9992 -0.0396 -0.0091 -vn 0.0000 -0.0650 0.9979 -vn -1.0000 0.0091 -0.0030 -vn 0.9992 -0.0396 0.0061 -vn 0.9992 -0.0396 0.0091 -vn -0.2135 -0.0000 0.9769 -vn -0.8058 0.5922 0.0000 -vn -0.8087 0.5882 0.0000 -vn -0.2135 0.0000 -0.9769 -vn 0.6269 -0.7791 -0.0000 -vn -0.1131 -0.0321 -0.9931 -vn -0.9999 0.0122 0.0000 -vn -0.0152 -0.0244 0.9996 -vn -0.0946 -0.0488 -0.9943 -vn -0.0915 -0.0488 -0.9946 -vn -0.9997 -0.0244 -0.0000 -vn -0.1430 -0.0852 0.9860 -vn -0.1559 -0.0856 0.9841 -vn 0.1677 0.1769 -0.9698 -vn 0.8852 0.1526 -0.4395 -vn 0.3225 0.1704 -0.9311 -vn -0.0915 0.1647 -0.9821 -vn -0.0990 0.1675 -0.9809 -vn 0.0351 0.2381 -0.9706 -vn 0.4087 0.0824 -0.9089 -vn 0.0681 0.1522 -0.9860 -vn 0.4566 0.0335 -0.8890 -vn 0.2185 0.1406 -0.9657 -vn 0.9746 0.1098 -0.1952 -vn -0.0808 0.1708 -0.9820 -vn 0.7953 0.0367 -0.6051 -vn 0.5738 -0.1465 -0.8058 -vn 0.5406 0.0855 -0.8369 -vn 0.9869 0.0793 -0.1403 -vn -0.4059 0.0183 -0.9138 -vn 0.9062 0.1768 -0.3841 -vn 0.9727 0.1342 -0.1891 -vn 0.6202 0.0823 -0.7801 -vn -0.3954 -0.3511 -0.8488 -vn -0.5274 -0.0761 -0.8462 -vn 0.4245 0.0701 -0.9027 -vn 0.9479 0.2046 -0.2443 -# 763 vertex normals - -vt 0.1653 0.1021 0.0000 -vt 0.1651 0.0040 0.0000 -vt 0.1820 0.0040 0.0000 -vt 0.1822 0.1021 0.0000 -vt 0.2390 0.0039 0.0000 -vt 0.2392 0.1021 0.0000 -vt 0.2288 0.1154 0.0000 -vt 0.1718 0.1155 0.0000 -vt 0.2488 0.1016 0.0000 -vt 0.2488 0.0038 0.0000 -vt 0.2488 0.1182 0.0000 -vt 0.2389 0.1192 0.0000 -vt 0.3830 0.9833 0.0000 -vt 0.4937 0.9905 0.0000 -vt 0.4968 0.9761 0.0000 -vt 0.3847 0.9691 0.0000 -vt 0.6248 0.0480 0.0000 -vt 0.6387 0.0358 0.0000 -vt 0.6762 0.1456 0.0000 -vt 0.6504 0.1422 0.0000 -vt 0.5881 0.0420 0.0000 -vt 0.5812 0.0529 0.0000 -vt 0.5194 0.7064 0.0000 -vt 0.3946 0.7339 0.0000 -vt 0.2729 0.9827 0.0000 -vt 0.2728 0.9686 0.0000 -vt 0.5372 0.0542 0.0000 -vt 0.5369 0.0436 0.0000 -vt 0.2725 0.7531 0.0000 -vt 0.0490 0.9765 0.0000 -vt 0.0520 0.9909 0.0000 -vt 0.1627 0.9835 0.0000 -vt 0.1610 0.9693 0.0000 -vt 0.1503 0.7341 0.0000 -vt 0.0254 0.7068 0.0000 -vt 0.0129 0.7181 0.0000 -vt 0.0276 0.9777 0.0000 -vt 0.5319 0.7177 0.0000 -vt 0.5181 0.9773 0.0000 -vt 0.6276 0.2100 0.0000 -vt 0.7886 0.2167 0.0000 -vt 0.7880 0.2311 0.0000 -vt 0.6271 0.2239 0.0000 -vt 0.4417 0.0530 0.0000 -vt 0.4170 0.0379 0.0000 -vt 0.4116 0.1636 0.0000 -vt 0.4454 0.1617 0.0000 -vt 0.4931 0.0459 0.0000 -vt 0.5057 0.0598 0.0000 -vt 0.7706 0.5706 0.0000 -vt 0.8113 0.7913 0.0000 -vt 0.6338 0.7720 0.0000 -vt 0.6173 0.5801 0.0000 -vt 0.5547 0.2097 0.0000 -vt 0.5544 0.2235 0.0000 -vt 0.5281 0.0606 0.0000 -vt 0.5276 0.0471 0.0000 -vt 0.5480 0.5803 0.0000 -vt 0.5491 0.7648 0.0000 -vt 0.5131 0.2010 0.0000 -vt 0.8012 0.2068 0.0000 -vt 0.7879 0.1921 0.0000 -vt 0.5137 0.1820 0.0000 -vt 0.9505 0.4390 0.0000 -vt 0.9294 0.4390 0.0000 -vt 0.9268 0.5619 0.0000 -vt 0.9416 0.5619 0.0000 -vt 0.9656 0.4348 0.0000 -vt 0.9905 0.4348 0.0000 -vt 0.9819 0.5570 0.0000 -vt 0.9629 0.5570 0.0000 -vt 0.9511 0.6874 0.0000 -vt 0.9289 0.6874 0.0000 -vt 0.9910 0.6819 0.0000 -vt 0.9651 0.6969 0.0000 -vt 0.4778 0.5469 0.0000 -vt 0.4769 0.4583 0.0000 -vt 0.5358 0.4581 0.0000 -vt 0.5367 0.5468 0.0000 -vt 0.6262 0.4580 0.0000 -vt 0.6271 0.5466 0.0000 -vt 0.4789 0.6840 0.0000 -vt 0.5368 0.6372 0.0000 -vt 0.4840 0.2971 0.0000 -vt 0.4836 0.2217 0.0000 -vt 0.4504 0.2199 0.0000 -vt 0.4509 0.3214 0.0000 -vt 0.4283 0.2164 0.0000 -vt 0.4283 0.1990 0.0000 -vt 0.4162 0.1990 0.0000 -vt 0.4162 0.2164 0.0000 -vt 0.4609 0.4514 0.0000 -vt 0.4609 0.4281 0.0000 -vt 0.4583 0.4281 0.0000 -vt 0.4583 0.4514 0.0000 -vt 0.4865 0.1873 0.0000 -vt 0.5044 0.1875 0.0000 -vt 0.5045 0.1849 0.0000 -vt 0.4865 0.1847 0.0000 -vt 0.6103 0.2288 0.0000 -vt 0.5859 0.2443 0.0000 -vt 0.6117 0.2447 0.0000 -vt 0.4590 0.3365 0.0000 -vt 0.5049 0.3047 0.0000 -vt 0.4891 0.2985 0.0000 -vt 0.4590 0.3204 0.0000 -vt 0.5355 0.2298 0.0000 -vt 0.5369 0.2457 0.0000 -vt 0.4175 0.2974 0.0000 -vt 0.4172 0.2227 0.0000 -vt 0.4609 0.4747 0.0000 -vt 0.4583 0.4747 0.0000 -vt 0.4655 0.5044 0.0000 -vt 0.4632 0.5044 0.0000 -vt 0.4632 0.4694 0.0000 -vt 0.4655 0.4694 0.0000 -vt 0.4632 0.4503 0.0000 -vt 0.4655 0.4503 0.0000 -vt 0.4632 0.4312 0.0000 -vt 0.4655 0.4312 0.0000 -vt 0.4632 0.3965 0.0000 -vt 0.4655 0.3965 0.0000 -vt 0.4486 0.1864 0.0000 -vt 0.4487 0.1898 0.0000 -vt 0.4128 0.1905 0.0000 -vt 0.4128 0.1871 0.0000 -vt 0.4891 0.2302 0.0000 -vt 0.5049 0.2318 0.0000 -vt 0.4583 0.5052 0.0000 -vt 0.4609 0.5052 0.0000 -vt 0.4609 0.3976 0.0000 -vt 0.4583 0.3976 0.0000 -vt 0.4674 0.1860 0.0000 -vt 0.4673 0.1809 0.0000 -vt 0.4485 0.1813 0.0000 -vt 0.4127 0.1820 0.0000 -vt 0.5045 0.1821 0.0000 -vt 0.4865 0.1818 0.0000 -vt 0.4675 0.1906 0.0000 -vt 0.4768 0.1904 0.0000 -vt 0.4767 0.1858 0.0000 -vt 0.4766 0.1807 0.0000 -vt 0.6243 0.2436 0.0000 -vt 0.6229 0.2277 0.0000 -vt 0.5075 0.1821 0.0000 -vt 0.5075 0.1850 0.0000 -vt 0.5075 0.1876 0.0000 -vt 0.1703 0.1211 0.0000 -vt 0.2654 0.1211 0.0000 -vt 0.2654 0.2162 0.0000 -vt 0.1703 0.2162 0.0000 -vt 0.8033 0.5516 0.0000 -vt 0.7284 0.5516 0.0000 -vt 0.7284 0.5346 0.0000 -vt 0.8033 0.5346 0.0000 -vt 0.7612 0.2899 0.0000 -vt 0.8771 0.2848 0.0000 -vt 0.8771 0.2638 0.0000 -vt 0.7612 0.2689 0.0000 -vt 0.6536 0.5516 0.0000 -vt 0.6536 0.5346 0.0000 -vt 0.9930 0.2899 0.0000 -vt 0.9930 0.2689 0.0000 -vt 0.7695 0.3379 0.0000 -vt 0.7630 0.3785 0.0000 -vt 0.7061 0.3785 0.0000 -vt 0.7007 0.3379 0.0000 -vt 0.7465 0.4731 0.0000 -vt 0.7420 0.5110 0.0000 -vt 0.6983 0.5110 0.0000 -vt 0.6938 0.4731 0.0000 -vt 0.5336 0.4511 0.0000 -vt 0.5358 0.3703 0.0000 -vt 0.5581 0.3703 0.0000 -vt 0.5604 0.4511 0.0000 -vt 0.5044 0.4512 0.0000 -vt 0.5079 0.3704 0.0000 -vt 0.5257 0.3704 0.0000 -vt 0.5258 0.4512 0.0000 -vt 0.7541 0.3903 0.0000 -vt 0.7147 0.3904 0.0000 -vt 0.7088 0.3850 0.0000 -vt 0.7601 0.3849 0.0000 -vt 0.7371 0.5221 0.0000 -vt 0.7033 0.5221 0.0000 -vt 0.6999 0.5170 0.0000 -vt 0.7404 0.5170 0.0000 -vt 0.5336 0.3173 0.0000 -vt 0.5604 0.3173 0.0000 -vt 0.5044 0.3174 0.0000 -vt 0.5258 0.3174 0.0000 -vt 0.2295 0.5679 0.0000 -vt 0.2295 0.7248 0.0000 -vt 0.1491 0.7248 0.0000 -vt 0.1491 0.5679 0.0000 -vt 0.0734 0.3884 0.0000 -vt 0.0734 0.5343 0.0000 -vt 0.1303 0.4803 0.0000 -vt 0.1303 0.3884 0.0000 -vt 0.3285 0.3780 0.0000 -vt 0.3285 0.5521 0.0000 -vt 0.2393 0.5521 0.0000 -vt 0.2393 0.3780 0.0000 -vt 0.0724 0.5388 0.0000 -vt 0.0724 0.7084 0.0000 -vt 0.1385 0.6456 0.0000 -vt 0.1385 0.5388 0.0000 -vt 0.0133 0.3872 0.0000 -vt 0.0133 0.4806 0.0000 -vt 0.0711 0.5356 0.0000 -vt 0.0711 0.3872 0.0000 -vt 0.0056 0.5388 0.0000 -vt 0.0056 0.6456 0.0000 -vt 0.0717 0.7084 0.0000 -vt 0.0717 0.5388 0.0000 -vt 0.7780 0.1420 0.0000 -vt 0.9957 0.1420 0.0000 -vt 0.9872 0.1360 0.0000 -vt 0.7865 0.1360 0.0000 -vt 0.8376 0.2361 0.0000 -vt 0.9159 0.2361 0.0000 -vt 0.9159 0.2269 0.0000 -vt 0.8433 0.2269 0.0000 -vt 0.9942 0.2361 0.0000 -vt 0.9885 0.2269 0.0000 -vt 0.9872 0.0716 0.0000 -vt 0.7865 0.0716 0.0000 -vt 0.9159 0.1545 0.0000 -vt 0.8433 0.1545 0.0000 -vt 0.9885 0.1545 0.0000 -vt 0.9876 0.0658 0.0000 -vt 0.9876 0.0428 0.0000 -vt 0.6555 0.0428 0.0000 -vt 0.6555 0.0658 0.0000 -vt 0.4488 0.0337 0.0000 -vt 0.9905 0.0337 0.0000 -vt 0.9905 0.0094 0.0000 -vt 0.4488 0.0094 0.0000 -vt 0.9148 0.8638 0.0000 -vt 0.9148 0.9891 0.0000 -vt 0.8086 0.9891 0.0000 -vt 0.8086 0.8638 0.0000 -vt 0.9707 0.8288 0.0000 -vt 0.8024 0.8287 0.0000 -vt 0.8033 0.8422 0.0000 -vt 0.9717 0.8424 0.0000 -vt 0.3342 0.1880 0.0000 -vt 0.2823 0.1880 0.0000 -vt 0.2823 0.1347 0.0000 -vt 0.3342 0.1347 0.0000 -vt 0.2844 0.1207 0.0000 -vt 0.3817 0.1207 0.0000 -vt 0.3817 0.1011 0.0000 -vt 0.2844 0.1011 0.0000 -vt 0.8802 0.3593 0.0000 -vt 0.9103 0.3593 0.0000 -vt 0.8975 0.5055 0.0000 -vt 0.8764 0.5055 0.0000 -vt 0.8320 0.3574 0.0000 -vt 0.8649 0.3574 0.0000 -vt 0.8535 0.5016 0.0000 -vt 0.8284 0.5016 0.0000 -vt 0.8794 0.6233 0.0000 -vt 0.9111 0.6233 0.0000 -vt 0.8656 0.6178 0.0000 -vt 0.8314 0.6355 0.0000 -vt 0.4228 0.7112 0.0000 -vt 0.4228 0.6424 0.0000 -vt 0.4423 0.6424 0.0000 -vt 0.4423 0.7112 0.0000 -vt 0.4425 0.5680 0.0000 -vt 0.4227 0.5680 0.0000 -vt 0.4227 0.7116 0.0000 -vt 0.4425 0.7116 0.0000 -vt 0.4065 0.5654 0.0000 -vt 0.3637 0.5654 0.0000 -vt 0.3637 0.6823 0.0000 -vt 0.4065 0.6823 0.0000 -vt 0.3520 0.5654 0.0000 -vt 0.3520 0.7031 0.0000 -vt 0.4182 0.7031 0.0000 -vt 0.4182 0.5654 0.0000 -vt 0.3394 0.5706 0.0000 -vt 0.3394 0.7049 0.0000 -vt 0.3486 0.7049 0.0000 -vt 0.3486 0.5706 0.0000 -vt 0.3548 0.7182 0.0000 -vt 0.4174 0.7182 0.0000 -vt 0.4174 0.7064 0.0000 -vt 0.3548 0.7064 0.0000 -vt 0.1513 0.0157 0.0000 -vt 0.0741 0.0157 0.0000 -vt 0.0741 0.0084 0.0000 -vt 0.1513 0.0084 0.0000 -vt 0.2558 0.0882 0.0000 -vt 0.3008 0.0414 0.0000 -vt 0.3107 0.0499 0.0000 -vt 0.2558 0.1052 0.0000 -vt 0.3368 0.0041 0.0000 -vt 0.3569 0.0041 0.0000 -vt 0.0100 0.0157 0.0000 -vt 0.0100 0.0084 0.0000 -vt 0.3418 0.3603 0.0000 -vt 0.3577 0.3603 0.0000 -vt 0.3604 0.5475 0.0000 -vt 0.3445 0.5475 0.0000 -vt 0.3638 0.3511 0.0000 -vt 0.3799 0.3511 0.0000 -vt 0.3947 0.5483 0.0000 -vt 0.3786 0.5483 0.0000 -vt 0.9865 0.8562 0.0000 -vt 0.9634 0.8562 0.0000 -vt 0.9732 0.9032 0.0000 -vt 0.9893 0.9032 0.0000 -vt 0.9534 0.8563 0.0000 -vt 0.9269 0.8563 0.0000 -vt 0.9361 0.9027 0.0000 -vt 0.9563 0.9027 0.0000 -vt 0.9870 0.9897 0.0000 -vt 0.9628 0.9897 0.0000 -vt 0.9264 0.9882 0.0000 -vt 0.9540 0.9939 0.0000 -vt 0.3862 0.0933 0.0000 -vt 0.3862 0.0789 0.0000 -vt 0.3785 0.0789 0.0000 -vt 0.3785 0.0933 0.0000 -vt 0.3862 0.0646 0.0000 -vt 0.3785 0.0646 0.0000 -vt 0.3862 0.0502 0.0000 -vt 0.3785 0.0502 0.0000 -vt 0.3862 0.0314 0.0000 -vt 0.3785 0.0358 0.0000 -vt 0.3708 0.0933 0.0000 -vt 0.3708 0.0812 0.0000 -vt 0.3630 0.0835 0.0000 -vt 0.3630 0.0933 0.0000 -vt 0.3708 0.0726 0.0000 -vt 0.3630 0.0733 0.0000 -vt 0.3476 0.0933 0.0000 -vt 0.3553 0.0933 0.0000 -vt 0.3553 0.0812 0.0000 -vt 0.3476 0.0789 0.0000 -vt 0.3553 0.0726 0.0000 -vt 0.3476 0.0646 0.0000 -vt 0.3398 0.0933 0.0000 -vt 0.3398 0.0789 0.0000 -vt 0.3321 0.0789 0.0000 -vt 0.3321 0.0933 0.0000 -vt 0.3398 0.0646 0.0000 -vt 0.3321 0.0646 0.0000 -vt 0.3398 0.0502 0.0000 -vt 0.3321 0.0502 0.0000 -vt 0.3398 0.0314 0.0000 -vt 0.3321 0.0358 0.0000 -vt 0.3940 0.0933 0.0000 -vt 0.3940 0.0789 0.0000 -vt 0.3940 0.0646 0.0000 -vt 0.3940 0.0502 0.0000 -vt 0.3940 0.0358 0.0000 -vt 0.3476 0.0502 0.0000 -vt 0.3476 0.0358 0.0000 -vt 0.0870 0.2093 0.0000 -vt 0.0870 0.1769 0.0000 -vt 0.1033 0.1769 0.0000 -vt 0.1033 0.2093 0.0000 -vt 0.0870 0.1445 0.0000 -vt 0.1033 0.1445 0.0000 -vt 0.0870 0.1122 0.0000 -vt 0.1033 0.1122 0.0000 -vt 0.0870 0.0798 0.0000 -vt 0.1033 0.0879 0.0000 -vt 0.1195 0.1769 0.0000 -vt 0.1195 0.2093 0.0000 -vt 0.1195 0.1445 0.0000 -vt 0.1195 0.1122 0.0000 -vt 0.1195 0.0919 0.0000 -vt 0.1358 0.1769 0.0000 -vt 0.1358 0.2093 0.0000 -vt 0.1358 0.1445 0.0000 -vt 0.1358 0.1122 0.0000 -vt 0.1358 0.0879 0.0000 -vt 0.1521 0.1769 0.0000 -vt 0.1521 0.2093 0.0000 -vt 0.1521 0.1445 0.0000 -vt 0.1521 0.1122 0.0000 -vt 0.1521 0.0798 0.0000 -vt 0.9805 0.3515 0.0000 -vt 0.8919 0.3515 0.0000 -vt 0.8919 0.3478 0.0000 -vt 0.9816 0.3476 0.0000 -vt 0.9830 0.3553 0.0000 -vt 0.8919 0.3552 0.0000 -vt 0.8919 0.3440 0.0000 -vt 0.9824 0.3437 0.0000 -vt 0.9965 0.3561 0.0000 -vt 0.9831 0.3494 0.0000 -vt 0.9965 0.3427 0.0000 -vt 0.7419 0.2470 0.0000 -vt 0.6431 0.2470 0.0000 -vt 0.6431 0.3190 0.0000 -vt 0.7419 0.3190 0.0000 -vt 0.7507 0.2396 0.0000 -vt 0.6359 0.2396 0.0000 -vt 0.6359 0.3246 0.0000 -vt 0.7507 0.3246 0.0000 -vt 0.6389 0.1517 0.0000 -vt 0.6389 0.1732 0.0000 -vt 0.8323 0.1732 0.0000 -vt 0.8323 0.1517 0.0000 -vt 0.8265 0.2627 0.0000 -vt 0.8140 0.2627 0.0000 -vt 0.8140 0.1773 0.0000 -vt 0.8265 0.1773 0.0000 -vt 0.6510 0.1648 0.0000 -vt 0.8174 0.1648 0.0000 -vt 0.8174 0.1732 0.0000 -vt 0.6510 0.1732 0.0000 -vt 0.8189 0.1848 0.0000 -vt 0.8189 0.2570 0.0000 -vt 0.8140 0.2570 0.0000 -vt 0.8140 0.1848 0.0000 -vt 0.5178 0.0689 0.0000 -vt 0.4575 0.0689 0.0000 -vt 0.4575 0.0739 0.0000 -vt 0.5178 0.0739 0.0000 -vt 0.5266 0.0771 0.0000 -vt 0.4556 0.0771 0.0000 -vt 0.4556 0.1622 0.0000 -vt 0.5266 0.1622 0.0000 -vt 0.4526 0.0711 0.0000 -vt 0.4480 0.0711 0.0000 -vt 0.4480 0.1341 0.0000 -vt 0.4526 0.1341 0.0000 -vt 0.0867 0.2315 0.0000 -vt 0.0133 0.2315 0.0000 -vt 0.0133 0.3783 0.0000 -vt 0.0867 0.3783 0.0000 -vt 0.2532 0.5764 0.0000 -vt 0.2532 0.7062 0.0000 -vt 0.3181 0.6514 0.0000 -vt 0.3181 0.5764 0.0000 -vt 0.1025 0.2299 0.0000 -vt 0.3167 0.2299 0.0000 -vt 0.3167 0.3662 0.0000 -vt 0.1025 0.3662 0.0000 -vt 0.1508 0.3732 0.0000 -vt 0.1508 0.4723 0.0000 -vt 0.2003 0.4304 0.0000 -vt 0.2003 0.3732 0.0000 -vt 0.2287 0.4613 0.0000 -vt 0.2287 0.5184 0.0000 -vt 0.1793 0.5602 0.0000 -vt 0.1793 0.4613 0.0000 -vt 0.4010 0.2138 0.0000 -vt 0.4010 0.2947 0.0000 -vt 0.3310 0.3538 0.0000 -vt 0.3310 0.2138 0.0000 -vt 0.5641 0.3335 0.0000 -vt 0.5946 0.3335 0.0000 -vt 0.6439 0.4416 0.0000 -vt 0.5931 0.4416 0.0000 -vt 0.6529 0.4224 0.0000 -vt 0.6831 0.4224 0.0000 -vt 0.6898 0.5217 0.0000 -vt 0.6462 0.5217 0.0000 -vt 0.5446 0.8121 0.0000 -vt 0.6711 0.8320 0.0000 -vt 0.6711 0.9870 0.0000 -vt 0.5446 0.9872 0.0000 -vt 0.4371 0.3303 0.0000 -vt 0.4358 0.5309 0.0000 -vt 0.4457 0.5400 0.0000 -vt 0.4471 0.3395 0.0000 -vt 0.4093 0.5489 0.0000 -vt 0.4272 0.5489 0.0000 -vt 0.4272 0.3265 0.0000 -vt 0.4093 0.3265 0.0000 -vt 0.6195 0.0640 0.0000 -vt 0.5319 0.0641 0.0000 -vt 0.5319 0.1713 0.0000 -vt 0.6195 0.1791 0.0000 -vt 0.7976 0.8121 0.0000 -vt 0.7976 0.9872 0.0000 -vt 0.0096 0.1316 0.0000 -vt 0.0232 0.1315 0.0000 -vt 0.0232 0.2108 0.0000 -vt 0.0096 0.2108 0.0000 -vt 0.0617 0.2213 0.0000 -vt 0.0151 0.2219 0.0000 -vt 0.0690 0.2103 0.0000 -vt 0.0690 0.1320 0.0000 -vt 0.0151 0.1205 0.0000 -vt 0.0616 0.1211 0.0000 -vt 0.0764 0.2116 0.0000 -vt 0.0694 0.2244 0.0000 -vt 0.0764 0.1307 0.0000 -vt 0.0694 0.1180 0.0000 -vt 0.8502 0.6523 0.0000 -vt 0.8216 0.6519 0.0000 -vt 0.8262 0.7280 0.0000 -vt 0.8489 0.7283 0.0000 -vt 0.8996 0.6351 0.0000 -vt 0.8678 0.6351 0.0000 -vt 0.8688 0.7106 0.0000 -vt 0.8962 0.7106 0.0000 -vt 0.8524 0.7973 0.0000 -vt 0.8184 0.7968 0.0000 -vt 0.8650 0.7842 0.0000 -vt 0.9025 0.8081 0.0000 -vt 0.8800 0.2990 0.0000 -vt 0.8800 0.3360 0.0000 -vt 0.7763 0.3478 0.0000 -vt 0.7763 0.3107 0.0000 -vt 0.9894 0.3030 0.0000 -vt 0.9894 0.3400 0.0000 -vt 0.8122 0.5069 0.0000 -vt 0.8110 0.4335 0.0000 -vt 0.7852 0.4335 0.0000 -vt 0.7817 0.5069 0.0000 -vt 0.6664 0.4078 0.0000 -vt 0.7042 0.4222 0.0000 -vt 0.7305 0.4089 0.0000 -vt 0.6664 0.3660 0.0000 -vt 0.7582 0.5158 0.0000 -vt 0.7594 0.5000 0.0000 -vt 0.7724 0.5000 0.0000 -vt 0.7736 0.5158 0.0000 -vt 0.8133 0.3622 0.0000 -vt 0.7828 0.3622 0.0000 -vt 0.7458 0.4669 0.0000 -vt 0.7801 0.4669 0.0000 -vt 0.7582 0.4758 0.0000 -vt 0.7736 0.4758 0.0000 -vt 0.0071 0.1053 0.0000 -vt 0.0071 0.0766 0.0000 -vt 0.0724 0.0766 0.0000 -vt 0.0724 0.1053 0.0000 -vt 0.0071 0.0727 0.0000 -vt 0.0724 0.0727 0.0000 -vt 0.4675 0.5387 0.0000 -vt 0.4559 0.5387 0.0000 -vt 0.4559 0.6952 0.0000 -vt 0.4675 0.6952 0.0000 -vt 0.4704 0.5364 0.0000 -vt 0.4532 0.5364 0.0000 -vt 0.4532 0.6969 0.0000 -vt 0.4704 0.6969 0.0000 -vt 0.9357 0.7417 0.0000 -vt 0.9172 0.7417 0.0000 -vt 0.9172 0.7159 0.0000 -vt 0.9357 0.7159 0.0000 -vt 0.9541 0.7417 0.0000 -vt 0.9541 0.7159 0.0000 -vt 0.9725 0.7417 0.0000 -vt 0.9725 0.7159 0.0000 -vt 0.9909 0.7417 0.0000 -vt 0.9909 0.7159 0.0000 -vt 0.9357 0.7675 0.0000 -vt 0.9172 0.7675 0.0000 -vt 0.9541 0.7675 0.0000 -vt 0.9725 0.7675 0.0000 -vt 0.9909 0.7675 0.0000 -vt 0.9357 0.7933 0.0000 -vt 0.9172 0.7933 0.0000 -vt 0.9541 0.7933 0.0000 -vt 0.9725 0.7933 0.0000 -vt 0.9909 0.7933 0.0000 -vt 0.9357 0.8191 0.0000 -vt 0.9172 0.8191 0.0000 -vt 0.9541 0.8191 0.0000 -vt 0.9725 0.8191 0.0000 -vt 0.9909 0.8191 0.0000 -# 572 texture coords - -o house -g house -f 1/1/1 2/2/1 3/3/1 -f 3/3/1 4/4/1 1/1/1 -f 5/5/2 6/6/3 4/4/4 -f 4/4/4 3/3/3 5/5/2 -f 6/6/5 7/7/5 1/8/5 -f 1/8/5 4/4/5 6/6/5 -f 8/9/6 6/6/6 5/5/6 -f 5/5/6 9/10/6 8/9/6 -f 10/11/5 7/12/5 6/6/5 -f 6/6/5 8/9/7 10/11/7 -f 11/1/8 12/4/8 13/3/8 -f 13/3/8 14/2/8 11/1/8 -f 12/4/9 15/6/10 16/5/11 -f 16/5/11 13/3/12 12/4/9 -f 11/8/5 17/7/5 15/6/5 -f 15/6/7 12/4/5 11/8/5 -f 8/9/13 9/10/13 16/5/13 -f 16/5/14 15/6/14 8/9/13 -f 10/11/5 8/9/5 15/6/5 -f 15/6/7 17/12/7 10/11/7 -f 18/1/1 19/2/1 20/3/1 -f 20/3/1 21/4/1 18/1/1 -f 22/5/15 23/6/15 21/4/16 -f 21/4/16 20/3/17 22/5/15 -f 23/6/18 24/7/18 18/8/18 -f 18/8/18 21/4/19 23/6/18 -f 25/9/20 23/6/21 22/5/22 -f 22/5/22 26/10/23 25/9/21 -f 27/11/19 24/12/18 23/6/18 -f 23/6/18 25/9/24 27/11/25 -f 28/1/8 29/4/8 30/3/8 -f 30/3/8 31/2/8 28/1/8 -f 29/4/26 32/6/26 33/5/26 -f 33/5/26 30/3/26 29/4/26 -f 28/8/18 34/7/18 32/6/18 -f 32/6/18 29/4/18 28/8/18 -f 25/9/27 26/10/28 33/5/29 -f 33/5/28 32/6/30 25/9/30 -f 27/11/19 25/9/18 32/6/18 -f 32/6/24 34/12/24 27/11/19 -f 35/1/1 36/2/1 37/3/1 -f 37/3/1 38/4/1 35/1/1 -f 39/5/31 40/6/32 38/4/33 -f 38/4/33 37/3/33 39/5/31 -f 40/6/34 41/7/34 35/8/34 -f 35/8/34 38/4/34 40/6/34 -f 42/9/35 40/6/36 39/5/35 -f 39/5/35 43/10/37 42/9/35 -f 44/11/34 41/12/34 40/6/34 -f 40/6/34 42/9/34 44/11/34 -f 45/1/8 46/4/8 47/3/8 -f 47/3/8 48/2/8 45/1/8 -f 46/4/38 49/6/39 50/5/40 -f 50/5/40 47/3/38 46/4/38 -f 45/8/34 51/7/34 49/6/34 -f 49/6/34 46/4/34 45/8/34 -f 42/9/41 43/10/42 50/5/41 -f 50/5/41 49/6/42 42/9/41 -f 44/11/34 42/9/34 49/6/34 -f 49/6/34 51/12/34 44/11/34 -f 52/1/1 53/2/1 54/3/1 -f 54/3/1 55/4/1 52/1/1 -f 56/5/43 57/6/43 55/4/44 -f 55/4/44 54/3/45 56/5/43 -f 57/6/46 58/7/46 52/8/46 -f 52/8/46 55/4/46 57/6/46 -f 59/9/47 57/6/47 56/5/47 -f 56/5/47 60/10/47 59/9/47 -f 61/11/46 58/12/46 57/6/46 -f 57/6/46 59/9/48 61/11/48 -f 62/1/8 63/4/8 64/3/8 -f 64/3/8 65/2/8 62/1/8 -f 63/4/49 66/6/50 67/5/50 -f 67/5/50 64/3/51 63/4/49 -f 62/8/46 68/7/46 66/6/46 -f 66/6/46 63/4/46 62/8/46 -f 59/9/52 60/10/52 67/5/52 -f 67/5/52 66/6/52 59/9/52 -f 61/11/46 59/9/46 66/6/46 -f 66/6/46 68/12/46 61/11/46 -f 69/1/1 70/4/1 71/3/1 -f 71/3/1 72/2/1 69/1/1 -f 73/5/53 71/3/54 70/4/54 -f 70/4/54 74/6/53 73/5/53 -f 74/6/55 70/4/55 69/8/55 -f 69/8/55 75/7/55 74/6/55 -f 76/9/56 77/10/56 73/5/57 -f 73/5/58 74/6/58 76/9/59 -f 78/11/55 76/9/55 74/6/55 -f 74/6/55 75/12/55 78/11/55 -f 79/1/8 80/2/8 81/3/8 -f 81/3/8 82/4/8 79/1/8 -f 82/4/60 81/3/60 83/5/60 -f 83/5/60 84/6/60 82/4/60 -f 79/8/55 82/4/55 84/6/55 -f 84/6/55 85/7/55 79/8/55 -f 76/9/61 84/6/62 83/5/63 -f 83/5/63 77/10/64 76/9/64 -f 78/11/55 85/12/55 84/6/55 -f 84/6/55 76/9/55 78/11/55 -f 86/1/1 87/4/1 88/3/1 -f 88/3/1 89/2/1 86/1/1 -f 90/5/65 88/3/65 87/4/66 -f 87/4/66 91/6/65 90/5/65 -f 91/6/67 87/4/67 86/8/68 -f 86/8/68 92/7/67 91/6/67 -f 93/9/69 94/10/70 90/5/71 -f 90/5/71 91/6/71 93/9/72 -f 95/11/67 93/9/67 91/6/67 -f 91/6/67 92/12/67 95/11/67 -f 96/1/8 97/2/8 98/3/8 -f 98/3/8 99/4/8 96/1/8 -f 99/4/73 98/3/74 100/5/75 -f 100/5/75 101/6/75 99/4/73 -f 96/8/68 99/4/67 101/6/76 -f 101/6/67 102/7/67 96/8/68 -f 93/9/77 101/6/78 100/5/78 -f 100/5/78 94/10/78 93/9/77 -f 95/11/67 102/12/76 101/6/76 -f 101/6/67 93/9/67 95/11/67 -f 103/1/1 104/4/1 105/3/1 -f 105/3/1 106/2/1 103/1/1 -f 107/5/79 105/3/80 104/4/81 -f 104/4/81 108/6/82 107/5/79 -f 108/6/83 104/4/83 103/8/83 -f 103/8/83 109/7/83 108/6/83 -f 110/9/84 111/10/84 107/5/85 -f 107/5/85 108/6/85 110/9/85 -f 112/11/86 110/9/86 108/6/83 -f 108/6/83 109/12/83 112/11/83 -f 113/1/8 114/2/8 115/3/8 -f 115/3/8 116/4/8 113/1/8 -f 116/4/87 115/3/88 117/5/88 -f 117/5/88 118/6/89 116/4/87 -f 113/8/83 116/4/83 118/6/86 -f 118/6/83 119/7/83 113/8/83 -f 110/9/90 118/6/90 117/5/90 -f 117/5/91 111/10/91 110/9/91 -f 112/11/83 119/12/86 118/6/86 -f 118/6/83 110/9/83 112/11/83 -f 120/1/1 121/4/1 122/3/1 -f 122/3/1 123/2/1 120/1/1 -f 124/5/82 122/3/92 121/4/92 -f 121/4/92 125/6/82 124/5/82 -f 125/6/83 121/4/93 120/8/83 -f 120/8/83 126/7/93 125/6/83 -f 127/9/85 128/10/85 124/5/85 -f 124/5/85 125/6/85 127/9/85 -f 129/11/83 127/9/83 125/6/83 -f 125/6/83 126/12/93 129/11/83 -f 130/1/8 131/2/8 132/3/8 -f 132/3/8 133/4/8 130/1/8 -f 133/4/88 132/3/87 134/5/89 -f 134/5/89 135/6/89 133/4/88 -f 130/8/83 133/4/83 135/6/86 -f 135/6/83 136/7/93 130/8/83 -f 127/9/90 135/6/90 134/5/90 -f 134/5/90 128/10/90 127/9/90 -f 129/11/83 136/12/94 135/6/86 -f 135/6/83 127/9/83 129/11/83 -f 137/1/1 138/4/1 139/3/1 -f 139/3/1 140/2/1 137/1/1 -f 141/5/95 139/3/96 138/4/96 -f 138/4/96 142/6/95 141/5/95 -f 142/6/55 138/4/55 137/8/55 -f 137/8/55 143/7/55 142/6/55 -f 144/9/58 145/10/58 141/5/58 -f 141/5/58 142/6/59 144/9/58 -f 146/11/55 144/9/55 142/6/55 -f 142/6/55 143/12/55 146/11/97 -f 147/1/8 148/2/8 149/3/8 -f 149/3/8 150/4/8 147/1/8 -f 150/4/98 149/3/98 151/5/99 -f 151/5/99 152/6/99 150/4/98 -f 147/8/55 150/4/55 152/6/55 -f 152/6/55 153/7/55 147/8/55 -f 144/9/63 152/6/61 151/5/62 -f 151/5/62 145/10/62 144/9/62 -f 146/11/55 153/12/55 152/6/55 -f 152/6/55 144/9/97 146/11/97 -f 154/1/1 155/4/1 156/3/1 -f 156/3/1 157/2/1 154/1/1 -f 158/5/100 156/3/101 155/4/102 -f 155/4/102 159/6/102 158/5/100 -f 159/6/103 155/4/103 154/8/103 -f 154/8/103 160/7/103 159/6/103 -f 161/9/104 162/10/105 158/5/105 -f 158/5/106 159/6/107 161/9/108 -f 163/11/103 161/9/103 159/6/103 -f 159/6/103 160/12/103 163/11/103 -f 164/1/8 165/2/8 166/3/8 -f 166/3/8 167/4/8 164/1/8 -f 167/4/109 166/3/110 168/5/111 -f 168/5/111 169/6/109 167/4/109 -f 164/8/103 167/4/103 169/6/103 -f 169/6/103 170/7/103 164/8/103 -f 161/9/112 169/6/113 168/5/114 -f 168/5/114 162/10/114 161/9/115 -f 163/11/116 170/12/116 169/6/116 -f 169/6/103 161/9/103 163/11/103 -f 171/1/1 172/2/1 173/3/1 -f 173/3/1 174/4/1 171/1/1 -f 175/5/117 176/6/118 174/4/3 -f 174/4/3 173/3/119 175/5/117 -f 176/6/120 177/7/120 171/8/121 -f 171/8/121 174/4/121 176/6/120 -f 178/9/122 176/6/6 175/5/6 -f 175/5/6 179/10/123 178/9/6 -f 180/11/120 177/12/120 176/6/120 -f 176/6/120 178/9/124 180/11/124 -f 181/1/8 182/4/8 183/3/8 -f 183/3/8 184/2/8 181/1/8 -f 182/4/12 185/6/10 186/5/125 -f 186/5/125 183/3/126 182/4/12 -f 181/8/121 187/7/120 185/6/120 -f 185/6/124 182/4/121 181/8/121 -f 178/9/13 179/10/127 186/5/13 -f 186/5/14 185/6/14 178/9/14 -f 180/11/120 178/9/120 185/6/120 -f 185/6/124 187/12/124 180/11/124 -f 188/1/1 189/2/1 190/3/1 -f 190/3/1 191/4/1 188/1/1 -f 192/5/128 193/6/129 191/4/130 -f 191/4/130 190/3/131 192/5/128 -f 193/6/18 194/7/18 188/8/19 -f 188/8/19 191/4/18 193/6/18 -f 195/9/132 193/6/133 192/5/134 -f 192/5/134 196/10/134 195/9/133 -f 197/11/18 194/12/18 193/6/18 -f 193/6/18 195/9/24 197/11/24 -f 198/1/8 199/4/8 200/3/8 -f 200/3/8 201/2/8 198/1/8 -f 199/4/135 202/6/135 203/5/136 -f 203/5/136 200/3/135 199/4/135 -f 198/8/19 204/7/18 202/6/18 -f 202/6/18 199/4/18 198/8/19 -f 195/9/137 196/10/138 203/5/138 -f 203/5/138 202/6/139 195/9/139 -f 197/11/18 195/9/18 202/6/18 -f 202/6/24 204/12/24 197/11/18 -f 205/1/1 206/2/1 207/3/1 -f 207/3/1 208/4/1 205/1/1 -f 209/5/140 210/6/141 208/4/142 -f 208/4/142 207/3/44 209/5/140 -f 210/6/143 211/7/143 205/8/143 -f 205/8/143 208/4/144 210/6/143 -f 212/9/145 210/6/145 209/5/47 -f 209/5/47 213/10/47 212/9/145 -f 214/11/143 211/12/143 210/6/143 -f 210/6/143 212/9/146 214/11/146 -f 215/1/8 216/4/8 217/3/8 -f 217/3/8 218/2/8 215/1/8 -f 216/4/147 219/6/148 220/5/149 -f 220/5/149 217/3/49 216/4/147 -f 215/8/143 221/7/143 219/6/143 -f 219/6/143 216/4/143 215/8/143 -f 212/9/150 213/10/52 220/5/52 -f 220/5/52 219/6/150 212/9/150 -f 214/11/143 212/9/143 219/6/143 -f 219/6/143 221/12/143 214/11/143 -f 222/1/1 223/2/1 224/3/1 -f 224/3/1 225/4/1 222/1/1 -f 226/5/151 227/6/152 225/4/153 -f 225/4/153 224/3/154 226/5/151 -f 227/6/34 228/7/34 222/8/34 -f 222/8/34 225/4/34 227/6/34 -f 229/9/155 227/6/155 226/5/156 -f 226/5/156 230/10/157 229/9/155 -f 231/11/34 228/12/34 227/6/34 -f 227/6/34 229/9/34 231/11/34 -f 232/1/8 233/4/8 234/3/8 -f 234/3/8 235/2/8 232/1/8 -f 233/4/158 236/6/159 237/5/160 -f 237/5/160 234/3/161 233/4/158 -f 232/8/34 238/7/34 236/6/34 -f 236/6/34 233/4/34 232/8/34 -f 229/9/162 230/10/163 237/5/164 -f 237/5/164 236/6/162 229/9/162 -f 231/11/34 229/9/34 236/6/34 -f 236/6/34 238/12/34 231/11/34 -f 239/1/1 240/2/1 241/3/1 -f 241/3/1 242/4/1 239/1/1 -f 243/5/165 244/6/166 242/4/167 -f 242/4/167 241/3/153 243/5/165 -f 244/6/34 245/7/34 239/8/34 -f 239/8/34 242/4/34 244/6/34 -f 246/9/156 244/6/168 243/5/169 -f 243/5/169 247/10/169 246/9/170 -f 248/11/34 245/12/34 244/6/34 -f 244/6/34 246/9/34 248/11/34 -f 249/1/8 250/4/8 251/3/8 -f 251/3/8 252/2/8 249/1/8 -f 250/4/161 253/6/171 254/5/172 -f 254/5/172 251/3/158 250/4/161 -f 249/8/34 255/7/34 253/6/34 -f 253/6/34 250/4/34 249/8/34 -f 246/9/164 247/10/173 254/5/173 -f 254/5/173 253/6/174 246/9/175 -f 248/11/34 246/9/34 253/6/34 -f 253/6/176 255/12/176 248/11/34 -f 256/1/1 257/2/1 258/3/1 -f 258/3/1 259/4/1 256/1/1 -f 260/5/177 261/6/82 259/4/92 -f 259/4/92 258/3/178 260/5/177 -f 261/6/179 262/7/179 256/8/180 -f 256/8/180 259/4/179 261/6/179 -f 263/9/85 261/6/85 260/5/181 -f 260/5/181 264/10/182 263/9/84 -f 265/11/179 262/12/179 261/6/179 -f 261/6/179 263/9/179 265/11/179 -f 266/1/8 267/4/8 268/3/8 -f 268/3/8 269/2/8 266/1/8 -f 267/4/87 270/6/89 271/5/183 -f 271/5/183 268/3/184 267/4/87 -f 266/8/180 272/7/179 270/6/179 -f 270/6/179 267/4/179 266/8/180 -f 263/9/91 264/10/185 271/5/185 -f 271/5/186 270/6/90 263/9/90 -f 265/11/179 263/9/179 270/6/179 -f 270/6/179 272/12/179 265/11/179 -f 273/1/187 274/2/187 275/3/187 -f 275/3/187 276/4/187 273/1/187 -f 277/5/188 278/6/189 276/4/189 -f 276/4/189 275/3/188 277/5/188 -f 278/6/190 279/7/190 273/8/190 -f 273/8/190 276/4/190 278/6/190 -f 280/9/191 278/6/192 277/5/193 -f 277/5/193 281/10/194 280/9/191 -f 282/11/190 279/12/190 278/6/190 -f 278/6/190 280/9/190 282/11/190 -f 283/1/195 284/4/195 285/3/195 -f 285/3/195 286/2/195 283/1/195 -f 284/4/196 287/6/196 288/5/197 -f 288/5/197 285/3/197 284/4/196 -f 283/8/190 289/7/190 287/6/190 -f 287/6/190 284/4/190 283/8/190 -f 280/9/198 281/10/199 288/5/199 -f 288/5/199 287/6/198 280/9/198 -f 282/11/190 280/9/190 287/6/190 -f 287/6/190 289/12/190 282/11/190 -f 290/1/187 291/2/187 292/3/187 -f 292/3/187 293/4/187 290/1/187 -f 294/5/200 295/6/200 293/4/200 -f 293/4/200 292/3/200 294/5/200 -f 295/6/201 296/7/201 290/8/201 -f 290/8/201 293/4/201 295/6/201 -f 297/9/202 295/6/202 294/5/203 -f 294/5/203 298/10/204 297/9/202 -f 299/11/201 296/12/201 295/6/201 -f 295/6/201 297/9/201 299/11/201 -f 300/1/195 301/4/195 302/3/195 -f 302/3/195 303/2/195 300/1/195 -f 301/4/205 304/6/205 305/5/205 -f 305/5/205 302/3/205 301/4/205 -f 300/8/201 306/7/201 304/6/201 -f 304/6/201 301/4/201 300/8/201 -f 297/9/206 298/10/206 305/5/207 -f 305/5/207 304/6/206 297/9/206 -f 299/11/201 297/9/201 304/6/201 -f 304/6/201 306/12/201 299/11/201 -f 307/1/187 308/2/187 309/3/187 -f 309/3/187 310/4/187 307/1/187 -f 311/5/208 312/6/208 310/4/208 -f 310/4/208 309/3/208 311/5/208 -f 312/6/209 313/7/210 307/8/210 -f 307/8/210 310/4/210 312/6/209 -f 314/9/211 312/6/212 311/5/213 -f 311/5/213 315/10/213 314/9/211 -f 316/11/210 313/12/210 312/6/209 -f 312/6/209 314/9/210 316/11/210 -f 317/1/195 318/4/195 319/3/195 -f 319/3/195 320/2/195 317/1/195 -f 318/4/214 321/6/214 322/5/214 -f 322/5/214 319/3/214 318/4/214 -f 317/8/210 323/7/210 321/6/209 -f 321/6/209 318/4/210 317/8/210 -f 314/9/215 315/10/215 322/5/215 -f 322/5/215 321/6/216 314/9/215 -f 316/11/210 314/9/210 321/6/209 -f 321/6/209 323/12/210 316/11/210 -f 324/1/195 325/2/195 326/3/195 -f 326/3/195 327/4/195 324/1/195 -f 328/5/217 329/6/217 327/4/217 -f 327/4/217 326/3/217 328/5/217 -f 329/6/218 330/7/218 324/8/218 -f 324/8/218 327/4/218 329/6/218 -f 331/9/219 329/6/219 328/5/220 -f 328/5/220 332/10/221 331/9/219 -f 333/11/218 330/12/218 329/6/218 -f 329/6/218 331/9/218 333/11/218 -f 334/1/187 335/4/187 336/3/187 -f 336/3/187 337/2/187 334/1/187 -f 335/4/222 338/6/222 339/5/222 -f 339/5/222 336/3/222 335/4/222 -f 334/8/218 340/7/218 338/6/218 -f 338/6/218 335/4/218 334/8/218 -f 331/9/223 332/10/224 339/5/225 -f 339/5/225 338/6/225 331/9/223 -f 333/11/218 331/9/218 338/6/218 -f 338/6/218 340/12/218 333/11/218 -f 341/1/195 342/2/195 343/3/195 -f 343/3/195 344/4/195 341/1/195 -f 345/5/217 346/6/217 344/4/217 -f 344/4/217 343/3/217 345/5/217 -f 346/6/226 347/7/226 341/8/226 -f 341/8/226 344/4/226 346/6/226 -f 348/9/219 346/6/219 345/5/220 -f 345/5/220 349/10/220 348/9/219 -f 350/11/218 347/12/226 346/6/226 -f 346/6/226 348/9/226 350/11/218 -f 351/1/187 352/4/187 353/3/187 -f 353/3/187 354/2/187 351/1/187 -f 352/4/222 355/6/222 356/5/222 -f 356/5/222 353/3/227 352/4/222 -f 351/8/226 357/7/226 355/6/226 -f 355/6/226 352/4/226 351/8/226 -f 348/9/223 349/10/223 356/5/225 -f 356/5/225 355/6/225 348/9/223 -f 350/11/218 348/9/226 355/6/226 -f 355/6/226 357/12/226 350/11/218 -f 358/1/195 359/2/195 360/3/195 -f 360/3/195 361/4/195 358/1/195 -f 362/5/228 363/6/217 361/4/217 -f 361/4/217 360/3/228 362/5/228 -f 363/6/226 364/7/226 358/8/226 -f 358/8/226 361/4/226 363/6/226 -f 365/9/219 363/6/219 362/5/229 -f 362/5/229 366/10/230 365/9/219 -f 367/11/218 364/12/226 363/6/226 -f 363/6/226 365/9/226 367/11/218 -f 368/1/187 369/4/187 370/3/187 -f 370/3/187 371/2/187 368/1/187 -f 369/4/222 372/6/222 373/5/231 -f 373/5/231 370/3/231 369/4/222 -f 368/8/226 374/7/226 372/6/226 -f 372/6/226 369/4/226 368/8/226 -f 365/9/223 366/10/232 373/5/233 -f 373/5/233 372/6/225 365/9/223 -f 367/11/218 365/9/226 372/6/226 -f 372/6/226 374/12/226 367/11/218 -f 375/13/234 376/14/235 377/15/235 -f 377/15/236 378/16/237 375/13/237 -f 379/17/238 380/18/238 381/19/239 -f 381/19/240 382/20/241 379/17/242 -f 382/20/243 381/19/244 376/18/245 -f 376/18/246 383/17/247 382/20/248 -f 383/17/249 376/18/249 375/21/250 -f 375/21/251 384/22/252 383/17/253 -f 377/15/254 385/23/255 386/24/255 -f 386/24/256 378/16/257 377/15/258 -f 387/13/259 388/25/259 389/26/259 -f 389/26/259 390/16/259 387/13/259 -f 391/22/260 392/27/260 388/28/260 -f 388/28/260 387/21/260 391/22/260 -f 390/16/261 389/26/261 393/29/262 -f 393/29/263 386/24/264 390/16/265 -f 394/25/266 375/13/266 378/16/266 -f 378/16/266 395/26/266 394/25/266 -f 384/22/267 375/21/267 394/28/267 -f 394/28/267 396/27/267 384/22/267 -f 378/16/268 386/24/269 393/29/270 -f 393/29/271 395/26/272 378/16/272 -f 380/14/273 387/13/273 390/16/273 -f 390/16/274 397/15/275 380/14/275 -f 379/17/260 391/22/260 387/21/260 -f 387/21/276 380/18/277 379/17/277 -f 397/15/278 390/16/279 386/24/280 -f 386/24/281 385/23/282 397/15/283 -f 398/30/284 399/31/284 400/32/285 -f 400/32/286 401/33/286 398/30/286 -f 402/17/287 403/20/288 404/19/289 -f 404/19/290 405/18/291 402/17/291 -f 403/20/292 406/17/293 399/18/293 -f 399/18/294 404/19/295 403/20/296 -f 406/17/297 407/22/298 400/21/298 -f 400/21/299 399/18/299 406/17/299 -f 408/34/300 409/35/301 398/30/302 -f 398/30/303 401/33/303 408/34/304 -f 389/26/259 388/25/259 410/32/259 -f 410/32/259 411/33/259 389/26/259 -f 388/28/260 392/27/260 412/22/260 -f 412/22/260 410/21/260 388/28/260 -f 393/29/262 389/26/261 411/33/261 -f 411/33/305 408/34/306 393/29/307 -f 401/33/266 400/32/266 394/25/266 -f 394/25/266 395/26/266 401/33/266 -f 407/22/267 396/27/267 394/28/267 -f 394/28/267 400/21/267 407/22/267 -f 401/33/272 395/26/272 393/29/271 -f 393/29/308 408/34/309 401/33/310 -f 411/33/311 410/32/311 405/31/312 -f 405/31/313 413/30/313 411/33/313 -f 410/21/260 412/22/260 402/17/260 -f 402/17/314 405/18/314 410/21/314 -f 408/34/315 411/33/316 413/30/317 -f 413/30/318 409/35/319 408/34/320 -f 404/36/321 399/37/322 398/30/322 -f 398/30/322 409/35/323 404/36/321 -f 404/36/324 409/35/325 413/30/326 -f 413/30/326 405/37/327 404/36/324 -f 397/15/328 385/23/329 381/38/330 -f 381/38/330 380/39/331 397/15/328 -f 377/15/332 376/39/332 381/38/333 -f 381/38/333 385/23/334 377/15/332 -f 414/40/335 415/41/335 416/42/335 -f 416/42/336 417/43/337 414/40/338 -f 418/44/339 419/45/340 420/46/341 -f 420/46/342 421/47/342 418/44/343 -f 421/47/344 420/46/344 415/45/345 -f 415/45/346 422/44/347 421/47/348 -f 422/44/349 415/45/349 414/48/349 -f 414/48/350 423/49/350 422/44/351 -f 416/50/352 424/51/353 425/52/354 -f 425/52/355 417/53/356 416/50/356 -f 426/40/357 427/54/357 428/55/357 -f 428/55/357 429/43/357 426/40/357 -f 430/49/358 431/56/358 427/57/358 -f 427/57/358 426/48/358 430/49/358 -f 429/53/359 428/58/359 432/59/360 -f 432/59/361 425/52/362 429/53/363 -f 433/54/364 414/40/364 417/43/364 -f 417/43/364 434/55/364 433/54/364 -f 423/49/365 414/48/365 433/57/365 -f 433/57/365 435/56/365 423/49/365 -f 417/53/366 425/52/367 432/59/368 -f 432/59/369 434/58/370 417/53/370 -f 419/41/371 426/40/371 429/43/372 -f 429/43/373 436/42/373 419/41/373 -f 418/44/358 430/49/358 426/48/358 -f 426/48/374 419/45/374 418/44/375 -f 436/50/376 429/53/377 425/52/378 -f 425/52/379 424/51/380 436/50/381 -f 436/60/382 424/61/383 420/62/384 -f 420/62/384 419/63/382 436/60/382 -f 416/60/385 415/63/385 420/62/386 -f 420/62/386 424/61/387 416/60/385 -f 437/64/388 438/65/388 439/66/389 -f 439/66/389 440/67/389 437/64/388 -f 441/68/390 437/69/390 440/70/390 -f 440/70/390 442/71/390 441/68/390 -f 443/64/391 441/65/391 442/66/391 -f 442/66/391 444/67/391 443/64/391 -f 443/68/392 444/71/393 439/70/393 -f 439/70/393 438/69/392 443/68/392 -f 445/72/394 440/67/389 439/66/389 -f 439/66/389 446/73/394 445/72/394 -f 442/71/395 440/70/395 445/74/396 -f 445/74/397 447/75/397 442/71/398 -f 448/72/399 444/67/400 442/66/400 -f 442/66/400 447/73/399 448/72/399 -f 446/74/401 439/70/393 444/71/393 -f 444/71/393 448/75/402 446/74/401 -f 449/76/403 450/77/403 451/78/403 -f 451/78/403 452/79/403 449/76/403 -f 452/79/8 451/78/8 453/80/8 -f 453/80/8 454/81/8 452/79/8 -f 455/78/1 456/79/1 457/81/1 -f 457/81/1 458/80/1 455/78/1 -f 449/76/187 459/82/187 457/83/187 -f 457/83/187 456/79/187 449/76/187 -f 456/79/403 455/78/403 450/77/403 -f 450/77/403 449/76/403 456/79/403 -f 452/79/187 454/83/187 459/82/187 -f 459/82/187 449/76/187 452/79/187 -f 460/84/187 461/85/187 462/86/187 -f 462/86/187 463/87/187 460/84/187 -f 464/88/1 465/89/1 466/90/1 -f 466/90/1 467/91/1 464/88/1 -f 468/92/404 469/93/405 470/94/405 -f 470/94/405 471/95/404 468/92/404 -f 472/89/8 473/88/8 474/91/8 -f 474/91/8 475/90/8 472/89/8 -f 476/96/403 477/97/406 478/98/406 -f 478/98/406 479/99/403 476/96/403 -f 480/100/187 481/101/187 482/102/187 -f 471/103/187 470/104/187 483/105/187 -f 483/105/187 484/106/187 471/103/187 -f 485/102/187 486/101/187 487/100/187 -f 488/107/187 487/100/187 486/101/187 -f 486/101/187 489/108/187 488/107/187 -f 490/109/187 463/87/187 462/86/187 -f 462/86/187 491/110/187 490/109/187 -f 492/111/407 468/92/404 471/95/404 -f 471/95/404 493/112/407 492/111/407 -f 494/97/408 476/96/403 479/99/403 -f 479/99/403 495/98/409 494/97/408 -f 471/103/187 484/106/187 496/105/187 -f 496/105/187 493/104/187 471/103/187 -f 488/107/187 489/108/187 481/101/187 -f 481/101/187 480/100/187 488/107/187 -f 497/113/8 461/114/8 460/115/8 -f 460/115/8 483/116/8 497/113/8 -f 483/116/410 460/115/410 463/117/411 -f 463/117/411 484/118/411 483/116/410 -f 484/118/412 463/117/412 490/119/413 -f 490/119/413 496/120/413 484/118/412 -f 496/120/1 490/119/1 491/121/1 -f 491/121/1 498/122/1 496/120/1 -f 498/123/414 491/124/414 462/125/415 -f 462/125/415 499/126/415 498/123/414 -f 499/126/416 462/125/416 461/124/417 -f 461/124/417 497/123/417 499/126/416 -f 493/104/187 496/105/187 498/127/187 -f 498/127/187 500/128/187 493/104/187 -f 500/129/8 501/130/8 492/111/8 -f 492/111/8 493/112/8 500/129/8 -f 469/93/1 502/131/1 503/132/1 -f 503/132/1 470/94/1 469/93/1 -f 503/128/187 497/127/187 483/105/187 -f 483/105/187 470/104/187 503/128/187 -f 466/90/1 504/89/1 505/88/1 -f 505/88/1 467/91/1 466/90/1 -f 503/133/418 482/134/418 481/135/419 -f 481/135/419 497/123/419 503/133/418 -f 497/123/417 481/135/417 489/136/416 -f 489/136/416 499/126/416 497/123/417 -f 499/126/415 489/136/415 486/135/414 -f 486/135/414 498/123/414 499/126/415 -f 498/123/420 486/135/420 485/134/420 -f 485/134/420 500/133/420 498/123/420 -f 474/91/8 506/88/8 507/89/8 -f 507/89/8 475/90/8 474/91/8 -f 478/98/406 487/137/406 488/138/421 -f 488/138/421 479/99/421 478/98/406 -f 479/99/422 488/138/422 480/137/409 -f 480/137/409 495/98/409 479/99/422 -f 502/139/404 464/140/404 467/141/404 -f 467/141/404 503/133/404 502/139/404 -f 503/133/404 467/141/404 505/142/404 -f 505/142/404 482/134/404 503/133/404 -f 482/102/187 505/143/187 504/144/187 -f 504/144/187 480/100/187 482/102/187 -f 480/137/403 504/145/403 466/146/403 -f 466/146/403 495/98/403 480/137/403 -f 495/98/403 466/146/403 465/147/403 -f 465/147/403 494/97/403 495/98/403 -f 477/97/403 472/147/403 475/146/403 -f 475/146/403 478/98/403 477/97/403 -f 478/98/403 475/146/403 507/145/403 -f 507/145/403 487/137/403 478/98/403 -f 487/100/187 507/144/187 506/143/187 -f 506/143/187 485/102/187 487/100/187 -f 485/134/404 506/142/404 474/141/404 -f 474/141/404 500/133/404 485/134/404 -f 500/133/404 474/141/404 473/140/404 -f 473/140/404 501/139/404 500/133/404 -f 508/148/187 509/149/187 510/150/187 -f 510/150/187 511/151/187 508/148/187 -f 512/152/423 513/153/403 514/154/403 -f 514/154/403 515/155/423 512/152/423 -f 516/156/8 517/157/8 513/158/8 -f 513/158/8 512/159/8 516/156/8 -f 518/155/424 519/154/404 517/153/404 -f 517/153/404 516/152/424 518/155/424 -f 510/160/425 509/161/425 514/154/403 -f 514/154/403 513/153/403 510/160/425 -f 511/162/8 510/163/8 513/158/8 -f 513/158/8 517/157/8 511/162/8 -f 508/161/426 511/160/426 517/153/404 -f 517/153/404 519/154/404 508/161/426 -f 520/148/187 521/151/187 522/150/187 -f 522/150/187 523/149/187 520/148/187 -f 524/152/423 525/155/423 526/154/403 -f 526/154/403 527/153/403 524/152/423 -f 528/156/1 524/159/1 527/158/1 -f 527/158/1 529/157/1 528/156/1 -f 530/155/424 528/152/424 529/153/404 -f 529/153/404 531/154/404 530/155/424 -f 522/160/425 527/153/403 526/154/403 -f 526/154/403 523/161/425 522/160/425 -f 521/162/1 529/157/1 527/158/1 -f 527/158/1 522/163/1 521/162/1 -f 520/161/426 531/154/404 529/153/404 -f 529/153/404 521/160/426 520/161/426 -f 532/164/427 533/165/428 534/166/428 -f 534/166/428 535/167/427 532/164/427 -f 536/168/429 537/169/430 533/170/430 -f 533/170/430 532/171/431 536/168/432 -f 538/164/433 539/165/434 537/166/434 -f 537/166/434 536/167/433 538/164/433 -f 535/168/435 534/169/436 539/170/436 -f 539/170/436 538/171/435 535/168/435 -f 540/172/437 541/173/438 542/174/438 -f 542/174/438 543/175/437 540/172/437 -f 543/176/439 542/177/440 544/178/440 -f 544/178/440 545/179/439 543/176/439 -f 545/172/195 544/173/195 546/174/195 -f 546/174/195 547/175/195 545/172/195 -f 547/179/441 546/178/442 541/177/442 -f 541/177/442 540/176/441 547/179/441 -f 548/180/443 549/181/443 550/182/444 -f 550/182/444 551/183/444 548/180/443 -f 549/184/445 552/185/445 553/186/446 -f 553/186/446 550/187/445 549/184/445 -f 552/180/447 554/181/447 555/182/448 -f 555/182/448 553/183/448 552/180/447 -f 554/184/449 548/185/449 551/186/450 -f 551/186/450 555/187/450 554/184/449 -f 533/165/451 551/183/452 550/182/452 -f 550/182/452 534/166/451 533/165/451 -f 534/169/453 550/187/453 553/186/453 -f 553/186/453 539/170/453 534/169/453 -f 539/165/454 553/183/455 555/182/455 -f 555/182/455 537/166/454 539/165/454 -f 537/169/456 555/187/457 551/186/457 -f 551/186/457 533/170/457 537/169/456 -f 549/188/458 548/189/458 542/174/438 -f 542/174/438 541/173/438 549/188/458 -f 548/190/459 554/191/459 544/178/440 -f 544/178/440 542/177/440 548/190/459 -f 554/188/460 552/189/460 546/174/195 -f 546/174/195 544/173/195 554/188/460 -f 552/191/461 549/190/461 541/177/442 -f 541/177/442 546/178/442 552/191/461 -f 556/164/427 557/165/428 558/166/428 -f 558/166/428 559/167/427 556/164/427 -f 560/168/430 561/169/462 557/170/462 -f 557/170/462 556/171/430 560/168/430 -f 562/164/433 563/165/434 561/166/434 -f 561/166/434 560/167/433 562/164/433 -f 559/168/463 558/169/435 563/170/435 -f 563/170/435 562/171/463 559/168/463 -f 564/172/437 565/173/438 566/174/438 -f 566/174/438 567/175/437 564/172/437 -f 567/176/439 566/177/440 568/178/440 -f 568/178/440 569/179/439 567/176/439 -f 569/175/195 568/174/195 570/173/195 -f 570/173/195 571/172/195 569/175/195 -f 571/179/464 570/178/442 565/177/442 -f 565/177/442 564/176/464 571/179/464 -f 572/180/443 573/181/443 574/182/444 -f 574/182/444 575/183/444 572/180/443 -f 573/184/446 576/185/465 577/186/465 -f 577/186/465 574/187/465 573/184/446 -f 576/180/448 578/181/448 579/182/447 -f 579/182/447 577/183/447 576/180/448 -f 578/184/449 572/185/449 575/186/449 -f 575/186/449 579/187/449 578/184/449 -f 557/165/451 575/183/452 574/182/452 -f 574/182/452 558/166/451 557/165/451 -f 558/169/466 574/187/467 577/186/466 -f 577/186/466 563/170/467 558/169/466 -f 563/165/455 577/183/454 579/182/454 -f 579/182/454 561/166/455 563/165/455 -f 561/169/468 579/187/468 575/186/468 -f 575/186/468 557/170/468 561/169/468 -f 573/188/469 572/189/469 566/174/438 -f 566/174/438 565/173/438 573/188/469 -f 572/190/459 578/191/459 568/178/440 -f 568/178/440 566/177/440 572/190/459 -f 578/189/460 576/188/460 570/173/195 -f 570/173/195 568/174/195 578/189/460 -f 576/191/470 573/190/470 565/177/442 -f 565/177/442 570/178/442 576/191/470 -f 580/192/8 581/193/8 582/194/8 -f 582/194/8 583/195/8 580/192/8 -f 584/196/195 585/197/195 582/198/195 -f 582/198/195 581/199/195 584/196/195 -f 586/200/1 587/201/1 588/202/1 -f 588/202/1 589/203/1 586/200/1 -f 590/204/187 591/205/187 588/206/187 -f 588/206/187 587/207/187 590/204/187 -f 586/208/195 589/209/195 585/210/195 -f 585/210/195 584/211/195 586/208/195 -f 580/212/187 583/213/187 591/214/187 -f 591/214/187 590/215/187 580/212/187 -f 581/216/403 580/217/403 592/218/403 -f 592/218/403 593/219/403 581/216/403 -f 580/220/403 590/221/403 594/222/403 -f 594/222/403 592/223/403 580/220/403 -f 590/221/403 587/224/403 595/225/403 -f 595/225/403 594/222/403 590/221/403 -f 587/217/403 586/216/403 596/219/403 -f 596/219/403 595/218/403 587/217/403 -f 586/224/403 584/221/403 597/222/403 -f 597/222/403 596/225/403 586/224/403 -f 584/221/403 581/220/403 593/223/403 -f 593/223/403 597/222/403 584/221/403 -f 593/219/8 592/218/8 598/226/8 -f 598/226/8 599/227/8 593/219/8 -f 592/223/187 594/222/187 600/228/187 -f 600/228/187 598/229/187 592/223/187 -f 594/222/187 595/225/187 601/230/187 -f 601/230/187 600/228/187 594/222/187 -f 595/218/1 596/219/1 602/227/1 -f 602/227/1 601/226/1 595/218/1 -f 596/225/195 597/222/195 603/228/195 -f 603/228/195 602/230/195 596/225/195 -f 597/222/195 593/223/195 599/229/195 -f 599/229/195 603/228/195 597/222/195 -f 604/151/1 605/150/1 606/149/1 -f 606/149/1 607/148/1 604/151/1 -f 608/151/8 609/148/8 610/149/8 -f 610/149/8 611/150/8 608/151/8 -f 607/231/403 606/232/403 610/233/403 -f 610/233/403 609/234/403 607/231/403 -f 606/232/195 605/231/195 611/234/195 -f 611/234/195 610/233/195 606/232/195 -f 605/234/404 604/233/404 608/232/404 -f 608/232/404 611/231/404 605/234/404 -f 612/151/187 613/148/187 614/149/187 -f 614/149/187 615/150/187 612/151/187 -f 616/151/195 617/150/195 618/149/195 -f 618/149/195 619/148/195 616/151/195 -f 613/235/403 619/236/403 618/237/403 -f 618/237/403 614/238/403 613/235/403 -f 614/238/8 618/237/8 617/236/8 -f 617/236/8 615/235/8 614/238/8 -f 615/238/404 617/237/404 616/236/404 -f 616/236/404 612/235/404 615/238/404 -f 620/151/187 621/150/187 622/149/187 -f 622/149/187 623/148/187 620/151/187 -f 624/151/195 625/148/195 626/149/195 -f 626/149/195 627/150/195 624/151/195 -f 623/235/403 622/238/403 626/237/403 -f 626/237/403 625/236/403 623/235/403 -f 622/238/1 621/235/1 627/236/1 -f 627/236/1 626/237/1 622/238/1 -f 621/238/404 620/235/404 624/236/404 -f 624/236/404 627/237/404 621/238/404 -f 628/239/471 629/240/471 630/241/471 -f 630/241/471 631/242/471 628/239/471 -f 632/242/472 633/239/472 634/240/473 -f 634/240/473 635/241/473 632/242/472 -f 631/243/195 630/244/195 634/245/195 -f 634/245/195 633/246/195 631/243/195 -f 630/244/474 629/243/474 635/246/474 -f 635/246/474 634/245/474 630/244/474 -f 629/244/187 628/243/187 632/246/187 -f 632/246/187 635/245/187 629/244/187 -f 636/247/404 637/248/404 638/249/404 -f 638/249/404 639/250/404 636/247/404 -f 636/251/195 639/252/195 640/253/195 -f 640/253/195 641/254/195 636/251/195 -f 637/252/1 636/251/1 641/254/1 -f 641/254/1 642/253/1 637/252/1 -f 638/252/187 637/251/187 642/254/187 -f 642/254/187 643/253/187 638/252/187 -f 644/255/475 645/256/475 646/257/476 -f 646/257/476 647/258/476 644/255/475 -f 648/259/477 644/260/477 647/261/478 -f 647/261/478 649/262/478 648/259/477 -f 650/260/479 648/259/479 649/262/479 -f 649/262/479 651/261/479 650/260/479 -f 650/259/480 651/262/481 646/261/482 -f 646/261/482 645/260/480 650/259/480 -f 652/263/483 647/258/476 646/257/476 -f 646/257/476 653/264/483 652/263/483 -f 649/262/484 647/261/484 652/265/484 -f 652/265/485 654/266/485 649/262/485 -f 655/265/486 651/261/487 649/262/486 -f 649/262/486 654/266/486 655/265/486 -f 653/265/488 646/261/482 651/262/481 -f 651/262/481 655/266/489 653/265/488 -f 656/255/490 657/258/491 658/257/491 -f 658/257/491 659/256/490 656/255/490 -f 660/259/477 661/262/478 657/261/478 -f 657/261/478 656/260/477 660/259/477 -f 662/260/492 663/261/492 661/262/492 -f 661/262/492 660/259/492 662/260/492 -f 662/259/480 659/260/480 658/261/482 -f 658/261/482 663/262/493 662/259/480 -f 664/263/494 665/264/494 658/257/491 -f 658/257/491 657/258/491 664/263/494 -f 661/262/495 666/266/495 664/265/495 -f 664/265/484 657/261/484 661/262/484 -f 667/265/496 666/266/496 661/262/496 -f 661/262/496 663/261/497 667/265/496 -f 665/265/498 667/266/499 663/262/493 -f 663/262/493 658/261/482 665/265/498 -f 668/267/404 669/268/404 670/269/404 -f 670/269/404 671/270/404 668/267/404 -f 672/271/195 673/272/195 670/273/195 -f 670/273/195 669/274/195 672/271/195 -f 674/275/1 675/276/1 676/277/1 -f 676/277/1 677/278/1 674/275/1 -f 678/272/187 679/271/187 668/274/187 -f 668/274/187 671/273/187 678/272/187 -f 678/279/1 671/280/1 680/277/1 -f 680/277/1 681/276/1 678/279/1 -f 671/280/1 670/281/1 682/278/1 -f 682/278/1 680/277/1 671/280/1 -f 670/281/1 673/282/1 683/275/1 -f 683/275/1 682/278/1 670/281/1 -f 681/283/195 680/284/195 676/285/195 -f 676/285/195 675/286/195 681/283/195 -f 680/287/403 682/288/403 677/289/403 -f 677/289/403 676/290/403 680/287/403 -f 682/284/187 683/283/187 674/286/187 -f 674/286/187 677/285/187 682/284/187 -f 684/291/500 685/292/501 686/293/501 -f 686/293/501 687/294/500 684/291/500 -f 688/293/502 689/292/502 690/291/503 -f 690/291/503 691/294/503 688/293/502 -f 687/295/8 686/296/8 688/297/8 -f 688/297/8 691/298/8 687/295/8 -f 692/299/504 685/296/505 689/297/506 -f 689/297/506 693/300/1 692/299/504 -f 692/301/501 694/302/501 686/293/501 -f 686/293/501 685/292/501 692/301/501 -f 695/302/507 693/301/507 689/292/502 -f 689/292/502 688/293/502 695/302/507 -f 694/299/8 695/300/8 688/297/8 -f 688/297/8 686/296/8 694/299/8 -f 684/295/508 690/298/1 689/297/506 -f 689/297/506 685/296/505 684/295/508 -f 696/303/509 697/304/509 698/305/8 -f 698/305/8 699/306/8 696/303/509 -f 700/307/510 696/308/510 699/309/187 -f 699/309/187 701/310/187 700/307/510 -f 702/304/511 700/303/511 701/306/1 -f 701/306/1 703/305/1 702/304/511 -f 697/308/512 702/307/512 703/310/195 -f 703/310/195 698/309/195 697/308/512 -f 704/303/513 699/306/8 698/305/8 -f 698/305/8 705/304/513 704/303/513 -f 706/307/482 701/310/187 699/309/187 -f 699/309/187 704/308/482 706/307/482 -f 707/304/514 703/305/1 701/306/1 -f 701/306/1 706/303/514 707/304/514 -f 705/308/484 698/309/195 703/310/195 -f 703/310/195 707/307/484 705/308/484 -f 708/303/509 709/304/509 710/305/8 -f 710/305/8 711/306/8 708/303/509 -f 712/307/510 708/308/510 711/309/187 -f 711/309/187 713/310/187 712/307/510 -f 714/304/511 712/303/511 713/306/1 -f 713/306/1 715/305/1 714/304/511 -f 709/308/512 714/307/512 715/310/195 -f 715/310/195 710/309/195 709/308/512 -f 716/303/513 711/306/8 710/305/8 -f 710/305/8 717/304/513 716/303/513 -f 718/307/482 713/310/187 711/309/187 -f 711/309/187 716/308/482 718/307/482 -f 719/304/514 715/305/1 713/306/1 -f 713/306/1 718/303/514 719/304/514 -f 717/308/484 710/309/195 715/310/195 -f 715/310/195 719/307/484 717/308/484 -f 720/311/515 721/312/515 722/313/516 -f 722/313/516 723/314/517 720/311/515 -f 724/315/518 720/316/518 723/317/518 -f 723/317/518 725/318/518 724/315/518 -f 726/312/519 724/311/519 725/314/520 -f 725/314/520 727/313/520 726/312/519 -f 726/315/521 727/318/522 722/317/523 -f 722/317/523 721/316/521 726/315/521 -f 728/319/524 723/314/517 722/313/516 -f 722/313/516 729/320/524 728/319/524 -f 725/318/525 723/317/525 728/321/526 -f 728/321/527 730/322/527 725/318/528 -f 731/320/529 727/313/529 725/314/529 -f 725/314/529 730/319/529 731/320/529 -f 729/321/530 722/317/523 727/318/522 -f 727/318/522 731/322/531 729/321/530 -f 732/323/195 733/324/195 734/325/195 -f 734/325/195 735/326/195 732/323/195 -f 733/324/195 736/327/195 737/328/195 -f 737/328/195 734/325/195 733/324/195 -f 736/327/195 738/329/195 739/330/195 -f 739/330/195 737/328/195 736/327/195 -f 738/329/195 740/331/195 741/332/195 -f 741/332/195 739/330/195 738/329/195 -f 742/333/195 743/334/195 744/335/195 -f 744/335/195 745/336/195 742/333/195 -f 743/334/195 746/337/195 747/338/195 -f 747/338/195 744/335/195 743/334/195 -f 748/339/195 749/340/195 750/341/195 -f 750/341/195 751/342/195 748/339/195 -f 751/342/195 750/341/195 752/343/195 -f 752/343/195 753/344/195 751/342/195 -f 754/345/195 755/346/195 756/347/195 -f 756/347/195 757/348/195 754/345/195 -f 755/346/195 758/349/195 759/350/195 -f 759/350/195 756/347/195 755/346/195 -f 758/349/195 760/351/195 761/352/195 -f 761/352/195 759/350/195 758/349/195 -f 760/351/195 762/353/195 763/354/195 -f 763/354/195 761/352/195 760/351/195 -f 764/355/195 765/356/195 733/324/195 -f 733/324/195 732/323/195 764/355/195 -f 765/356/195 766/357/195 736/327/195 -f 736/327/195 733/324/195 765/356/195 -f 766/357/195 767/358/195 738/329/195 -f 738/329/195 736/327/195 766/357/195 -f 767/358/195 768/359/195 740/331/195 -f 740/331/195 738/329/195 767/358/195 -f 748/339/195 751/342/195 755/346/195 -f 755/346/195 754/345/195 748/339/195 -f 751/342/195 753/344/195 758/349/195 -f 758/349/195 755/346/195 751/342/195 -f 753/344/195 769/360/195 760/351/195 -f 760/351/195 758/349/195 753/344/195 -f 769/360/195 770/361/195 762/353/195 -f 762/353/195 760/351/195 769/360/195 -f 735/326/195 734/325/195 743/334/195 -f 743/334/195 742/333/195 735/326/195 -f 734/325/195 737/328/195 746/337/195 -f 746/337/195 743/334/195 734/325/195 -f 749/340/195 745/336/195 744/335/195 -f 744/335/195 750/341/195 749/340/195 -f 750/341/195 744/335/195 747/338/195 -f 747/338/195 752/343/195 750/341/195 -f 771/362/195 772/363/195 773/364/195 -f 773/364/195 774/365/195 771/362/195 -f 772/363/195 775/366/195 776/367/195 -f 776/367/195 773/364/195 772/363/195 -f 775/366/195 777/368/195 778/369/195 -f 778/369/195 776/367/195 775/366/195 -f 777/368/195 779/370/195 780/371/195 -f 780/371/195 778/369/195 777/368/195 -f 774/365/195 773/364/195 781/372/195 -f 781/372/195 782/373/195 774/365/195 -f 773/364/195 776/367/195 783/374/195 -f 783/374/195 781/372/195 773/364/195 -f 776/367/195 778/369/195 784/375/195 -f 784/375/195 783/374/195 776/367/195 -f 778/369/195 780/371/195 785/376/195 -f 785/376/195 784/375/195 778/369/195 -f 782/373/195 781/372/195 786/377/195 -f 786/377/195 787/378/195 782/373/195 -f 781/372/195 783/374/195 788/379/195 -f 788/379/195 786/377/195 781/372/195 -f 783/374/195 784/375/195 789/380/195 -f 789/380/195 788/379/195 783/374/195 -f 784/375/195 785/376/195 790/381/195 -f 790/381/195 789/380/195 784/375/195 -f 787/378/195 786/377/195 791/382/195 -f 791/382/195 792/383/195 787/378/195 -f 786/377/195 788/379/195 793/384/195 -f 793/384/195 791/382/195 786/377/195 -f 788/379/195 789/380/195 794/385/195 -f 794/385/195 793/384/195 788/379/195 -f 789/380/195 790/381/195 795/386/195 -f 795/386/195 794/385/195 789/380/195 -f 796/387/532 797/388/533 798/389/34 -f 798/389/34 799/390/534 796/387/532 -f 800/391/535 801/392/536 797/388/533 -f 797/388/533 796/387/532 800/391/535 -f 799/390/534 798/389/34 801/393/536 -f 801/393/536 800/394/535 799/390/534 -f 802/395/1 803/396/1 804/397/1 -f 804/387/537 803/390/534 798/389/34 -f 798/389/34 797/388/533 804/387/537 -f 802/391/538 804/387/537 797/388/533 -f 797/388/533 801/392/536 802/391/538 -f 803/390/534 802/394/538 801/393/536 -f 801/393/536 798/389/34 803/390/534 -f 805/398/1 806/399/1 807/400/1 -f 807/400/1 808/401/1 805/398/1 -f 809/402/1 810/403/1 811/399/1 -f 811/399/1 812/398/1 809/402/1 -f 810/403/1 813/404/1 814/400/1 -f 814/400/1 811/399/1 810/403/1 -f 813/404/1 815/405/1 816/401/1 -f 816/401/1 814/400/1 813/404/1 -f 815/405/1 809/402/1 812/398/1 -f 812/398/1 816/401/1 815/405/1 -f 817/406/403 810/407/403 809/408/403 -f 809/408/403 818/409/403 817/406/403 -f 819/410/187 813/411/187 810/412/187 -f 810/412/187 817/413/187 819/410/187 -f 819/406/404 820/409/404 815/408/404 -f 815/408/404 813/407/404 819/406/404 -f 818/413/195 809/412/195 815/411/195 -f 815/411/195 820/410/195 818/413/195 -f 806/414/404 805/415/404 812/416/404 -f 812/416/404 811/417/404 806/414/404 -f 805/418/187 808/419/187 816/420/187 -f 816/420/187 812/421/187 805/418/187 -f 808/415/403 807/414/403 814/417/403 -f 814/417/403 816/416/403 808/415/403 -f 807/419/195 806/418/195 811/421/195 -f 811/421/195 814/420/195 807/419/195 -f 821/422/403 822/423/403 823/424/403 -f 823/424/403 824/425/403 821/422/403 -f 825/422/404 826/425/404 827/424/404 -f 827/424/404 828/423/404 825/422/404 -f 824/426/539 823/427/540 827/428/540 -f 827/428/540 826/429/539 824/426/539 -f 823/430/541 822/431/542 828/432/542 -f 828/432/542 827/433/541 823/430/541 -f 822/427/543 821/426/544 825/429/544 -f 825/429/544 828/428/543 822/427/543 -f 829/422/403 830/423/403 831/424/403 -f 831/424/403 832/425/403 829/422/403 -f 833/422/404 834/425/404 835/424/404 -f 835/424/404 836/423/404 833/422/404 -f 832/426/545 831/427/545 835/428/545 -f 835/428/545 834/429/545 832/426/545 -f 831/430/546 830/431/546 836/432/546 -f 836/432/546 835/433/546 831/430/546 -f 830/427/547 829/426/548 833/429/548 -f 833/429/548 836/428/547 830/427/547 -f 837/255/475 838/258/476 839/257/476 -f 839/257/476 840/256/475 837/255/475 -f 841/259/549 842/262/482 838/261/482 -f 838/261/482 837/260/549 841/259/549 -f 843/260/479 844/261/479 842/262/479 -f 842/262/479 841/259/479 843/260/479 -f 843/259/550 840/260/550 839/261/478 -f 839/261/478 844/262/478 843/259/550 -f 845/263/483 846/264/483 839/257/476 -f 839/257/476 838/258/476 845/263/483 -f 842/262/551 847/266/551 845/265/551 -f 845/265/552 838/261/552 842/262/552 -f 848/265/486 847/266/486 842/262/486 -f 842/262/486 844/261/487 848/265/486 -f 846/265/553 848/266/554 844/262/478 -f 844/262/478 839/261/478 846/265/553 -f 849/255/490 850/256/490 851/257/491 -f 851/257/491 852/258/491 849/255/490 -f 853/259/549 849/260/549 852/261/482 -f 852/261/482 854/262/482 853/259/549 -f 855/260/492 853/259/492 854/262/492 -f 854/262/492 856/261/492 855/260/492 -f 855/259/550 856/262/478 851/261/478 -f 851/261/478 850/260/550 855/259/550 -f 857/263/494 852/258/491 851/257/491 -f 851/257/491 858/264/494 857/263/494 -f 854/262/552 852/261/552 857/265/552 -f 857/265/555 859/266/555 854/262/555 -f 860/265/496 856/261/497 854/262/496 -f 854/262/496 859/266/496 860/265/496 -f 858/265/556 851/261/478 856/262/478 -f 856/262/478 860/266/556 858/265/556 -f 861/434/403 862/435/403 863/436/403 -f 863/436/403 864/437/403 861/434/403 -f 863/438/8 865/439/8 866/440/8 -f 866/440/8 864/441/8 863/438/8 -f 867/442/195 868/443/195 869/444/195 -f 869/444/195 870/445/195 867/442/195 -f 862/446/1 871/447/1 869/448/1 -f 869/448/1 868/449/1 862/446/1 -f 861/443/187 864/442/187 866/445/187 -f 866/445/187 872/444/187 861/443/187 -f 868/434/403 867/437/403 863/436/403 -f 863/436/403 862/435/403 868/434/403 -f 867/450/8 870/451/8 865/452/8 -f 865/452/8 863/453/8 867/450/8 -f 861/454/1 872/455/1 871/456/1 -f 871/456/1 862/457/1 861/454/1 -f 873/148/1 874/149/1 875/150/1 -f 875/150/1 876/151/1 873/148/1 -f 877/458/557 878/459/557 874/460/557 -f 874/460/557 873/461/557 877/458/557 -f 878/462/558 879/463/558 875/464/559 -f 875/464/559 874/465/559 878/462/558 -f 879/459/560 880/458/560 876/461/560 -f 876/461/560 875/460/560 879/459/560 -f 880/463/561 877/462/561 873/465/562 -f 873/465/562 876/464/562 880/463/561 -f 881/466/563 882/467/564 883/468/565 -f 883/468/565 884/469/566 881/466/563 -f 885/469/567 886/468/568 882/467/564 -f 882/467/564 881/466/563 885/469/567 -f 887/470/8 888/471/8 881/472/8 -f 881/472/8 884/473/8 887/470/8 -f 888/471/8 889/470/8 885/473/8 -f 885/473/8 881/472/8 888/471/8 -f 890/474/569 886/475/569 885/476/569 -f 885/476/569 889/477/569 890/474/569 -f 891/470/1 892/471/1 893/472/1 -f 893/472/1 894/473/1 891/470/1 -f 892/471/1 895/470/1 896/473/1 -f 896/473/1 893/472/1 892/471/1 -f 897/474/570 883/475/570 896/476/571 -f 896/476/571 895/477/571 897/474/570 -f 891/478/572 890/479/573 898/480/574 -f 898/480/574 892/481/575 891/478/572 -f 892/481/576 898/480/577 897/479/578 -f 897/479/578 895/478/579 892/481/576 -f 893/482/580 896/483/581 883/468/565 -f 883/468/565 882/467/564 893/482/580 -f 894/483/582 893/482/580 882/467/564 -f 882/467/564 886/468/568 894/483/582 -f 891/477/583 894/476/583 886/475/584 -f 886/475/584 890/474/584 891/477/583 -f 887/477/585 884/476/585 883/475/585 -f 883/475/585 897/474/585 887/477/585 -f 889/478/586 888/481/587 898/480/574 -f 898/480/574 890/479/573 889/478/586 -f 888/481/588 887/478/589 897/479/578 -f 897/479/578 898/480/577 888/481/588 -f 899/484/187 900/485/187 901/486/187 -f 901/486/187 902/487/187 899/484/187 -f 903/488/590 902/489/590 901/486/590 -f 901/486/590 904/490/590 903/488/590 -f 900/485/591 905/491/592 904/490/593 -f 904/490/593 901/486/594 900/485/591 -f 899/492/595 906/493/595 905/491/595 -f 905/491/595 900/485/595 899/492/595 -f 903/488/590 904/490/590 907/494/590 -f 907/494/590 908/495/590 903/488/590 -f 909/496/596 907/494/597 904/490/598 -f 904/490/598 905/491/596 909/496/596 -f 910/497/595 909/496/595 905/491/595 -f 905/491/595 906/493/595 910/497/595 -f 911/484/195 912/487/195 913/486/195 -f 913/486/195 914/485/195 911/484/195 -f 913/486/590 912/489/590 915/488/590 -f 915/488/590 916/490/590 913/486/590 -f 916/490/599 917/491/600 914/485/600 -f 914/485/600 913/486/599 916/490/599 -f 917/491/595 918/493/595 911/492/595 -f 911/492/595 914/485/595 917/491/595 -f 915/488/590 908/495/590 907/494/590 -f 907/494/590 916/490/590 915/488/590 -f 909/496/601 917/491/601 916/490/602 -f 916/490/602 907/494/603 909/496/601 -f 910/497/595 918/493/595 917/491/595 -f 917/491/595 909/496/595 910/497/595 -f 919/484/187 920/485/187 921/486/187 -f 921/486/187 922/487/187 919/484/187 -f 923/488/604 922/489/604 921/486/604 -f 921/486/604 924/490/604 923/488/604 -f 920/485/188 925/491/188 924/490/188 -f 924/490/188 921/486/188 920/485/188 -f 919/492/605 926/493/605 925/491/605 -f 925/491/605 920/485/605 919/492/605 -f 923/488/604 924/490/604 927/494/604 -f 927/494/604 928/495/604 923/488/604 -f 929/496/193 927/494/193 924/490/193 -f 924/490/193 925/491/193 929/496/193 -f 930/497/605 929/496/605 925/491/605 -f 925/491/605 926/493/605 930/497/605 -f 931/484/195 932/487/195 933/486/195 -f 933/486/195 934/485/195 931/484/195 -f 933/486/604 932/489/604 935/488/604 -f 935/488/604 936/490/604 933/486/604 -f 936/490/197 937/491/197 934/485/197 -f 934/485/197 933/486/197 936/490/197 -f 937/491/605 938/493/605 931/492/605 -f 931/492/605 934/485/605 937/491/605 -f 935/488/604 928/495/604 927/494/604 -f 927/494/604 936/490/604 935/488/604 -f 929/496/606 937/491/606 936/490/606 -f 936/490/606 927/494/606 929/496/606 -f 930/497/605 938/493/605 937/491/605 -f 937/491/605 929/496/605 930/497/605 -f 939/484/1 940/485/1 941/486/1 -f 941/486/1 942/487/1 939/484/1 -f 943/488/46 942/489/46 941/486/46 -f 941/486/46 944/490/46 943/488/46 -f 940/485/607 945/491/140 944/490/140 -f 944/490/140 941/486/44 940/485/607 -f 939/492/608 946/493/608 945/491/608 -f 945/491/608 940/485/608 939/492/608 -f 943/488/46 944/490/46 947/494/48 -f 947/494/46 948/495/46 943/488/46 -f 949/496/47 947/494/47 944/490/47 -f 944/490/47 945/491/47 949/496/609 -f 950/497/608 949/496/608 945/491/608 -f 945/491/608 946/493/608 950/497/608 -f 951/484/8 952/487/8 953/486/8 -f 953/486/8 954/485/8 951/484/8 -f 953/486/46 952/489/46 955/488/46 -f 955/488/46 956/490/46 953/486/46 -f 956/490/149 957/491/149 954/485/147 -f 954/485/147 953/486/49 956/490/149 -f 957/491/608 958/493/608 951/492/608 -f 951/492/608 954/485/608 957/491/608 -f 955/488/46 948/495/46 947/494/46 -f 947/494/46 956/490/46 955/488/46 -f 949/496/610 957/491/610 956/490/610 -f 956/490/52 947/494/52 949/496/52 -f 950/497/611 958/493/611 957/491/611 -f 957/491/608 949/496/608 950/497/608 -f 959/484/1 960/485/1 961/486/1 -f 961/486/1 962/487/1 959/484/1 -f 963/488/46 962/489/46 961/486/46 -f 961/486/46 964/490/46 963/488/46 -f 960/485/607 965/491/140 964/490/140 -f 964/490/140 961/486/44 960/485/607 -f 959/492/608 966/493/608 965/491/608 -f 965/491/608 960/485/608 959/492/608 -f 963/488/46 964/490/46 967/494/48 -f 967/494/46 968/495/46 963/488/46 -f 969/496/47 967/494/47 964/490/47 -f 964/490/47 965/491/47 969/496/609 -f 970/497/608 969/496/608 965/491/608 -f 965/491/608 966/493/608 970/497/608 -f 971/484/8 972/487/8 973/486/8 -f 973/486/8 974/485/8 971/484/8 -f 973/486/46 972/489/46 975/488/46 -f 975/488/46 976/490/46 973/486/46 -f 976/490/149 977/491/149 974/485/612 -f 974/485/612 973/486/49 976/490/149 -f 977/491/608 978/493/608 971/492/608 -f 971/492/608 974/485/608 977/491/608 -f 975/488/46 968/495/46 967/494/46 -f 967/494/46 976/490/46 975/488/46 -f 969/496/610 977/491/610 976/490/610 -f 976/490/52 967/494/52 969/496/52 -f 970/497/611 978/493/611 977/491/611 -f 977/491/608 969/496/608 970/497/608 -f 979/148/187 980/149/187 981/150/187 -f 981/150/187 982/151/187 979/148/187 -f 983/458/613 984/459/613 980/460/614 -f 980/460/614 979/461/614 983/458/613 -f 984/462/615 985/463/615 981/464/616 -f 981/464/616 980/465/616 984/462/615 -f 985/459/617 986/458/617 982/461/618 -f 982/461/618 981/460/618 985/459/617 -f 986/463/619 983/462/619 979/465/620 -f 979/465/620 982/464/620 986/463/619 -f 987/484/1 988/485/1 989/486/1 -f 989/486/1 990/487/1 987/484/1 -f 991/488/143 990/489/143 989/486/143 -f 989/486/143 992/490/621 991/488/143 -f 988/485/45 993/491/622 992/490/623 -f 992/490/623 989/486/45 988/485/45 -f 987/492/624 994/493/624 993/491/624 -f 993/491/624 988/485/624 987/492/624 -f 991/488/143 992/490/621 995/494/146 -f 995/494/143 996/495/143 991/488/143 -f 997/496/47 995/494/47 992/490/47 -f 992/490/47 993/491/47 997/496/47 -f 998/497/624 997/496/624 993/491/624 -f 993/491/624 994/493/624 998/497/624 -f 999/484/8 1000/487/8 1001/486/8 -f 1001/486/8 1002/485/8 999/484/8 -f 1001/486/143 1000/489/143 1003/488/143 -f 1003/488/143 1004/490/621 1001/486/143 -f 1004/490/625 1005/491/626 1002/485/612 -f 1002/485/612 1001/486/612 1004/490/625 -f 1005/491/624 1006/493/624 999/492/624 -f 999/492/624 1002/485/624 1005/491/624 -f 1003/488/143 996/495/143 995/494/143 -f 995/494/143 1004/490/621 1003/488/143 -f 997/496/52 1005/491/52 1004/490/627 -f 1004/490/627 995/494/52 997/496/52 -f 998/497/628 1006/493/628 1005/491/628 -f 1005/491/624 997/496/624 998/497/624 -f 1007/148/187 1008/149/187 1009/150/187 -f 1009/150/187 1010/151/187 1007/148/187 -f 1011/458/629 1012/459/629 1008/460/614 -f 1008/460/614 1007/461/614 1011/458/629 -f 1012/462/615 1013/463/615 1009/464/615 -f 1009/464/615 1008/465/615 1012/462/615 -f 1013/459/630 1014/458/630 1010/461/618 -f 1010/461/618 1009/460/618 1013/459/630 -f 1014/463/631 1011/462/631 1007/465/620 -f 1007/465/620 1010/464/620 1014/463/631 -f 1015/484/1 1016/487/1 1017/486/1 -f 1017/486/1 1018/485/1 1015/484/1 -f 1019/488/632 1020/490/632 1017/486/632 -f 1017/486/632 1016/489/632 1019/488/632 -f 1018/485/80 1017/486/633 1020/490/79 -f 1020/490/79 1021/491/634 1018/485/80 -f 1015/492/179 1018/485/179 1021/491/179 -f 1021/491/179 1022/493/179 1015/492/179 -f 1019/488/632 1023/495/632 1024/494/632 -f 1024/494/635 1020/490/632 1019/488/632 -f 1025/496/84 1021/491/636 1020/490/636 -f 1020/490/85 1024/494/85 1025/496/85 -f 1026/497/179 1022/493/179 1021/491/179 -f 1021/491/179 1025/496/179 1026/497/179 -f 1027/484/8 1028/485/8 1029/486/8 -f 1029/486/8 1030/487/8 1027/484/8 -f 1029/486/632 1031/490/632 1032/488/632 -f 1032/488/632 1030/489/632 1029/486/632 -f 1031/490/88 1029/486/88 1028/485/88 -f 1028/485/88 1033/491/637 1031/490/88 -f 1033/491/179 1028/485/179 1027/492/179 -f 1027/492/179 1034/493/179 1033/491/179 -f 1032/488/632 1031/490/632 1024/494/632 -f 1024/494/632 1023/495/632 1032/488/632 -f 1025/496/90 1024/494/90 1031/490/90 -f 1031/490/91 1033/491/91 1025/496/91 -f 1026/497/179 1025/496/179 1033/491/179 -f 1033/491/638 1034/493/638 1026/497/638 -f 1035/148/8 1036/151/8 1037/150/8 -f 1037/150/8 1038/149/8 1035/148/8 -f 1039/458/639 1035/461/639 1038/460/639 -f 1038/460/639 1040/459/639 1039/458/639 -f 1040/462/640 1038/465/640 1037/464/640 -f 1037/464/640 1041/463/640 1040/462/640 -f 1041/459/641 1037/460/641 1036/461/641 -f 1036/461/641 1042/458/641 1041/459/641 -f 1042/463/642 1036/464/642 1035/465/642 -f 1035/465/642 1039/462/642 1042/463/642 -f 1043/149/195 1044/150/195 1045/151/195 -f 1045/151/195 1046/148/195 1043/149/195 -f 1047/148/187 1048/149/187 1049/150/187 -f 1049/150/187 1050/151/187 1047/148/187 -f 1045/160/643 1051/153/403 1052/154/403 -f 1052/154/403 1046/161/643 1045/160/643 -f 1044/162/8 1053/157/8 1051/158/8 -f 1051/158/8 1045/163/8 1044/162/8 -f 1043/161/644 1054/154/404 1053/153/404 -f 1053/153/404 1044/160/644 1043/161/644 -f 1049/152/645 1048/155/645 1052/154/403 -f 1052/154/403 1051/153/403 1049/152/645 -f 1050/156/8 1049/159/8 1051/158/8 -f 1051/158/8 1053/157/8 1050/156/8 -f 1047/155/646 1050/152/646 1053/153/404 -f 1053/153/404 1054/154/404 1047/155/646 -f 1055/498/552 1056/499/552 1057/500/482 -f 1057/500/482 1058/501/482 1055/498/552 -f 1059/502/497 1055/503/497 1058/504/497 -f 1058/504/497 1060/505/497 1059/502/497 -f 1061/499/534 1059/498/534 1060/501/534 -f 1060/501/534 1062/500/534 1061/499/534 -f 1061/502/647 1062/505/648 1057/504/479 -f 1057/504/479 1056/503/647 1061/502/647 -f 1063/506/103 1058/501/482 1057/500/482 -f 1057/500/482 1064/507/103 1063/506/103 -f 1060/505/649 1058/504/649 1063/508/649 -f 1063/508/650 1065/509/650 1060/505/650 -f 1066/507/18 1062/500/18 1060/501/18 -f 1060/501/18 1065/506/18 1066/507/18 -f 1064/508/651 1057/504/479 1062/505/648 -f 1062/505/648 1066/509/652 1064/508/651 -f 1067/150/8 1068/151/8 1069/148/8 -f 1069/148/8 1070/149/8 1067/150/8 -f 1071/154/653 1072/153/653 1073/160/654 -f 1073/160/654 1074/161/654 1071/154/653 -f 1072/510/187 1075/511/187 1076/512/187 -f 1076/512/187 1073/513/187 1072/510/187 -f 1075/153/655 1077/154/655 1078/161/418 -f 1078/161/418 1076/160/418 1075/153/655 -f 1070/155/656 1069/152/656 1072/153/653 -f 1072/153/653 1071/154/653 1070/155/656 -f 1069/514/187 1068/515/187 1075/511/187 -f 1075/511/187 1072/510/187 1069/514/187 -f 1068/152/657 1067/155/657 1077/154/655 -f 1077/154/655 1075/153/655 1068/152/657 -f 1079/516/658 1080/517/659 1081/518/659 -f 1081/518/659 1082/519/658 1079/516/658 -f 1083/520/660 1084/521/661 1080/522/478 -f 1080/522/478 1079/523/584 1083/520/660 -f 1085/524/662 1086/525/663 1084/526/663 -f 1084/526/663 1083/527/662 1085/524/662 -f 1082/523/664 1081/522/482 1086/521/665 -f 1086/521/665 1085/520/666 1082/523/664 -f 1087/528/667 1088/529/667 1081/518/659 -f 1081/518/659 1080/517/659 1087/528/667 -f 1089/530/396 1087/531/396 1080/522/478 -f 1080/522/478 1084/521/661 1089/530/396 -f 1090/532/668 1089/533/668 1084/526/663 -f 1084/526/663 1086/525/663 1090/532/668 -f 1088/531/103 1090/530/103 1086/521/665 -f 1086/521/665 1081/522/482 1088/531/103 -f 1091/311/669 1092/314/670 1093/313/671 -f 1093/313/671 1094/312/669 1091/311/669 -f 1095/315/672 1096/318/518 1092/317/518 -f 1092/317/518 1091/316/518 1095/315/672 -f 1097/312/673 1098/313/673 1096/314/673 -f 1096/314/673 1095/311/673 1097/312/673 -f 1097/315/674 1094/316/521 1093/317/523 -f 1093/317/523 1098/318/522 1097/315/674 -f 1099/319/675 1100/320/675 1093/313/671 -f 1093/313/671 1092/314/670 1099/319/675 -f 1096/318/676 1101/322/677 1099/321/677 -f 1099/321/526 1092/317/525 1096/318/525 -f 1102/320/678 1101/319/678 1096/314/678 -f 1096/314/678 1098/313/678 1102/320/678 -f 1100/321/679 1102/322/680 1098/318/522 -f 1098/318/522 1093/317/523 1100/321/679 -f 1103/64/681 1104/67/682 1105/66/682 -f 1105/66/682 1106/65/681 1103/64/681 -f 1107/68/390 1108/71/390 1104/70/390 -f 1104/70/390 1103/69/390 1107/68/390 -f 1109/64/683 1110/67/683 1108/66/684 -f 1108/66/684 1107/65/683 1109/64/683 -f 1109/68/392 1106/69/392 1105/70/393 -f 1105/70/393 1110/71/393 1109/68/392 -f 1111/72/685 1112/73/685 1105/66/682 -f 1105/66/682 1104/67/682 1111/72/685 -f 1108/71/686 1113/75/687 1111/74/687 -f 1111/74/396 1104/70/396 1108/71/396 -f 1114/72/210 1113/73/210 1108/66/688 -f 1108/66/688 1110/67/688 1114/72/210 -f 1112/74/689 1114/75/690 1110/71/393 -f 1110/71/393 1105/70/393 1112/74/689 -f 1115/149/8 1116/150/8 1117/151/8 -f 1117/151/8 1118/148/8 1115/149/8 -f 1119/148/1 1120/149/1 1121/150/1 -f 1121/150/1 1122/151/1 1119/148/1 -f 1117/160/691 1123/153/403 1124/154/403 -f 1124/154/403 1118/161/691 1117/160/691 -f 1116/162/187 1125/157/187 1123/158/187 -f 1123/158/187 1117/163/187 1116/162/187 -f 1115/161/692 1126/154/404 1125/153/404 -f 1125/153/404 1116/160/692 1115/161/692 -f 1121/152/693 1120/155/693 1124/154/403 -f 1124/154/403 1123/153/403 1121/152/693 -f 1122/156/187 1121/159/187 1123/158/187 -f 1123/158/187 1125/157/187 1122/156/187 -f 1119/155/694 1122/152/694 1125/153/404 -f 1125/153/404 1126/154/404 1119/155/694 -f 1127/516/658 1128/519/658 1129/518/659 -f 1129/518/659 1130/517/659 1127/516/658 -f 1131/520/695 1127/523/570 1130/522/482 -f 1130/522/482 1132/521/696 1131/520/695 -f 1133/524/662 1131/527/662 1132/526/663 -f 1132/526/663 1134/525/663 1133/524/662 -f 1128/523/697 1133/520/698 1134/521/699 -f 1134/521/699 1129/522/478 1128/523/697 -f 1135/528/667 1130/517/659 1129/518/659 -f 1129/518/659 1136/529/667 1135/528/667 -f 1137/530/103 1132/521/696 1130/522/482 -f 1130/522/482 1135/531/103 1137/530/103 -f 1138/532/668 1134/525/663 1132/526/663 -f 1132/526/663 1137/533/668 1138/532/668 -f 1136/531/396 1129/522/478 1134/521/699 -f 1134/521/699 1138/530/396 1136/531/396 -f 1139/84/8 1140/87/8 1141/86/8 -f 1141/86/8 1142/85/8 1139/84/8 -f 1143/88/195 1144/91/195 1145/90/195 -f 1145/90/195 1146/89/195 1143/88/195 -f 1147/92/404 1148/95/404 1149/94/700 -f 1149/94/700 1150/93/700 1147/92/404 -f 1151/89/187 1152/90/187 1153/91/187 -f 1153/91/187 1154/88/187 1151/89/187 -f 1155/96/403 1156/99/403 1157/98/701 -f 1157/98/701 1158/97/701 1155/96/403 -f 1159/100/8 1160/102/8 1161/101/8 -f 1148/103/8 1162/106/8 1163/105/8 -f 1163/105/8 1149/104/8 1148/103/8 -f 1164/102/8 1165/100/8 1166/101/8 -f 1167/107/8 1168/108/8 1166/101/8 -f 1166/101/8 1165/100/8 1167/107/8 -f 1169/109/8 1170/110/8 1141/86/8 -f 1141/86/8 1140/87/8 1169/109/8 -f 1171/111/702 1172/112/702 1148/95/404 -f 1148/95/404 1147/92/404 1171/111/702 -f 1173/97/703 1174/98/703 1156/99/403 -f 1156/99/403 1155/96/403 1173/97/703 -f 1148/103/8 1172/104/8 1175/105/8 -f 1175/105/8 1162/106/8 1148/103/8 -f 1167/107/8 1159/100/8 1161/101/8 -f 1161/101/8 1168/108/8 1167/107/8 -f 1176/113/187 1163/116/187 1139/115/187 -f 1139/115/187 1142/114/187 1176/113/187 -f 1163/116/704 1162/118/704 1140/117/704 -f 1140/117/704 1139/115/704 1163/116/704 -f 1162/118/705 1175/120/705 1169/119/705 -f 1169/119/705 1140/117/705 1162/118/705 -f 1175/120/195 1177/122/195 1170/121/195 -f 1170/121/195 1169/119/195 1175/120/195 -f 1177/123/706 1178/126/707 1141/125/707 -f 1141/125/707 1170/124/706 1177/123/706 -f 1178/126/708 1176/123/708 1142/124/708 -f 1142/124/708 1141/125/708 1178/126/708 -f 1172/104/8 1179/128/8 1177/127/8 -f 1177/127/8 1175/105/8 1172/104/8 -f 1179/129/187 1172/112/187 1171/111/187 -f 1171/111/187 1180/130/187 1179/129/187 -f 1150/93/195 1149/94/195 1181/132/195 -f 1181/132/195 1182/131/195 1150/93/195 -f 1181/128/8 1149/104/8 1163/105/8 -f 1163/105/8 1176/127/8 1181/128/8 -f 1145/90/195 1144/91/195 1183/88/195 -f 1183/88/195 1184/89/195 1145/90/195 -f 1181/133/709 1176/123/709 1161/135/709 -f 1161/135/709 1160/134/709 1181/133/709 -f 1176/123/708 1178/126/708 1168/136/708 -f 1168/136/708 1161/135/708 1176/123/708 -f 1178/126/707 1177/123/706 1166/135/706 -f 1166/135/706 1168/136/707 1178/126/707 -f 1177/123/710 1179/133/710 1164/134/710 -f 1164/134/710 1166/135/710 1177/123/710 -f 1153/91/187 1152/90/187 1185/89/187 -f 1185/89/187 1186/88/187 1153/91/187 -f 1157/98/701 1156/99/701 1167/138/701 -f 1167/138/701 1165/137/701 1157/98/701 -f 1156/99/703 1174/98/703 1159/137/703 -f 1159/137/703 1167/138/703 1156/99/703 -f 1182/139/404 1181/133/404 1144/141/404 -f 1144/141/404 1143/140/404 1182/139/404 -f 1181/133/404 1160/134/404 1183/142/404 -f 1183/142/404 1144/141/404 1181/133/404 -f 1160/102/8 1159/100/8 1184/144/8 -f 1184/144/8 1183/143/8 1160/102/8 -f 1159/137/403 1174/98/403 1145/146/403 -f 1145/146/403 1184/145/403 1159/137/403 -f 1174/98/403 1173/97/403 1146/147/403 -f 1146/147/403 1145/146/403 1174/98/403 -f 1158/97/403 1157/98/403 1152/146/403 -f 1152/146/403 1151/147/403 1158/97/403 -f 1157/98/403 1165/137/403 1185/145/403 -f 1185/145/403 1152/146/403 1157/98/403 -f 1165/100/8 1164/102/8 1186/143/8 -f 1186/143/8 1185/144/8 1165/100/8 -f 1164/134/404 1179/133/404 1153/141/404 -f 1153/141/404 1186/142/404 1164/134/404 -f 1179/133/404 1180/139/404 1154/140/404 -f 1154/140/404 1153/141/404 1179/133/404 -f 1187/84/195 1188/87/195 1189/86/195 -f 1189/86/195 1190/85/195 1187/84/195 -f 1191/88/1 1192/91/1 1193/90/1 -f 1193/90/1 1194/89/1 1191/88/1 -f 1195/92/404 1196/95/404 1197/94/405 -f 1197/94/405 1198/93/405 1195/92/404 -f 1199/89/8 1200/90/8 1201/91/8 -f 1201/91/8 1202/88/8 1199/89/8 -f 1203/96/403 1204/99/403 1205/98/406 -f 1205/98/406 1206/97/406 1203/96/403 -f 1207/100/195 1208/102/195 1209/101/195 -f 1196/103/195 1210/106/195 1211/105/195 -f 1211/105/195 1197/104/195 1196/103/195 -f 1212/102/195 1213/100/195 1214/101/195 -f 1215/107/195 1216/108/195 1214/101/195 -f 1214/101/195 1213/100/195 1215/107/195 -f 1217/109/195 1218/110/195 1189/86/195 -f 1189/86/195 1188/87/195 1217/109/195 -f 1219/111/407 1220/112/407 1196/95/404 -f 1196/95/404 1195/92/404 1219/111/407 -f 1221/97/409 1222/98/408 1204/99/403 -f 1204/99/403 1203/96/403 1221/97/409 -f 1196/103/195 1220/104/195 1223/105/195 -f 1223/105/195 1210/106/195 1196/103/195 -f 1215/107/195 1207/100/195 1209/101/195 -f 1209/101/195 1216/108/195 1215/107/195 -f 1224/113/8 1211/116/8 1187/115/8 -f 1187/115/8 1190/114/8 1224/113/8 -f 1211/116/410 1210/118/711 1188/117/711 -f 1188/117/711 1187/115/410 1211/116/410 -f 1210/118/413 1223/120/413 1217/119/413 -f 1217/119/413 1188/117/413 1210/118/413 -f 1223/120/1 1225/122/1 1218/121/1 -f 1218/121/1 1217/119/1 1223/120/1 -f 1225/123/414 1226/126/415 1189/125/415 -f 1189/125/415 1218/124/414 1225/123/414 -f 1226/126/712 1224/123/417 1190/124/417 -f 1190/124/417 1189/125/416 1226/126/712 -f 1220/104/195 1227/128/195 1225/127/195 -f 1225/127/195 1223/105/195 1220/104/195 -f 1227/129/8 1220/112/8 1219/111/8 -f 1219/111/8 1228/130/8 1227/129/8 -f 1198/93/1 1197/94/1 1229/132/1 -f 1229/132/1 1230/131/1 1198/93/1 -f 1229/128/195 1197/104/195 1211/105/195 -f 1211/105/195 1224/127/195 1229/128/195 -f 1193/90/1 1192/91/1 1231/88/1 -f 1231/88/1 1232/89/1 1193/90/1 -f 1229/133/418 1224/123/419 1209/135/419 -f 1209/135/419 1208/134/418 1229/133/418 -f 1224/123/417 1226/126/712 1216/136/416 -f 1216/136/416 1209/135/417 1224/123/417 -f 1226/126/415 1225/123/414 1214/135/414 -f 1214/135/414 1216/136/415 1226/126/415 -f 1225/123/420 1227/133/420 1212/134/420 -f 1212/134/420 1214/135/420 1225/123/420 -f 1201/91/8 1200/90/8 1233/89/8 -f 1233/89/8 1234/88/8 1201/91/8 -f 1205/98/406 1204/99/421 1215/138/421 -f 1215/138/421 1213/137/406 1205/98/406 -f 1204/99/422 1222/98/408 1207/137/408 -f 1207/137/408 1215/138/422 1204/99/422 -f 1230/139/404 1229/133/404 1192/141/404 -f 1192/141/404 1191/140/404 1230/139/404 -f 1229/133/404 1208/134/404 1231/142/404 -f 1231/142/404 1192/141/404 1229/133/404 -f 1208/102/195 1207/100/195 1232/144/195 -f 1232/144/195 1231/143/195 1208/102/195 -f 1207/137/403 1222/98/403 1193/146/403 -f 1193/146/403 1232/145/403 1207/137/403 -f 1222/98/403 1221/97/403 1194/147/403 -f 1194/147/403 1193/146/403 1222/98/403 -f 1206/97/403 1205/98/403 1200/146/403 -f 1200/146/403 1199/147/403 1206/97/403 -f 1205/98/403 1213/137/403 1233/145/403 -f 1233/145/403 1200/146/403 1205/98/403 -f 1213/100/195 1212/102/195 1234/143/195 -f 1234/143/195 1233/144/195 1213/100/195 -f 1212/134/404 1227/133/404 1201/141/404 -f 1201/141/404 1234/142/404 1212/134/404 -f 1227/133/404 1228/139/404 1202/140/404 -f 1202/140/404 1201/141/404 1227/133/404 -f 1235/311/669 1236/312/669 1237/313/671 -f 1237/313/671 1238/314/670 1235/311/669 -f 1239/315/713 1235/316/714 1238/317/714 -f 1238/317/714 1240/318/714 1239/315/713 -f 1241/312/673 1239/311/673 1240/314/673 -f 1240/314/673 1242/313/673 1241/312/673 -f 1241/315/715 1242/318/390 1237/317/716 -f 1237/317/716 1236/316/717 1241/315/715 -f 1243/319/675 1238/314/670 1237/313/671 -f 1237/313/671 1244/320/675 1243/319/675 -f 1240/318/718 1238/317/718 1243/321/719 -f 1243/321/720 1245/322/720 1240/318/720 -f 1246/320/678 1242/313/678 1240/314/678 -f 1240/314/678 1245/319/678 1246/320/678 -f 1244/321/721 1237/317/716 1242/318/390 -f 1242/318/390 1246/322/722 1244/321/721 -f 1247/311/515 1248/314/517 1249/313/516 -f 1249/313/516 1250/312/515 1247/311/515 -f 1251/315/714 1252/318/714 1248/317/714 -f 1248/317/714 1247/316/714 1251/315/714 -f 1253/312/723 1254/313/520 1252/314/520 -f 1252/314/520 1251/311/723 1253/312/723 -f 1253/315/717 1250/316/717 1249/317/716 -f 1249/317/716 1254/318/390 1253/315/717 -f 1255/319/524 1256/320/524 1249/313/516 -f 1249/313/516 1248/314/517 1255/319/524 -f 1252/318/724 1257/322/724 1255/321/724 -f 1255/321/719 1248/317/718 1252/318/718 -f 1258/320/529 1257/319/529 1252/314/529 -f 1252/314/529 1254/313/529 1258/320/529 -f 1256/321/725 1258/322/726 1254/318/390 -f 1254/318/390 1249/317/716 1256/321/725 -f 1259/148/195 1260/151/195 1261/150/195 -f 1261/150/195 1262/149/195 1259/148/195 -f 1263/458/727 1259/461/727 1262/460/727 -f 1262/460/727 1264/459/727 1263/458/727 -f 1264/462/728 1262/465/729 1261/464/729 -f 1261/464/729 1265/463/728 1264/462/728 -f 1265/459/730 1261/460/730 1260/461/730 -f 1260/461/730 1266/458/730 1265/459/730 -f 1266/463/731 1260/464/731 1259/465/731 -f 1259/465/731 1263/462/731 1266/463/731 -f 1267/534/404 1268/535/404 1269/536/404 -f 1269/536/404 1270/537/404 1267/534/404 -f 1271/538/195 1272/539/195 1269/536/195 -f 1269/536/195 1268/535/195 1271/538/195 -f 1273/534/404 1274/535/404 1275/536/404 -f 1275/536/404 1276/537/404 1273/534/404 -f 1277/538/195 1278/539/195 1275/536/195 -f 1275/536/195 1274/535/195 1277/538/195 -f 1279/534/404 1280/535/404 1281/536/404 -f 1281/536/404 1282/537/404 1279/534/404 -f 1283/538/195 1284/539/195 1281/536/195 -f 1281/536/195 1280/535/195 1283/538/195 -f 1285/291/500 1286/292/501 1287/293/501 -f 1287/293/501 1288/294/500 1285/291/500 -f 1289/293/502 1290/292/502 1291/291/503 -f 1291/291/503 1292/294/503 1289/293/502 -f 1288/295/8 1287/296/8 1289/297/8 -f 1289/297/8 1292/298/8 1288/295/8 -f 1293/299/504 1286/296/732 1290/297/506 -f 1290/297/506 1294/300/1 1293/299/504 -f 1293/301/501 1295/302/501 1287/293/501 -f 1287/293/501 1286/292/501 1293/301/501 -f 1296/302/507 1294/301/507 1290/292/502 -f 1290/292/502 1289/293/502 1296/302/507 -f 1295/299/8 1296/300/8 1289/297/8 -f 1289/297/8 1287/296/8 1295/299/8 -f 1285/295/508 1291/298/1 1290/297/506 -f 1290/297/506 1286/296/732 1285/295/508 -f 1297/534/404 1298/535/404 1299/536/404 -f 1299/536/404 1300/537/404 1297/534/404 -f 1301/538/195 1302/539/195 1299/536/195 -f 1299/536/195 1298/535/195 1301/538/195 -f 1303/534/404 1304/535/404 1305/536/404 -f 1305/536/404 1306/537/404 1303/534/404 -f 1307/538/195 1308/539/195 1305/536/195 -f 1305/536/195 1304/535/195 1307/538/195 -f 1309/534/404 1310/535/404 1311/536/404 -f 1311/536/404 1312/537/404 1309/534/404 -f 1313/538/195 1314/539/195 1311/536/195 -f 1311/536/195 1310/535/195 1313/538/195 -f 1315/534/404 1316/535/404 1317/536/404 -f 1317/536/404 1318/537/404 1315/534/404 -f 1319/538/195 1320/539/195 1317/536/195 -f 1317/536/195 1316/535/195 1319/538/195 -f 1321/534/404 1322/535/404 1323/536/404 -f 1323/536/404 1324/537/404 1321/534/404 -f 1325/538/195 1326/539/195 1323/536/195 -f 1323/536/195 1322/535/195 1325/538/195 -f 1327/540/195 1328/541/195 1329/542/195 -f 1329/542/195 1330/543/195 1327/540/195 -f 1328/544/1 1331/545/1 1332/546/1 -f 1332/546/1 1329/547/1 1328/544/1 -f 1331/541/187 1333/540/187 1334/543/187 -f 1334/543/187 1332/542/187 1331/541/187 -f 1335/498/484 1336/501/478 1337/500/478 -f 1337/500/478 1338/499/484 1335/498/484 -f 1339/502/497 1340/505/497 1336/504/497 -f 1336/504/497 1335/503/497 1339/502/497 -f 1341/499/733 1342/500/733 1340/501/733 -f 1340/501/733 1339/498/733 1341/499/733 -f 1341/502/647 1338/503/647 1337/504/479 -f 1337/504/479 1342/505/734 1341/502/647 -f 1343/506/396 1344/507/396 1337/500/478 -f 1337/500/478 1336/501/478 1343/506/396 -f 1340/505/735 1345/509/736 1343/508/736 -f 1343/508/649 1336/504/649 1340/505/649 -f 1346/507/737 1345/506/737 1340/501/737 -f 1340/501/737 1342/500/737 1346/507/737 -f 1344/508/738 1346/509/739 1342/505/734 -f 1342/505/734 1337/504/479 1344/508/738 -f 1347/150/8 1348/149/8 1349/148/8 -f 1349/148/8 1350/151/8 1347/150/8 -f 1351/154/653 1352/161/654 1353/160/654 -f 1353/160/654 1354/153/653 1351/154/653 -f 1354/510/195 1353/513/195 1355/512/195 -f 1355/512/195 1356/511/195 1354/510/195 -f 1356/153/655 1355/160/418 1357/161/418 -f 1357/161/418 1358/154/655 1356/153/655 -f 1348/155/656 1351/154/653 1354/153/653 -f 1354/153/653 1349/152/656 1348/155/656 -f 1349/514/195 1354/510/195 1356/511/195 -f 1356/511/195 1350/515/195 1349/514/195 -f 1350/152/657 1356/153/655 1358/154/655 -f 1358/154/655 1347/155/657 1350/152/657 -f 1359/548/740 1360/549/741 1361/550/742 -f 1361/550/742 1362/551/743 1359/548/740 -f 1363/552/744 1359/548/740 1362/551/743 -f 1362/551/743 1364/553/745 1363/552/744 -f 1365/554/746 1363/552/744 1364/553/745 -f 1364/553/745 1366/555/747 1365/554/746 -f 1367/556/748 1365/554/746 1366/555/747 -f 1366/555/747 1368/557/511 1367/556/748 -f 1369/558/749 1370/559/750 1360/549/741 -f 1360/549/741 1359/548/740 1369/558/749 -f 1371/560/751 1369/558/749 1359/548/740 -f 1359/548/740 1363/552/744 1371/560/751 -f 1372/561/752 1371/560/751 1363/552/744 -f 1363/552/744 1365/554/746 1372/561/752 -f 1373/562/753 1372/561/752 1365/554/746 -f 1365/554/746 1367/556/748 1373/562/753 -f 1374/563/754 1375/564/755 1370/559/750 -f 1370/559/750 1369/558/749 1374/563/754 -f 1376/565/756 1374/563/754 1369/558/749 -f 1369/558/749 1371/560/751 1376/565/756 -f 1377/566/757 1376/565/756 1371/560/751 -f 1371/560/751 1372/561/752 1377/566/757 -f 1378/567/758 1377/566/757 1372/561/752 -f 1372/561/752 1373/562/753 1378/567/758 -f 1379/568/759 1380/569/760 1375/564/755 -f 1375/564/755 1374/563/754 1379/568/759 -f 1381/570/761 1379/568/759 1374/563/754 -f 1374/563/754 1376/565/756 1381/570/761 -f 1382/571/762 1381/570/761 1376/565/756 -f 1376/565/756 1377/566/757 1382/571/762 -f 1383/572/763 1382/571/762 1377/566/757 -f 1377/566/757 1378/567/758 1383/572/763 -# 1829 faces - diff --git a/examples/web/models/resources/models/house_diffuse.png b/examples/web/models/resources/models/house_diffuse.png Binary files differdeleted file mode 100644 index b36a58a..0000000 --- a/examples/web/models/resources/models/house_diffuse.png +++ /dev/null diff --git a/examples/web/models/resources/models/market.obj b/examples/web/models/resources/models/market.obj deleted file mode 100644 index 14b56c9..0000000 --- a/examples/web/models/resources/models/market.obj +++ /dev/null @@ -1,7301 +0,0 @@ -# (c) 2018 Medieval Assets Pack by Alberto Cano -# Licensed as Creative Commons Attribution-NonCommercial 4.0 - -# -# object market -# - -v 3.5020 2.5780 0.6000 -v 3.5857 2.3300 -0.3566 -v 0.9034 2.4385 -0.3059 -v 0.7972 2.5666 0.3634 -v 7.0514 2.3106 -0.0534 -v 6.9677 2.5586 0.9032 -v 10.0279 2.4607 0.6293 -v 9.9809 2.5751 1.1668 -v 3.4183 2.7080 1.5566 -v 0.6157 2.7701 1.3114 -v 6.8840 2.6886 1.8598 -v 9.8972 2.7851 2.1234 -v 3.3346 3.0185 2.5132 -v 0.4535 3.1325 2.2611 -v 6.8004 2.9991 2.8164 -v 9.8135 3.1163 3.0800 -v 3.2509 3.4794 3.4697 -v 0.2754 3.5551 3.2094 -v 6.7167 3.4600 3.7729 -v 9.7298 3.4639 4.0366 -v 10.0455 2.8240 2.2646 -v 10.2142 2.4497 0.4830 -v 9.9850 2.4497 0.4630 -v 9.8767 2.8240 2.2499 -v 10.0391 2.6661 2.3384 -v 10.2064 2.2594 0.5720 -v 9.8703 2.6661 2.3236 -v 9.9773 2.2594 0.5519 -v 9.6576 3.4698 3.8991 -v 9.9399 3.4698 3.9238 -v 9.9304 3.2353 4.0334 -v 9.6480 3.2353 4.0087 -v 10.2259 2.6757 0.6552 -v 10.2479 2.6757 0.4044 -v 9.9655 2.6757 0.3797 -v 9.9436 2.6757 0.6305 -v 10.1948 1.3380 0.5581 -v 10.2479 0.0002 0.4044 -v 9.9655 0.0002 0.3797 -v 10.0260 1.3380 0.5433 -v 10.1801 1.3380 0.7269 -v 10.2259 0.0002 0.6552 -v 10.0113 1.3380 0.7121 -v 9.9436 0.0002 0.6305 -v -2.5487 5.3313 -3.7528 -v -6.4595 7.4224 -4.0554 -v -6.4595 7.8989 -0.3361 -v -2.5487 5.4078 -0.1848 -v -6.4595 7.8989 -7.7747 -v -10.3703 5.1783 -7.3209 -v -10.3703 5.1783 -3.7528 -v -2.5487 5.0684 -0.1976 -v -2.5487 4.9919 -3.7784 -v -6.4595 8.5550 -11.4939 -v -6.4595 8.8943 -11.4939 -v -2.5487 5.1783 -10.8889 -v -2.5487 4.8389 -10.9401 -v -10.3703 5.1783 -10.8889 -v -10.3703 4.8389 -10.8889 -v -10.3703 4.8389 -7.3209 -v -10.3703 4.8389 -3.7528 -v -6.4595 8.5550 3.3832 -v -6.4595 8.8943 3.3832 -v -10.3703 5.1783 3.3832 -v -10.3703 4.8389 3.3832 -v -2.5487 5.4843 3.3832 -v -2.5487 5.1449 3.3832 -v -6.4595 7.5595 -0.3361 -v -6.4595 7.0830 -4.0554 -v -10.3703 4.8389 -0.1848 -v -2.5487 5.2548 -7.3209 -v -10.3703 5.1783 -0.1848 -v -2.5487 4.9154 -7.3592 -v -6.4595 7.5595 -7.7747 -v -6.8581 7.8263 -12.4808 -v -6.8581 8.6234 -12.4808 -v -6.0610 8.6234 -12.4808 -v -6.0610 7.8263 -12.4808 -v -6.1229 7.4442 -11.5026 -v -6.1229 8.1175 -11.5026 -v -6.1553 7.9193 -10.5120 -v -6.1553 7.3108 -10.5120 -v -6.7962 7.4442 -11.5026 -v -6.7638 7.3108 -10.5120 -v -6.7638 7.9193 -10.5120 -v -6.7962 8.1175 -11.5026 -v -6.4595 0.0002 -10.1354 -v -6.4595 8.2940 -10.6813 -v -2.8857 5.2975 -10.1354 -v -2.8857 0.0002 -10.1354 -v -10.0333 5.2975 2.7784 -v -10.0333 5.2975 -10.1354 -v -10.0333 0.0002 -10.1354 -v -10.0333 0.0002 2.7784 -v -2.8857 5.2975 2.7784 -v -2.8857 0.0002 2.7784 -v -6.4595 0.0002 2.7784 -v -6.4595 8.2940 2.7784 -v -6.8605 5.0137 -10.5121 -v -6.4595 5.3049 -10.5121 -v -6.4595 4.0799 -10.4446 -v -6.8605 4.1037 -10.4446 -v -7.1742 4.1256 -10.4781 -v -7.1742 3.9945 -10.4781 -v -7.1742 3.9945 -10.3860 -v -7.1742 4.1256 -10.3860 -v -6.4595 5.5197 -10.5456 -v -7.0706 5.0963 -10.5456 -v -7.0706 5.0963 -10.4535 -v -6.4595 5.5197 -10.4535 -v -5.7449 3.9945 -10.4781 -v -5.7449 4.1256 -10.4781 -v -5.7449 4.1256 -10.3860 -v -5.7449 3.9945 -10.3860 -v -6.4595 3.9489 -10.4781 -v -5.8484 3.9945 -10.4781 -v -5.8484 3.9945 -10.3860 -v -6.4595 3.9489 -10.3860 -v -7.0706 4.1256 -10.5790 -v -6.8605 4.1037 -10.5790 -v -7.0706 3.9945 -10.5790 -v -6.4595 5.3049 -10.5456 -v -6.8605 5.0137 -10.5456 -v -5.8484 3.9945 -10.5790 -v -6.0585 4.1122 -10.5790 -v -5.8484 4.1256 -10.5790 -v -6.4595 3.9489 -10.5790 -v -6.4595 4.0799 -10.5790 -v -6.0585 5.0137 -10.5121 -v -6.0585 4.1122 -10.4446 -v -5.8484 5.0963 -10.5456 -v -5.8484 5.0963 -10.4535 -v -7.0706 3.9945 -10.4781 -v -7.0706 3.9945 -10.3860 -v -6.0585 5.0137 -10.5456 -v -6.8605 4.1037 -10.4781 -v -6.0585 4.1122 -10.4781 -v -6.4595 4.0799 -10.4781 -v -5.8484 4.1256 -10.4781 -v -5.8484 4.1256 -10.3860 -v -7.0706 4.1256 -10.4781 -v -7.0706 4.1256 -10.3860 -v -7.1742 4.1256 -10.5790 -v -7.1742 3.9945 -10.5790 -v -5.7449 3.9945 -10.5790 -v -5.7449 4.1256 -10.5790 -v -4.8366 2.9155 -11.3065 -v -4.8366 2.9155 -9.8475 -v -5.1698 0.0002 -9.8475 -v -5.1698 0.0002 -11.3065 -v -7.8178 2.9295 -10.3475 -v -5.1012 2.9295 -10.3475 -v -5.3801 0.0002 -10.3475 -v -7.5389 0.0002 -10.3475 -v -8.0825 2.9295 -9.8475 -v -8.0825 2.9154 -11.3065 -v -7.7492 0.0002 -11.3065 -v -7.7492 0.0002 -9.8475 -v -7.8178 2.9155 -11.3065 -v -7.5389 0.0002 -11.3065 -v -5.3801 0.0002 -11.3065 -v -5.1012 2.9155 -11.3065 -v -4.9724 1.3976 -11.3539 -v -4.9724 1.3976 -11.0656 -v -5.1101 0.0002 -11.1185 -v -5.1101 0.0002 -11.5366 -v -5.2488 1.3976 -11.3539 -v -5.4726 0.0002 -11.5366 -v -5.4726 0.0002 -11.1185 -v -5.2488 1.3976 -11.0656 -v -4.8038 2.9493 -11.1125 -v -4.8038 2.9493 -11.5426 -v -5.1768 2.9493 -11.5426 -v -5.1768 2.9493 -11.1125 -v -4.9146 0.0002 -10.3720 -v -4.7725 1.3976 -10.2190 -v -5.0597 1.3976 -10.1939 -v -5.3311 0.0002 -10.3356 -v -4.7966 1.3976 -10.4942 -v -4.9462 0.0002 -10.7332 -v -5.0838 1.3976 -10.4691 -v -5.3627 0.0002 -10.6968 -v -4.5534 2.8021 -10.2285 -v -4.9819 2.9493 -10.1910 -v -4.5859 2.8021 -10.6000 -v -5.0144 2.9493 -10.5625 -v -7.9466 1.3976 -11.3539 -v -7.8090 0.0002 -11.5366 -v -7.8090 0.0002 -11.1185 -v -7.9466 1.3976 -11.0656 -v -7.6703 1.3976 -11.3539 -v -7.4464 0.0002 -11.5366 -v -7.6703 1.3976 -11.0656 -v -7.4464 0.0002 -11.1185 -v -8.1152 2.9493 -11.1125 -v -8.1152 2.9493 -11.5426 -v -7.7423 2.9493 -11.5426 -v -7.7423 2.9493 -11.1125 -v -7.8593 1.3976 -10.1939 -v -8.1465 1.3976 -10.2190 -v -8.0045 0.0002 -10.3720 -v -7.5880 0.0002 -10.3356 -v -8.1224 1.3976 -10.4942 -v -7.9729 0.0002 -10.7332 -v -7.8353 1.3976 -10.4691 -v -7.5564 0.0002 -10.6968 -v -7.9372 2.9493 -10.1910 -v -8.3656 2.8021 -10.2285 -v -8.3331 2.8021 -10.6000 -v -7.9047 2.9493 -10.5625 -v -6.4595 2.8457 -10.1867 -v -6.4595 3.2124 -11.6295 -v -4.5275 2.6373 -11.6295 -v -4.5275 2.6373 -10.1867 -v -6.4595 3.4690 -11.6295 -v -6.4595 3.4690 -10.1867 -v -4.5275 2.8939 -10.1867 -v -4.5275 2.8939 -11.6295 -v -8.3915 2.8939 -10.1867 -v -8.3915 2.8939 -11.6295 -v -8.3915 2.6373 -11.6295 -v -8.3915 2.6373 -10.1867 -v -10.1121 2.4684 -10.3295 -v -10.3137 0.0002 -10.5615 -v -10.3137 0.0002 -9.7906 -v -10.1121 2.4684 -9.8940 -v -10.3137 4.9367 -9.7906 -v -10.3137 4.9367 -10.5615 -v -9.6716 2.4684 -10.3295 -v -9.5338 0.0002 -10.5615 -v -9.5338 5.4628 -10.5615 -v -9.6716 2.4684 -9.8940 -v -9.5338 0.0002 -9.7906 -v -9.5338 5.4628 -9.7906 -v -11.8271 0.0002 -7.0338 -v -10.6584 1.3390 -7.2308 -v -10.6584 1.3390 -6.7139 -v -11.8271 0.0002 -6.5169 -v -11.1508 1.6838 -7.2308 -v -12.4282 0.0002 -7.0338 -v -11.1508 1.6838 -6.7139 -v -12.4282 0.0002 -6.5169 -v -10.0210 2.4484 -7.0338 -v -10.0210 2.4484 -6.5169 -v -9.9166 3.3186 -7.0338 -v -9.9166 3.3186 -6.5169 -v -10.6584 1.3390 -0.3375 -v -10.6584 1.3390 0.1794 -v -11.8271 0.0002 -0.0176 -v -11.8271 0.0002 -0.5345 -v -11.1508 1.6838 0.1794 -v -12.4282 0.0002 -0.0176 -v -11.1508 1.6838 -0.3375 -v -12.4282 0.0002 -0.5345 -v -10.0210 2.4484 -0.5345 -v -10.0210 2.4484 -0.0176 -v -9.9166 3.3186 -0.0176 -v -9.9166 3.3186 -0.5345 -v -10.1121 2.4684 2.8671 -v -10.1121 2.4684 2.4316 -v -10.3137 0.0002 2.3281 -v -10.3137 0.0002 3.0991 -v -10.3137 4.9367 3.0991 -v -10.3137 4.9367 2.3281 -v -9.5338 0.0002 3.0991 -v -9.6716 2.4684 2.8671 -v -9.5338 5.4628 3.0991 -v -9.5338 0.0002 2.3281 -v -9.6716 2.4684 2.4316 -v -9.5338 5.4628 2.3281 -v -2.8142 2.4684 -10.1938 -v -2.8142 2.4684 -9.7583 -v -2.6125 0.0002 -9.6549 -v -2.6125 0.0002 -10.4258 -v -2.6125 4.9367 -10.4258 -v -2.6125 4.9367 -9.6549 -v -3.3925 0.0002 -10.4258 -v -3.2547 2.4684 -10.1938 -v -3.3925 5.4628 -10.4258 -v -3.3925 0.0002 -9.6549 -v -3.2547 2.4684 -9.7583 -v -3.3925 5.4628 -9.6549 -v -7.0328 8.4497 -10.4019 -v -7.0328 8.6617 -11.4049 -v -7.0328 8.4889 -11.4414 -v -7.0328 8.2769 -10.4384 -v -6.5612 8.6330 -10.3631 -v -6.5612 8.8059 -10.3266 -v -6.5612 9.0178 -11.3296 -v -6.5612 8.8450 -11.3661 -v -6.4595 8.6447 -10.3607 -v -6.4595 8.8175 -10.3241 -v -6.4595 9.0295 -11.3272 -v -6.4595 8.8567 -11.3637 -v -5.8863 8.4497 -10.4019 -v -5.8863 8.2769 -10.4384 -v -5.8863 8.4889 -11.4414 -v -5.8863 8.6617 -11.4049 -v -6.3578 8.6330 -10.3631 -v -6.3578 8.8059 -10.3266 -v -6.3578 9.0178 -11.3296 -v -6.3578 8.8450 -11.3661 -v -7.0328 8.3601 -10.5036 -v -7.0328 8.1873 -10.5401 -v -7.0328 7.9753 -9.5371 -v -7.0328 8.1481 -9.5005 -v -6.5612 8.5043 -9.4253 -v -6.5613 8.7162 -10.4283 -v -6.5612 8.3315 -9.4618 -v -6.4595 8.5159 -9.4228 -v -6.4595 8.7279 -10.4258 -v -6.4595 8.3431 -9.4594 -v -5.8863 8.3601 -10.5036 -v -5.8863 8.1481 -9.5005 -v -5.8863 7.9753 -9.5371 -v -5.8863 8.1873 -10.5401 -v -6.3578 8.7162 -10.4283 -v -6.3578 8.5043 -9.4253 -v -6.3578 8.3315 -9.4618 -v -7.0328 8.1098 -9.7108 -v -7.0328 7.9358 -9.7412 -v -7.0328 7.7594 -8.7313 -v -7.0328 7.9334 -8.7009 -v -6.5612 8.2919 -8.6383 -v -6.5612 8.4684 -9.6482 -v -6.5612 8.1179 -8.6687 -v -6.4595 8.3037 -8.6362 -v -6.4595 8.4801 -9.6461 -v -6.4595 8.1297 -8.6666 -v -5.8863 8.1098 -9.7108 -v -5.8863 7.9334 -8.7009 -v -5.8863 7.7594 -8.7313 -v -5.8863 7.9358 -9.7412 -v -6.3578 8.4684 -9.6482 -v -6.3578 8.2919 -8.6383 -v -6.3578 8.1179 -8.6687 -v -7.0328 7.8694 -8.8215 -v -7.0328 7.6941 -8.8428 -v -7.0328 7.5703 -7.8251 -v -7.0328 7.7457 -7.8038 -v -6.5613 8.1070 -7.7599 -v -6.5612 8.2307 -8.7775 -v -6.5613 7.9316 -7.7812 -v -6.4595 8.1188 -7.7584 -v -6.4595 8.2425 -8.7761 -v -6.4595 7.9434 -7.7798 -v -5.8863 7.8694 -8.8215 -v -5.8863 7.7457 -7.8038 -v -5.8863 7.5703 -7.8251 -v -5.8863 7.6941 -8.8428 -v -6.3578 8.2307 -8.7775 -v -6.3578 8.1070 -7.7599 -v -6.3578 7.9316 -7.7812 -v -7.0328 7.6652 -7.9060 -v -7.0328 7.4898 -7.9273 -v -7.0328 7.3661 -6.9097 -v -7.0328 7.5414 -6.8883 -v -6.5612 7.9027 -6.8444 -v -6.5613 8.0265 -7.8621 -v -6.5612 7.7274 -6.8657 -v -6.4595 7.9145 -6.8430 -v -6.4595 8.0383 -7.8606 -v -6.4595 7.7392 -6.8643 -v -5.8863 7.6652 -7.9060 -v -5.8863 7.5414 -6.8883 -v -5.8863 7.3661 -6.9097 -v -5.8863 7.4898 -7.9273 -v -6.3578 8.0265 -7.8621 -v -6.3578 7.9027 -6.8444 -v -6.3578 7.7274 -6.8657 -v -7.0328 7.4996 -6.9305 -v -7.0328 7.3243 -6.9519 -v -7.0328 7.2005 -5.9342 -v -7.0328 7.3759 -5.9129 -v -6.5612 7.7372 -5.8689 -v -6.5613 7.8610 -6.8866 -v -6.5612 7.5619 -5.8902 -v -6.4595 7.7490 -5.8675 -v -6.4595 7.8728 -6.8852 -v -6.4595 7.5737 -5.8888 -v -5.8863 7.4996 -6.9305 -v -5.8863 7.3759 -5.9129 -v -5.8863 7.2005 -5.9342 -v -5.8863 7.3243 -6.9519 -v -6.3578 7.8610 -6.8866 -v -6.3578 7.7372 -5.8689 -v -6.3578 7.5619 -5.8902 -v -7.0328 7.3800 -6.2166 -v -7.0328 7.2037 -6.2260 -v -7.0328 7.1488 -5.2023 -v -7.0328 7.3252 -5.1929 -v -6.5612 7.6887 -5.1734 -v -6.5612 7.7435 -6.1971 -v -6.5612 7.5123 -5.1828 -v -6.4595 7.7006 -5.1728 -v -6.4595 7.7554 -6.1965 -v -6.4595 7.5242 -5.1822 -v -5.8863 7.3800 -6.2166 -v -5.8863 7.3252 -5.1929 -v -5.8863 7.1488 -5.2023 -v -5.8863 7.2037 -6.2260 -v -6.3578 7.7435 -6.1971 -v -6.3578 7.6887 -5.1734 -v -6.3578 7.5123 -5.1828 -v -7.0328 8.0466 0.2463 -v -7.0328 7.8713 0.2676 -v -7.0328 7.9950 1.2853 -v -7.0328 8.1704 1.2639 -v -6.5612 8.4080 0.2023 -v -6.5612 8.2326 0.2237 -v -6.5612 8.5317 1.2200 -v -6.5612 8.3564 1.2413 -v -6.4595 8.4198 0.2009 -v -6.4595 8.2444 0.2222 -v -6.4595 8.5435 1.2186 -v -6.4595 8.3682 1.2399 -v -5.8863 8.0466 0.2463 -v -5.8863 8.1704 1.2639 -v -5.8863 7.9950 1.2853 -v -5.8863 7.8713 0.2676 -v -6.3578 8.2326 0.2237 -v -6.3578 8.4080 0.2023 -v -6.3578 8.5317 1.2200 -v -6.3578 8.3564 1.2413 -v -7.0328 7.9614 0.3570 -v -7.0328 7.9268 -0.6676 -v -7.0328 7.7502 -0.6617 -v -7.0328 7.7848 0.3629 -v -6.5612 8.3251 0.3447 -v -6.5612 8.2906 -0.6799 -v -6.5612 8.1140 -0.6740 -v -6.4595 8.3370 0.3443 -v -6.4595 8.3025 -0.6803 -v -6.4595 8.1259 -0.6744 -v -5.8863 7.9614 0.3570 -v -5.8863 7.7848 0.3629 -v -5.8863 7.7502 -0.6617 -v -5.8863 7.9268 -0.6676 -v -6.3578 8.3251 0.3447 -v -6.3578 8.2906 -0.6799 -v -6.3578 8.1140 -0.6740 -v -7.0328 7.8315 -0.6424 -v -7.0328 7.7437 -1.6638 -v -7.0328 7.5677 -1.6487 -v -7.0328 7.6555 -0.6273 -v -6.5612 8.1941 -0.6736 -v -6.5612 8.1064 -1.6950 -v -6.5612 7.9304 -1.6799 -v -6.4595 8.2060 -0.6746 -v -6.4595 8.1182 -1.6960 -v -6.4595 7.9422 -1.6809 -v -5.8863 7.8315 -0.6424 -v -5.8863 7.6555 -0.6273 -v -5.8863 7.5677 -1.6487 -v -5.8863 7.7437 -1.6638 -v -6.3578 8.1941 -0.6736 -v -6.3578 8.1064 -1.6950 -v -6.3578 7.9304 -1.6799 -v -7.0328 7.6668 -1.5253 -v -7.0328 7.5431 -2.5430 -v -7.0328 7.3677 -2.5216 -v -7.0328 7.4915 -1.5040 -v -6.5612 8.0282 -1.5692 -v -6.5612 7.9044 -2.5869 -v -6.5612 7.7291 -2.5656 -v -6.4595 8.0400 -1.5707 -v -6.4595 7.9162 -2.5883 -v -6.4595 7.7409 -2.5670 -v -5.8863 7.6668 -1.5253 -v -5.8863 7.4915 -1.5040 -v -5.8863 7.3677 -2.5216 -v -5.8863 7.5431 -2.5430 -v -6.3578 8.0282 -1.5692 -v -6.3578 7.9044 -2.5869 -v -6.3578 7.7291 -2.5656 -v -7.0328 7.4696 -2.4408 -v -7.0328 7.3458 -3.4585 -v -7.0328 7.1705 -3.4371 -v -7.0328 7.2943 -2.4195 -v -6.5612 7.8309 -2.4847 -v -6.5612 7.7072 -3.5024 -v -6.5613 7.5318 -3.4811 -v -6.4595 7.8427 -2.4862 -v -6.4595 7.7190 -3.5038 -v -6.4595 7.5436 -3.4825 -v -5.8863 7.4696 -2.4408 -v -5.8863 7.2943 -2.4195 -v -5.8863 7.1705 -3.4371 -v -5.8863 7.3459 -3.4585 -v -6.3578 7.8309 -2.4847 -v -6.3578 7.7072 -3.5024 -v -6.3578 7.5318 -3.4811 -v -7.0328 7.2372 -3.4260 -v -7.0328 7.2026 -4.4506 -v -7.0328 7.0261 -4.4446 -v -7.0328 7.0606 -3.4200 -v -6.5612 7.6010 -3.4383 -v -6.5612 7.5664 -4.4629 -v -6.5612 7.3898 -4.4569 -v -6.4595 7.6129 -3.4387 -v -6.4595 7.5783 -4.4633 -v -6.4595 7.4017 -4.4573 -v -5.8863 7.2372 -3.4260 -v -5.8863 7.0606 -3.4200 -v -5.8863 7.0261 -4.4446 -v -5.8863 7.2026 -4.4506 -v -6.3578 7.6010 -3.4383 -v -6.3578 7.5664 -4.4629 -v -6.3578 7.3898 -4.4569 -v -7.0328 7.1416 -4.2258 -v -7.0328 7.2654 -5.2435 -v -7.0328 7.0900 -5.2648 -v -7.0328 6.9662 -4.2471 -v -6.5612 7.5029 -4.1819 -v -6.5612 7.6267 -5.1995 -v -6.5612 7.4513 -5.2209 -v -6.4595 7.5147 -4.1804 -v -6.4595 7.6385 -5.1981 -v -6.4595 7.4631 -5.2194 -v -5.8863 7.1416 -4.2258 -v -5.8863 6.9662 -4.2471 -v -5.8863 7.0900 -5.2648 -v -5.8863 7.2654 -5.2435 -v -6.3578 7.5029 -4.1819 -v -6.3578 7.6267 -5.1995 -v -6.3578 7.4513 -5.2209 -v -7.0328 8.2934 1.2567 -v -7.0328 8.1180 1.2780 -v -7.0328 8.2418 2.2957 -v -7.0328 8.4171 2.2744 -v -6.5612 8.6547 1.2127 -v -6.5612 8.4794 1.2341 -v -6.5612 8.7784 2.2304 -v -6.5612 8.6031 2.2517 -v -6.4595 8.6665 1.2113 -v -6.4595 8.4912 1.2326 -v -6.4595 8.7903 2.2290 -v -6.4595 8.6149 2.2503 -v -5.8863 8.2934 1.2567 -v -5.8863 8.4171 2.2744 -v -5.8863 8.2418 2.2957 -v -5.8863 8.1180 1.2780 -v -6.3578 8.4794 1.2341 -v -6.3578 8.6547 1.2127 -v -6.3578 8.7784 2.2304 -v -6.3578 8.6031 2.2517 -v -7.0328 8.5448 2.0888 -v -7.0328 8.3694 2.1101 -v -7.0328 8.4932 3.1278 -v -7.0328 8.6685 3.1065 -v -6.5612 8.9061 2.0448 -v -6.5612 8.7308 2.0662 -v -6.5612 9.0299 3.0625 -v -6.5612 8.8545 3.0838 -v -6.4595 8.9179 2.0434 -v -6.4595 8.7426 2.0647 -v -6.4595 9.0417 3.0611 -v -6.4595 8.8663 3.0824 -v -5.8863 8.5448 2.0888 -v -5.8863 8.6685 3.1065 -v -5.8863 8.4932 3.1278 -v -5.8863 8.3695 2.1101 -v -6.3578 8.7308 2.0662 -v -6.3578 8.9061 2.0448 -v -6.3578 9.0299 3.0625 -v -6.3578 8.8545 3.0838 -v -10.0333 0.3779 -9.7364 -v -10.1350 0.3779 -9.7364 -v -10.1350 0.3779 2.5266 -v -10.0333 0.3779 2.5266 -v -10.1350 0.0002 -9.7364 -v -10.1350 0.0002 2.5266 -v -7.5634 0.3779 2.7526 -v -9.7086 0.3779 2.7526 -v -9.7086 0.3779 2.8543 -v -7.5634 0.3779 2.8543 -v -9.7086 0.0002 2.8543 -v -7.5634 0.0002 2.8543 -v -10.0175 0.3779 -10.1929 -v -2.9336 0.3779 -10.1929 -v -2.9336 0.3779 -10.2946 -v -10.0175 0.3779 -10.2946 -v -2.9336 0.0002 -10.2946 -v -10.0175 0.0002 -10.2946 -v -2.8857 0.3779 -9.7364 -v -2.8857 0.3779 2.5266 -v -2.7840 0.3779 2.5266 -v -2.7840 0.3779 -9.7364 -v -2.7840 0.0002 2.5266 -v -2.7840 0.0002 -9.7364 -v 0.5342 2.4385 -0.3182 -v 0.8185 2.3300 -2.9858 -v -0.1417 2.5780 -2.9858 -v -0.1417 2.5666 -0.2707 -v 0.8185 2.3106 -6.4648 -v -0.1417 2.5586 -6.4648 -v 0.3978 2.4607 -9.4895 -v -0.1417 2.5751 -9.4895 -v -1.1020 2.7080 -2.9858 -v -1.1020 2.7701 -0.1725 -v -1.1020 2.6886 -6.4648 -v -1.1020 2.7851 -9.4895 -v -2.0622 3.0185 -2.9858 -v -2.0622 3.1325 -0.0938 -v -2.0622 2.9991 -6.4648 -v -2.0622 3.1163 -9.4895 -v -3.0224 3.4794 -2.9858 -v -3.0224 3.5551 0.0010 -v -3.0224 3.4600 -6.4648 -v -3.0224 3.4639 -9.4895 -v -1.2297 2.8239 -9.6496 -v -1.2297 2.8239 -9.4801 -v 0.5598 2.4497 -9.4323 -v 0.5598 2.4497 -9.6623 -v 0.4705 2.2594 -9.6623 -v -1.3037 2.6661 -9.6496 -v -1.3037 2.6661 -9.4801 -v 0.4705 2.2594 -9.4323 -v -2.8918 3.4698 -9.4056 -v -2.8918 3.4698 -9.6890 -v -3.0018 3.2353 -9.6890 -v -3.0018 3.2353 -9.4056 -v 0.3893 2.6757 -9.6890 -v 0.3893 2.6757 -9.4056 -v 0.6411 2.6757 -9.4056 -v 0.6411 2.6757 -9.6890 -v 0.4834 1.3380 -9.6496 -v 0.4834 1.3380 -9.4801 -v 0.6411 0.0002 -9.4056 -v 0.6411 0.0002 -9.6890 -v 0.3893 0.0002 -9.6890 -v 0.3139 1.3380 -9.6496 -v 0.3139 1.3380 -9.4801 -v 0.3893 0.0002 -9.4056 -v 0.2950 7.8989 5.9442 -v 4.0001 7.4224 6.2684 -v 4.0396 5.3313 2.3461 -v 0.4851 5.4078 2.0351 -v 3.3579 5.1783 10.1379 -v 6.9123 5.1783 10.4489 -v 7.7052 7.8989 6.5925 -v 4.0651 4.9919 2.3483 -v 0.4979 5.0684 2.0362 -v 11.1484 5.1783 2.9680 -v 11.4104 8.8943 6.9167 -v 11.4104 8.5550 6.9167 -v 11.1994 4.8389 2.9725 -v 10.4667 5.1783 10.7598 -v 10.4667 4.8389 10.7598 -v 3.3579 4.8389 10.1379 -v 6.9123 4.8389 10.4489 -v -3.7510 5.1783 9.5159 -v -3.4102 8.8943 5.6200 -v -3.4102 8.5550 5.6200 -v -3.7510 4.8389 9.5159 -v -3.0693 5.4843 1.7241 -v -3.0693 5.1449 1.7241 -v 4.0001 7.0830 6.2684 -v 0.2950 7.5595 5.9442 -v -0.1966 4.8389 9.8269 -v 7.5940 5.2548 2.6571 -v -0.1966 5.1783 9.8269 -v 7.6322 4.9154 2.6604 -v 7.7052 7.5595 6.5925 -v 12.3587 7.8263 7.3997 -v 12.4282 7.8263 6.6057 -v 12.4282 8.6234 6.6057 -v 12.3587 8.6234 7.3997 -v 11.4483 7.4442 6.5821 -v 10.4587 7.3108 6.5280 -v 10.4587 7.9194 6.5280 -v 11.4483 8.1175 6.5821 -v 11.3896 7.4442 7.2528 -v 10.4056 7.3108 7.1342 -v 11.3896 8.1175 7.2528 -v 10.4056 7.9194 7.1342 -v 10.3684 5.2975 3.2381 -v 10.6008 8.2940 6.8458 -v 10.0570 0.0002 6.7983 -v 10.3684 0.0002 3.2381 -v -3.1191 5.2975 9.2330 -v -3.1191 0.0002 9.2330 -v 9.7455 0.0002 10.3585 -v 9.7455 5.2975 10.3585 -v -2.4962 0.0002 2.1125 -v -2.4962 5.2975 2.1125 -v -2.8077 0.0002 5.6727 -v -2.8077 8.2940 5.6728 -v 10.3650 4.0799 6.8252 -v 10.4322 5.3049 6.8311 -v 10.3973 5.0138 7.2306 -v 10.3300 4.1037 7.2247 -v 10.3361 4.1256 7.5401 -v 10.2444 4.1256 7.5321 -v 10.2444 3.9945 7.5321 -v 10.3361 3.9945 7.5401 -v 10.4656 5.5197 6.8340 -v 10.3739 5.5197 6.8260 -v 10.3206 5.0963 7.4347 -v 10.4124 5.0963 7.4428 -v 10.4606 3.9945 6.1162 -v 10.3689 3.9945 6.1082 -v 10.3689 4.1256 6.1082 -v 10.4606 4.1256 6.1162 -v 10.3984 3.9489 6.8281 -v 10.3066 3.9489 6.8201 -v 10.3599 3.9945 6.2113 -v 10.4516 3.9945 6.2194 -v 10.4640 4.1037 7.2364 -v 10.4457 4.1256 7.4457 -v 10.4457 3.9945 7.4457 -v 10.4656 5.3049 6.8340 -v 10.4307 5.0138 7.2335 -v 10.5339 4.1122 6.4374 -v 10.5522 3.9945 6.2282 -v 10.5522 4.1256 6.2282 -v 10.4989 4.0799 6.8369 -v 10.4989 3.9489 6.8369 -v 10.3999 4.1122 6.4257 -v 10.4672 5.0138 6.4316 -v 10.5189 5.0963 6.2253 -v 10.4272 5.0963 6.2172 -v 10.3451 3.9945 7.4369 -v 10.2534 3.9945 7.4289 -v 10.5006 5.0138 6.4345 -v 10.3634 4.1037 7.2276 -v 10.4333 4.1122 6.4286 -v 10.3984 4.0799 6.8281 -v 10.4516 4.1256 6.2194 -v 10.3599 4.1256 6.2113 -v 10.3451 4.1256 7.4369 -v 10.2534 4.1256 7.4289 -v 10.4367 4.1256 7.5489 -v 10.4367 3.9945 7.5489 -v 10.5612 3.9945 6.1250 -v 10.5612 4.1256 6.1250 -v 11.3651 2.9155 5.2836 -v 11.3361 0.0002 5.6155 -v 9.8826 0.0002 5.4884 -v 9.9117 2.9155 5.1564 -v 10.1499 2.9295 8.1699 -v 10.1742 0.0002 7.8920 -v 10.3624 0.0002 5.7415 -v 10.3867 2.9295 5.4636 -v 9.6288 2.9295 8.3900 -v 9.6578 0.0002 8.0580 -v 11.1113 0.0002 8.1851 -v 11.0822 2.9155 8.5171 -v 11.1053 2.9155 8.2535 -v 11.1296 0.0002 7.9756 -v 11.3420 2.9155 5.5472 -v 11.3177 0.0002 5.8250 -v 11.4004 1.3976 5.4230 -v 11.5704 0.0002 5.5761 -v 11.1539 0.0002 5.5396 -v 11.1133 1.3976 5.3979 -v 11.3763 1.3976 5.6983 -v 11.5388 0.0002 5.9373 -v 11.0892 1.3976 5.6732 -v 11.1223 0.0002 5.9008 -v 11.1747 2.9493 5.2340 -v 11.6031 2.9493 5.2715 -v 11.5706 2.9493 5.6430 -v 11.1421 2.9493 5.6055 -v 10.2372 1.3976 5.4089 -v 10.2873 1.3976 5.1250 -v 10.4274 0.0002 5.2798 -v 10.3548 0.0002 5.6916 -v 10.5594 1.3976 5.1730 -v 10.7844 0.0002 5.3428 -v 10.5093 1.3976 5.4568 -v 10.7118 0.0002 5.7545 -v 10.2411 2.9493 5.3311 -v 10.3158 2.8021 4.9075 -v 10.6831 2.8021 4.9723 -v 10.6084 2.9493 5.3958 -v 11.1412 1.3976 8.3859 -v 10.8540 1.3976 8.3608 -v 10.9187 0.0002 8.2282 -v 11.3352 0.0002 8.2647 -v 11.1653 1.3976 8.1106 -v 11.3668 0.0002 7.9035 -v 10.9503 0.0002 7.8671 -v 10.8781 1.3976 8.0855 -v 10.8860 2.9493 8.5328 -v 11.3145 2.9493 8.5703 -v 11.3470 2.9493 8.1988 -v 10.9185 2.9493 8.1613 -v 10.1581 0.0002 8.3580 -v 9.9932 1.3976 8.4861 -v 9.9932 1.3976 8.1978 -v 10.1581 0.0002 7.9399 -v 10.2695 1.3976 8.4861 -v 10.5206 0.0002 8.3580 -v 10.2695 1.3976 8.1978 -v 10.5206 0.0002 7.9399 -v 9.9836 2.8021 8.7052 -v 9.9836 2.9493 8.2751 -v 10.3565 2.8021 8.7052 -v 10.3565 2.9493 8.2751 -v 11.7138 2.6373 5.0039 -v 11.5454 3.2124 6.9285 -v 10.1081 2.8457 6.8027 -v 10.2765 2.6373 4.8781 -v 11.5454 3.4690 6.9285 -v 11.7138 2.8940 5.0039 -v 10.2765 2.8940 4.8781 -v 10.1081 3.4690 6.8027 -v 9.9397 2.8940 8.7274 -v 9.9397 2.6373 8.7274 -v 11.3770 2.6373 8.8531 -v 11.3770 2.8940 8.8531 -v 9.9320 2.4684 10.4539 -v 9.4982 2.4684 10.4159 -v 9.3776 0.0002 10.6078 -v 10.1455 0.0002 10.6750 -v 10.1455 4.9367 10.6750 -v 9.3776 4.9367 10.6078 -v 10.2135 0.0002 9.8980 -v 9.9704 2.4684 10.0150 -v 10.2135 5.4628 9.8980 -v 9.4455 0.0002 9.8308 -v 9.5366 2.4684 9.9770 -v 9.4455 5.4628 9.8308 -v -3.2143 2.4684 9.3037 -v -3.4630 0.0002 9.4844 -v -2.6950 0.0002 9.5515 -v -2.7805 2.4684 9.3417 -v -2.6950 4.9367 9.5515 -v -3.4630 4.9367 9.4844 -v -3.1759 2.4684 8.8648 -v -3.3950 0.0002 8.7074 -v -3.3950 5.4628 8.7074 -v -2.7421 2.4684 8.9028 -v -2.6270 0.0002 8.7746 -v -2.6270 5.4628 8.7746 -v 10.4329 2.4684 3.1719 -v 10.6816 0.0002 2.9912 -v 9.9136 0.0002 2.9240 -v 9.9991 2.4684 3.1339 -v 9.9136 4.9367 2.9240 -v 10.6816 4.9367 2.9912 -v 10.3945 2.4684 3.6107 -v 10.6136 0.0002 3.7682 -v 10.6136 5.4628 3.7682 -v 9.9607 2.4684 3.5728 -v 9.8456 0.0002 3.7010 -v 9.8456 5.4628 3.7010 -v 10.2725 8.4537 7.3926 -v 10.3089 8.2809 7.3957 -v 11.3081 8.4928 7.4832 -v 11.2717 8.6657 7.4800 -v 10.2386 8.8098 6.9163 -v 10.2750 8.6370 6.9194 -v 11.2378 9.0218 7.0037 -v 11.2742 8.8490 7.0069 -v 10.2450 8.8214 6.8147 -v 10.2814 8.6486 6.8179 -v 11.2442 9.0334 6.9021 -v 11.2806 8.8606 6.9053 -v 10.3724 8.4537 6.2504 -v 11.3716 8.6657 6.3378 -v 11.4080 8.4928 6.3410 -v 10.4088 8.2809 6.2536 -v 10.2927 8.6370 6.7168 -v 10.2563 8.8098 6.7136 -v 11.2555 9.0218 6.8010 -v 11.2919 8.8490 6.8042 -v 10.3738 8.3641 7.4014 -v 9.3746 8.1521 7.3140 -v 9.4110 7.9793 7.3172 -v 10.4102 8.1912 7.4046 -v 10.3399 8.7202 6.9251 -v 9.3407 8.5082 6.8377 -v 9.3771 8.3354 6.8409 -v 10.3463 8.7318 6.8236 -v 9.3471 8.5198 6.7362 -v 9.3835 8.3470 6.7393 -v 10.4737 8.3641 6.2593 -v 10.5101 8.1912 6.2625 -v 9.5109 7.9793 6.1751 -v 9.4745 8.1521 6.1719 -v 10.3576 8.7202 6.7225 -v 9.3584 8.5082 6.6350 -v 9.3948 8.3354 6.6382 -v 9.5841 8.1138 7.3323 -v 8.5780 7.9373 7.2443 -v 8.6083 7.7633 7.2470 -v 9.6143 7.9398 7.3350 -v 9.5627 8.4723 6.8571 -v 8.5567 8.2959 6.7691 -v 8.5870 8.1219 6.7718 -v 9.5696 8.4840 6.7556 -v 8.5635 8.3076 6.6676 -v 8.5938 8.1336 6.6703 -v 9.6840 8.1138 6.1902 -v 9.7143 7.9398 6.1928 -v 8.7082 7.7633 6.1048 -v 8.6779 7.9373 6.1022 -v 9.5805 8.4723 6.6545 -v 8.5744 8.2959 6.5664 -v 8.6047 8.1219 6.5691 -v 8.6981 7.8694 7.2548 -v 7.6843 7.7457 7.1661 -v 7.7055 7.5703 7.1680 -v 8.7194 7.6941 7.2567 -v 8.6954 8.2307 6.7813 -v 7.6816 8.1070 6.6926 -v 7.7029 7.9316 6.6944 -v 8.7029 8.2425 6.6798 -v 7.6891 8.1188 6.5911 -v 7.7103 7.9435 6.5930 -v 8.7980 7.8694 6.1127 -v 8.8193 7.6941 6.1145 -v 7.8055 7.5703 6.0258 -v 7.7842 7.7457 6.0240 -v 8.7132 8.2307 6.5786 -v 7.6994 8.1070 6.4899 -v 7.7206 7.9316 6.4917 -v 7.7861 7.6652 7.1750 -v 6.7723 7.5414 7.0863 -v 6.7936 7.3661 7.0882 -v 7.8074 7.4898 7.1769 -v 7.7834 8.0265 6.7015 -v 6.7696 7.9027 6.6128 -v 6.7909 7.7274 6.6146 -v 7.7909 8.0383 6.6000 -v 6.7771 7.9145 6.5113 -v 6.7983 7.7392 6.5132 -v 7.8860 7.6652 6.0329 -v 7.9073 7.4898 6.0348 -v 6.8935 7.3661 5.9461 -v 6.8722 7.5414 5.9442 -v 7.8012 8.0265 6.4988 -v 6.7874 7.9027 6.4101 -v 6.8086 7.7274 6.4120 -v 6.8144 7.4996 7.0900 -v 5.8006 7.3759 7.0013 -v 5.8218 7.2005 7.0032 -v 6.8356 7.3243 7.0919 -v 6.8117 7.8610 6.6164 -v 5.7979 7.7372 6.5277 -v 5.8191 7.5619 6.5296 -v 6.8191 7.8728 6.5150 -v 5.8053 7.7490 6.4263 -v 5.8266 7.5737 6.4281 -v 6.9143 7.4996 5.9479 -v 6.9355 7.3243 5.9497 -v 5.9217 7.2005 5.8610 -v 5.9005 7.3759 5.8592 -v 6.8294 7.8610 6.4138 -v 5.8156 7.7372 6.3251 -v 5.8369 7.5619 6.3269 -v 6.1031 7.3800 7.0278 -v 5.0833 7.3252 6.9386 -v 5.0927 7.1488 6.9394 -v 6.1125 7.2037 7.0286 -v 6.1248 7.7435 6.5564 -v 5.1050 7.6887 6.4671 -v 5.1144 7.5123 6.4680 -v 6.1330 7.7554 6.4550 -v 5.1132 7.7006 6.3657 -v 5.1226 7.5242 6.3666 -v 6.2030 7.3800 5.8856 -v 6.2124 7.2037 5.8865 -v 5.1926 7.1488 5.7972 -v 5.1832 7.3252 5.7964 -v 6.1425 7.7435 6.3537 -v 5.1227 7.6887 6.2645 -v 5.1321 7.5123 6.2653 -v -0.3351 8.0506 6.4645 -v -1.3489 8.1743 6.3758 -v -1.3702 7.9990 6.3739 -v -0.3564 7.8752 6.4626 -v -0.2715 8.2366 5.9967 -v -0.2503 8.4119 5.9986 -v -1.2641 8.5356 5.9099 -v -1.2853 8.3603 5.9080 -v -0.2612 8.2484 5.8955 -v -0.2400 8.4237 5.8974 -v -1.2538 8.5475 5.8087 -v -1.2750 8.3721 5.8068 -v -0.2352 8.0506 5.3224 -v -0.2564 7.8752 5.3205 -v -1.2703 7.9990 5.2318 -v -1.2490 8.1743 5.2337 -v -0.2538 8.2366 5.7941 -v -0.2325 8.4119 5.7959 -v -1.2463 8.5356 5.7072 -v -1.2676 8.3603 5.7054 -v -0.4454 7.9614 6.4549 -v -0.4513 7.7848 6.4543 -v 0.5694 7.7502 6.5436 -v 0.5753 7.9268 6.5442 -v 0.6286 8.2906 6.0755 -v -0.3921 8.3251 5.9862 -v 0.6227 8.1140 6.0750 -v 0.6379 8.3025 5.9742 -v -0.3828 8.3370 5.8849 -v 0.6320 8.1259 5.9737 -v -0.3455 7.9614 5.3127 -v 0.6752 7.9268 5.4020 -v 0.6693 7.7502 5.4015 -v -0.3514 7.7848 5.3122 -v -0.3743 8.3251 5.7835 -v 0.6464 8.2906 5.8728 -v 0.6404 8.1140 5.8723 -v 0.5502 7.8315 6.5420 -v 0.5351 7.6555 6.5406 -v 1.5526 7.5677 6.6297 -v 1.5677 7.7437 6.6310 -v 1.6398 8.1064 6.1640 -v 0.6223 8.1941 6.0749 -v 1.6248 7.9304 6.1626 -v 1.6497 8.1182 6.0627 -v 0.6322 8.2060 5.9737 -v 1.6346 7.9422 6.0614 -v 0.6501 7.8315 5.3998 -v 1.6676 7.7437 5.4889 -v 1.6525 7.5677 5.4875 -v 0.6350 7.6555 5.3985 -v 0.6400 8.1941 5.8723 -v 1.6576 8.1064 5.9613 -v 1.6425 7.9304 5.9600 -v 1.4297 7.6668 6.6189 -v 1.4084 7.4915 6.6170 -v 2.4223 7.3677 6.7057 -v 2.4435 7.5431 6.7076 -v 2.5284 7.9044 6.2417 -v 1.5146 8.0282 6.1530 -v 2.5071 7.7291 6.2398 -v 2.5387 7.9162 6.1405 -v 1.5249 8.0400 6.0518 -v 2.5174 7.7409 6.1386 -v 1.5296 7.6668 5.4768 -v 2.5434 7.5431 5.5655 -v 2.5222 7.3677 5.5636 -v 1.5084 7.4915 5.4749 -v 1.5323 8.0282 5.9503 -v 2.5461 7.9044 6.0390 -v 2.5249 7.7291 6.0372 -v 2.3417 7.4696 6.6987 -v 2.3204 7.2943 6.6968 -v 3.3342 7.1705 6.7855 -v 3.3555 7.3458 6.7874 -v 3.4404 7.7072 6.3215 -v 2.4266 7.8309 6.2328 -v 3.4191 7.5318 6.3196 -v 3.4507 7.7190 6.2203 -v 2.4369 7.8427 6.1316 -v 3.4294 7.5436 6.2184 -v 2.4416 7.4696 5.5566 -v 3.4554 7.3459 5.6453 -v 3.4342 7.1705 5.6434 -v 2.4204 7.2943 5.5547 -v 2.4443 7.8309 6.0301 -v 3.4581 7.7072 6.1188 -v 3.4368 7.5318 6.1170 -v 3.3231 7.2372 6.7846 -v 3.3172 7.0606 6.7840 -v 4.3379 7.0261 6.8733 -v 4.3438 7.2026 6.8739 -v 4.3972 7.5664 6.4052 -v 3.3765 7.6010 6.3159 -v 4.3912 7.3898 6.4047 -v 4.4064 7.5783 6.3039 -v 3.3857 7.6129 6.2146 -v 4.4005 7.4017 6.3034 -v 3.4231 7.2372 5.6424 -v 4.4438 7.2026 5.7317 -v 4.4378 7.0261 5.7312 -v 3.4171 7.0606 5.6419 -v 3.3942 7.6010 6.1132 -v 4.4149 7.5664 6.2025 -v 4.4090 7.3898 6.2020 -v 4.1199 7.1416 6.8543 -v 4.1412 6.9662 6.8561 -v 5.1550 7.0900 6.9448 -v 5.1337 7.2654 6.9430 -v 5.1310 7.6267 6.4694 -v 4.1172 7.5029 6.3807 -v 5.1523 7.4513 6.4713 -v 5.1385 7.6385 6.3679 -v 4.1247 7.5147 6.2793 -v 5.1597 7.4632 6.3698 -v 4.2198 7.1416 5.7121 -v 5.2336 7.2654 5.8008 -v 5.2549 7.0900 5.8027 -v 4.2411 6.9662 5.7140 -v 4.1350 7.5029 6.1780 -v 5.1488 7.6267 6.2667 -v 5.1700 7.4513 6.2686 -v -1.3417 8.2934 6.3764 -v -2.3555 8.4171 6.2877 -v -2.3767 8.2418 6.2859 -v -1.3629 8.1180 6.3746 -v -1.2781 8.4794 5.9087 -v -1.2568 8.6547 5.9105 -v -2.2706 8.7785 5.8218 -v -2.2919 8.6031 5.8200 -v -1.2678 8.4912 5.8075 -v -1.2465 8.6665 5.8093 -v -2.2603 8.7903 5.7206 -v -2.2816 8.6149 5.7188 -v -1.2418 8.2934 5.2343 -v -1.2630 8.1180 5.2325 -v -2.2768 8.2418 5.1438 -v -2.2556 8.4171 5.1456 -v -1.2603 8.4794 5.7060 -v -1.2391 8.6547 5.7079 -v -2.2529 8.7785 5.6192 -v -2.2741 8.6031 5.6173 -v -2.1706 8.5487 6.3039 -v -3.1844 8.6725 6.2152 -v -3.2057 8.4971 6.2134 -v -2.1919 8.3734 6.3021 -v -2.1070 8.7347 5.8362 -v -2.0858 8.9101 5.8380 -v -3.0996 9.0338 5.7493 -v -3.1208 8.8585 5.7475 -v -2.0967 8.7465 5.7349 -v -2.0755 8.9219 5.7368 -v -3.0893 9.0456 5.6481 -v -3.1105 8.8703 5.6463 -v -2.0707 8.5487 5.1618 -v -2.0919 8.3734 5.1599 -v -3.1058 8.4971 5.0712 -v -3.0845 8.6725 5.0731 -v -2.0893 8.7347 5.6335 -v -2.0680 8.9101 5.6353 -v -3.0818 9.0338 5.5466 -v -3.1031 8.8585 5.5448 -v 9.3480 0.3779 10.3237 -v -2.8683 0.3779 9.2549 -v -2.8772 0.3779 9.3562 -v 9.3392 0.3779 10.4250 -v -2.8772 0.0002 9.3562 -v 9.3392 0.0002 10.4250 -v -2.8782 0.3779 6.7747 -v -2.9795 0.3779 6.7658 -v -3.1664 0.3779 8.9028 -v -3.0651 0.3779 8.9117 -v -2.9795 0.0002 6.7658 -v -3.1664 0.0002 8.9028 -v 9.8042 0.3779 10.3477 -v 9.9055 0.3779 10.3566 -v 10.5229 0.3779 3.2996 -v 10.4216 0.3779 3.2907 -v 9.9055 0.0002 10.3566 -v 10.5229 0.0002 3.2996 -v 9.9710 0.3779 3.2033 -v 9.9798 0.3779 3.1020 -v -2.2365 0.3779 2.0332 -v -2.2454 0.3779 2.1345 -v 9.9798 0.0002 3.1020 -v -2.2365 0.0002 2.0332 -v 6.2825 1.3390 10.6899 -v 6.7975 1.3390 10.7349 -v 6.4994 0.0002 11.8820 -v 5.9844 0.0002 11.8370 -v 6.7546 1.6838 11.2254 -v 6.4470 0.0002 12.4808 -v 6.2396 1.6838 11.1803 -v 5.9321 0.0002 12.4357 -v 6.1419 2.4485 10.0377 -v 6.6568 2.4485 10.0827 -v 6.6659 3.3186 9.9788 -v 6.1510 3.3186 9.9337 -v -0.4901 0.0002 11.2705 -v -0.5845 1.3390 10.0891 -v -0.0696 1.3390 10.1341 -v 0.0248 0.0002 11.3156 -v -0.6274 1.6838 10.5795 -v -0.5425 0.0002 11.8693 -v -0.1125 1.6838 10.6246 -v -0.0276 0.0002 11.9143 -v -0.3327 2.4485 9.4712 -v 0.1822 2.4485 9.5163 -v -0.3236 3.3186 9.3673 -v 0.1913 3.3186 9.4123 -v 0.4752 3.2250 2.8977 -v 0.5226 2.5917 0.6116 -v -1.1298 2.5281 1.2709 -v -0.6899 3.2157 2.9125 -v 0.6472 2.3846 -0.1240 -v -1.5696 2.8885 0.0197 -v -3.1039 3.3135 1.9302 -v -2.6769 3.1809 2.7944 -v -2.8102 3.4446 0.1425 -v -1.2386 2.9112 -0.2054 -v -1.2238 2.9112 -0.0365 -v 0.5631 2.5370 -0.1449 -v 0.5430 2.5370 -0.3740 -v 0.4541 2.3467 -0.3662 -v -1.3123 2.7534 -0.1989 -v -1.2976 2.7534 -0.0301 -v 0.4741 2.3467 -0.1371 -v -2.8731 3.5571 0.1826 -v -2.8978 3.5571 -0.0998 -v -3.0074 3.3226 -0.0902 -v -2.9827 3.3226 0.1921 -v 0.6848 2.9267 1.5054 -v 0.8535 2.5525 -0.2762 -v 0.6244 2.5525 -0.2962 -v 0.5160 2.9267 1.4906 -v 0.6784 2.7689 1.5792 -v 0.8457 2.3622 -0.1873 -v 0.5096 2.7689 1.5644 -v 0.6166 2.3622 -0.2073 -v 0.2969 3.5726 3.1399 -v 0.5793 3.5726 3.1646 -v 0.5697 3.3381 3.2742 -v 0.2873 3.3381 3.2495 -v 0.3963 2.6757 -0.1902 -v 0.8470 2.6757 -0.0261 -v 0.9928 2.6757 -0.4266 -v 0.5420 2.6757 -0.5906 -v 0.5420 0.0002 -0.5906 -v 0.5134 1.3380 -0.3170 -v 0.7829 1.3380 -0.2189 -v 0.9928 0.0002 -0.4266 -v 0.3963 0.0002 -0.1902 -v 0.4154 1.3380 -0.0475 -v 0.6848 1.3380 0.0506 -v 0.8470 0.0002 -0.0261 -v -6.7958 5.4344 6.3699 -v -6.7911 8.0770 6.3442 -v -6.7911 8.0770 6.8626 -v -6.7958 5.4344 7.0678 -v -6.7958 10.7195 6.3699 -v -6.7958 10.7195 7.0678 -v -7.3095 8.0770 6.3442 -v -7.4937 5.4344 6.3699 -v -7.4937 10.7195 6.3699 -v -7.3095 8.0770 6.8626 -v -7.4937 5.4344 7.0678 -v -7.4937 10.7195 7.0678 -v -6.7763 11.1923 3.0462 -v -6.7763 11.1923 6.3332 -v -2.9784 11.1924 6.3332 -v -2.9784 11.1923 3.0462 -v -2.6969 11.1924 2.7017 -v -2.6969 11.1924 6.6778 -v -2.6969 0.0002 6.6777 -v -2.6969 0.0002 2.7017 -v -7.0579 11.1923 2.7017 -v -7.0579 0.0002 2.7017 -v -7.0579 11.1924 6.6777 -v -7.0579 0.0002 6.6777 -v -2.9784 11.6198 3.0462 -v -2.9784 11.6355 6.3332 -v -2.6969 11.6355 6.6778 -v -2.6969 11.6198 2.7017 -v -6.7763 11.6198 3.0462 -v -7.0579 11.6198 2.7017 -v -6.7763 11.6355 6.3332 -v -7.0579 11.6355 6.6777 -v -2.7270 0.0002 6.5128 -v -2.7223 2.6427 6.4871 -v -2.7223 2.6427 7.0055 -v -2.7270 0.0002 7.2107 -v -2.7270 5.2853 6.5128 -v -2.7270 5.2853 7.2107 -v -3.2407 2.6427 6.4871 -v -3.4249 0.0002 6.5128 -v -3.4249 5.2853 6.5128 -v -3.2407 2.6427 7.0055 -v -3.4249 0.0002 7.2107 -v -3.4249 5.2853 7.2107 -v -6.7958 0.0002 6.3699 -v -6.7911 2.6427 6.3442 -v -6.7911 2.6427 6.8626 -v -6.7958 0.0002 7.0678 -v -6.7958 5.2853 6.3699 -v -6.7958 5.2853 7.0678 -v -7.3095 2.6427 6.3442 -v -7.4937 0.0002 6.3699 -v -7.4937 5.2853 6.3699 -v -7.3095 2.6427 6.8626 -v -7.4937 0.0002 7.0678 -v -7.4937 5.2853 7.0678 -v -6.9779 0.0002 2.5398 -v -6.9732 2.6427 2.5141 -v -6.9732 2.6427 3.0325 -v -6.9779 0.0002 3.2377 -v -6.9779 5.2853 2.5398 -v -6.9779 5.2853 3.2377 -v -7.4916 2.6427 2.5141 -v -7.6758 0.0002 2.5398 -v -7.6758 5.2853 2.5398 -v -7.4916 2.6427 3.0325 -v -7.6758 0.0002 3.2377 -v -7.6758 5.2853 3.2377 -v -6.9779 5.4344 2.5398 -v -6.9732 8.0770 2.5141 -v -6.9732 8.0770 3.0325 -v -6.9779 5.4344 3.2377 -v -6.9779 10.7195 2.5398 -v -6.9779 10.7195 3.2377 -v -7.4916 8.0770 2.5141 -v -7.6758 5.4344 2.5398 -v -7.6758 10.7195 2.5398 -v -7.4916 8.0770 3.0325 -v -7.6758 5.4344 3.2377 -v -7.6758 10.7195 3.2377 -v -2.0520 11.1446 4.6897 -v -2.0520 11.1446 7.2398 -v -2.0520 10.4007 7.2398 -v -2.0520 10.2636 4.6897 -v -4.8774 11.1446 2.1397 -v -2.0520 11.1446 2.1397 -v -2.0520 10.4007 2.1397 -v -4.8774 10.2636 2.1397 -v -7.7027 11.1446 4.6897 -v -7.7027 11.1446 2.1397 -v -7.7027 10.4007 2.1397 -v -7.7027 10.2636 4.6897 -v -4.8774 11.1446 7.2398 -v -7.7027 11.1446 7.2398 -v -7.7027 10.4007 7.2398 -v -4.8774 10.2636 7.2398 -v -4.8774 10.2636 6.6777 -v -2.6969 10.4007 6.6777 -v -7.0579 10.2636 4.6897 -v -7.0579 10.4007 6.6777 -v -4.8774 10.2636 2.7017 -v -7.0579 10.4007 2.7017 -v -2.6969 10.2636 4.6897 -v -2.6969 10.4007 2.7017 -v -2.6969 11.1446 4.6897 -v -2.6969 11.1446 6.6777 -v -4.8774 11.1446 2.7017 -v -2.6969 11.1446 2.7017 -v -7.0579 11.1446 4.6897 -v -7.0579 11.1446 2.7017 -v -4.8774 11.1446 6.6777 -v -7.0579 11.1446 6.6777 -v -2.0520 5.7104 4.6897 -v -2.0520 5.7104 7.2398 -v -2.0520 4.9664 7.2398 -v -2.0520 4.8293 4.6897 -v -4.8774 5.7104 2.1397 -v -2.0520 5.7104 2.1397 -v -2.0520 4.9664 2.1397 -v -4.8774 4.8293 2.1397 -v -7.7027 5.7104 4.6897 -v -7.7027 5.7104 2.1397 -v -7.7027 4.9664 2.1397 -v -7.7027 4.8293 4.6897 -v -4.8774 5.7104 7.2398 -v -7.7027 5.7104 7.2398 -v -7.7027 4.9664 7.2398 -v -4.8774 4.8293 7.2398 -v -4.8774 4.8293 6.6777 -v -2.6969 4.9664 6.6777 -v -7.0579 4.8293 4.6897 -v -7.0579 4.9664 6.6777 -v -4.8774 4.8293 2.7017 -v -7.0579 4.9664 2.7017 -v -2.6969 4.8293 4.6897 -v -2.6969 4.9664 2.7017 -v -2.6969 5.7104 4.6897 -v -2.6969 5.7104 6.6777 -v -4.8774 5.7104 2.7017 -v -2.6969 5.7104 2.7017 -v -7.0579 5.7104 4.6897 -v -7.0579 5.7104 2.7017 -v -4.8774 5.7104 6.6777 -v -7.0579 5.7104 6.6777 -v -2.9788 5.4344 3.1190 -v -2.9812 8.0770 3.1450 -v -3.0264 8.0770 2.6286 -v -3.0396 5.4344 2.4238 -v -2.9788 10.7195 3.1190 -v -3.0396 10.7195 2.4238 -v -2.4648 8.0770 3.0998 -v -2.2836 5.4344 3.0582 -v -2.2836 10.7195 3.0582 -v -2.5100 8.0770 2.5834 -v -2.3444 5.4344 2.3629 -v -2.3444 10.7195 2.3629 -v -6.5153 13.0097 3.5380 -v -6.4668 13.0097 3.7033 -v -6.2096 12.6417 3.5380 -v -6.3366 13.0097 3.8161 -v -6.1661 13.0155 3.8406 -v -6.0094 13.0155 3.7691 -v -5.9163 13.0097 3.6241 -v -5.9163 13.0097 3.4519 -v -6.0094 13.0097 3.3070 -v -6.1661 13.0097 3.2354 -v -6.3366 13.0097 3.2599 -v -6.4668 13.0097 3.3727 -v -6.6423 11.7965 3.8161 -v -6.4316 12.1656 3.6807 -v -6.4735 12.1656 3.5380 -v -6.7239 11.7965 3.5380 -v -6.4233 11.7965 4.0059 -v -6.3192 12.1656 3.7781 -v -6.1364 11.7965 4.0471 -v -6.1720 12.1656 3.7992 -v -5.8728 11.7965 3.9267 -v -6.0368 12.1656 3.7375 -v -5.7161 11.7965 3.6829 -v -5.9564 12.1656 3.6124 -v -5.7161 11.7965 3.3931 -v -5.9564 12.1656 3.4637 -v -5.8728 11.7965 3.1493 -v -6.0368 12.1656 3.3386 -v -6.1364 11.7965 3.0289 -v -6.1720 12.1656 3.2768 -v -6.4233 11.7965 3.0702 -v -6.3192 12.1656 3.2980 -v -6.6423 11.7965 3.2599 -v -6.4316 12.1656 3.3954 -v -6.6804 11.4811 3.8406 -v -6.7693 11.4811 3.5380 -v -6.4421 11.4811 4.0471 -v -6.1299 11.4811 4.0920 -v -5.8431 11.4811 3.9610 -v -5.6726 11.4811 3.6957 -v -5.6726 11.4811 3.3803 -v -5.8431 11.4811 3.1150 -v -6.1299 11.4811 2.9840 -v -6.4421 11.4811 3.0289 -v -6.6804 11.4811 3.2354 -v -6.5691 11.1913 3.7691 -v -6.6369 11.1913 3.5380 -v -6.3871 11.1913 3.9267 -v -6.1488 11.1913 3.9610 -v -5.9298 11.1913 3.8610 -v -5.7996 11.1913 3.6584 -v -5.7996 11.1913 3.4176 -v -5.9298 11.1913 3.2151 -v -6.1488 11.1913 3.1150 -v -6.3871 11.1913 3.1493 -v -6.5691 11.1913 3.3070 -v -5.6312 12.2475 5.0831 -v -5.6312 12.2475 6.1931 -v -4.5212 12.2475 6.1931 -v -4.5212 12.2475 5.0831 -v -4.5629 11.7199 5.1248 -v -4.5629 11.7199 6.1513 -v -4.5212 11.1924 6.1931 -v -4.5212 11.1924 5.0831 -v -5.5895 11.7199 5.1248 -v -5.6312 11.1924 5.0831 -v -5.5895 11.7199 6.1513 -v -5.6312 11.1924 6.1931 -v -4.9724 13.3027 5.0831 -v -4.9724 13.3027 6.1931 -v -3.8624 13.3027 6.1931 -v -3.8624 13.3027 5.0831 -v -3.9042 12.7751 5.1248 -v -3.9042 12.7751 6.1513 -v -3.8624 12.2475 6.1931 -v -3.8624 12.2475 5.0831 -v -4.9307 12.7751 5.1248 -v -4.9724 12.2475 5.0831 -v -4.9307 12.7751 6.1513 -v -4.9724 12.2475 6.1931 -v -4.3095 12.2475 5.0831 -v -4.3095 12.2475 6.1931 -v -3.1995 12.2475 6.1931 -v -3.1995 12.2475 5.0831 -v -3.2412 11.7199 5.1248 -v -3.2412 11.7199 6.1513 -v -3.1995 11.1924 6.1931 -v -3.1995 11.1924 5.0831 -v -4.2677 11.7199 5.1248 -v -4.3095 11.1924 5.0831 -v -4.2677 11.7199 6.1513 -v -4.3095 11.1924 6.1931 -v -2.1016 1.0554 -10.4453 -v -2.1016 1.0554 -9.3353 -v -0.9916 1.0554 -9.3353 -v -0.9916 1.0554 -10.4453 -v -1.0333 0.5278 -10.4035 -v -1.0333 0.5278 -9.3770 -v -0.9916 0.0002 -9.3353 -v -0.9916 0.0002 -10.4453 -v -2.0599 0.5278 -10.4035 -v -2.1016 0.0002 -10.4453 -v -2.0599 0.5278 -9.3770 -v -2.1016 0.0002 -9.3353 -v -0.4238 9.0911 1.0076 -v -0.7481 9.1307 1.2453 -v -0.7462 8.2490 1.2440 -v -0.4209 8.1698 1.0056 -v 0.8136 8.7366 0.1412 -v 0.8501 9.3745 0.1156 -v 0.5590 9.2199 0.3088 -v 0.5648 8.4275 0.3048 -v 0.2346 8.2590 0.5361 -v 0.2298 9.1357 0.5394 -v -0.0995 9.0515 0.7700 -v -0.0957 8.0906 0.7673 -v -1.0298 9.2376 1.4426 -v -0.7500 10.0124 1.2467 -v -1.0784 10.0124 1.4766 -v -0.4267 10.0124 1.0097 -v -0.4392 10.5501 0.9784 -v -0.7754 10.5323 1.2333 -v 0.8866 10.0124 0.0901 -v 0.9081 11.0342 -0.0655 -v 0.5695 10.8552 0.1951 -v 0.5533 10.0124 0.3129 -v 0.2250 10.0124 0.5428 -v 0.2333 10.7115 0.4593 -v -0.1030 10.5679 0.7235 -v -0.1033 10.0124 0.7727 -v -1.1141 10.6391 1.4846 -v -0.8008 11.0523 1.2199 -v -1.1499 11.2658 1.4927 -v 1.1412 9.5290 -0.0776 -v 1.2199 10.0124 -0.1327 -v -1.2163 8.6765 1.5731 -v -0.9812 8.4627 1.4086 -v -1.3115 9.3444 1.6398 -v -0.4517 11.0878 0.9471 -v -0.1026 11.1234 0.6743 -v 0.9297 12.0560 -0.2212 -v 1.2468 11.2131 -0.3262 -v 1.2737 12.4139 -0.5197 -v 0.2415 11.4107 0.3758 -v 0.5856 11.6980 0.0773 -v -1.4067 10.0124 1.7065 -v -1.4529 10.7459 1.7360 -v 1.0625 9.0457 -0.0225 -v -1.4990 11.4794 1.7655 -v 1.2550 12.4098 -0.5440 -v -2.8087 10.9913 2.8559 -v -2.8274 10.9872 2.8316 -v 1.2409 12.4366 -0.5498 -v -2.8415 11.0140 2.8258 -v 1.2508 12.4573 -0.5291 -v -2.8316 11.0347 2.8465 -v 1.2711 12.4433 -0.5105 -v -2.8113 11.0207 2.8651 -v -9.3037 6.0183 6.5129 -v -9.2221 5.9964 6.4478 -v -10.8287 0.0002 6.1684 -v -10.9648 0.0221 6.2770 -v -9.2725 6.0099 6.6182 -v -10.9128 0.0137 6.4526 -v -9.1716 5.9829 6.6182 -v -10.7447 -0.0133 6.4526 -v -9.1405 5.9745 6.5129 -v -10.6927 -0.0217 6.2770 -v -7.6658 12.0061 6.4018 -v -7.5650 11.9791 6.4018 -v -7.5338 11.9708 6.2964 -v -7.6970 12.0145 6.2964 -v -7.6154 11.9926 6.2313 -v -8.4187 8.9945 6.3155 -v -8.5003 9.0164 6.3806 -v -8.4692 9.0080 6.4860 -v -8.3683 8.9810 6.4860 -v -8.3371 8.9727 6.3806 -v -7.7049 11.7782 4.9479 -v -7.6811 11.7472 4.9479 -v -7.6812 11.7472 6.3000 -v -7.7049 11.7782 6.3000 -v -7.6835 11.8125 4.9479 -v -7.6835 11.8125 6.3000 -v -7.6465 11.8026 4.9479 -v -7.6465 11.8026 6.3000 -v -7.6451 11.7622 4.9479 -v -7.6451 11.7622 6.3000 -v -9.3037 6.0183 5.0900 -v -9.2221 5.9964 5.0249 -v -10.8287 0.0002 4.7556 -v -10.9560 0.0221 4.8572 -v -9.2725 6.0099 5.1954 -v -10.9074 0.0137 5.0216 -v -9.1716 5.9829 5.1954 -v -10.7501 -0.0133 5.0216 -v -9.1405 5.9745 5.0900 -v -10.7014 -0.0217 4.8572 -v -7.6658 12.0061 4.9789 -v -7.5650 11.9791 4.9789 -v -7.5338 11.9708 4.8735 -v -7.6970 12.0145 4.8735 -v -7.6154 11.9926 4.8084 -v -8.4187 8.9945 4.8926 -v -8.5003 9.0164 4.9577 -v -8.4692 9.0080 5.0631 -v -8.3683 8.9810 5.0631 -v -8.3371 8.9727 4.9577 -v -7.8916 11.0814 4.9479 -v -7.8679 11.0503 4.9479 -v -7.8679 11.0503 6.3000 -v -7.8916 11.0814 6.3000 -v -7.8702 11.1156 4.9479 -v -7.8702 11.1156 6.3000 -v -7.8332 11.1057 4.9479 -v -7.8332 11.1057 6.3000 -v -7.8318 11.0654 4.9479 -v -7.8318 11.0654 6.3000 -v -2.9837 8.0770 6.8093 -v -2.9837 8.0770 6.2910 -v -2.9790 5.4344 6.3166 -v -2.9790 5.4344 7.0145 -v -2.9790 10.7195 6.3166 -v -2.9790 10.7195 7.0145 -v -2.4653 8.0770 6.2910 -v -2.2811 5.4344 6.3166 -v -2.2811 10.7195 6.3166 -v -2.4653 8.0770 6.8093 -v -2.2811 5.4344 7.0145 -v -2.2811 10.7195 7.0145 -v -8.2650 9.6877 4.9479 -v -8.2413 9.6567 4.9479 -v -8.2413 9.6567 6.3000 -v -8.2650 9.6877 6.3000 -v -8.2436 9.7220 4.9479 -v -8.2436 9.7220 6.3000 -v -8.2067 9.7121 4.9479 -v -8.2067 9.7121 6.3000 -v -8.2052 9.6717 4.9479 -v -8.2052 9.6717 6.3000 -v -8.4517 8.9909 5.0144 -v -8.4280 8.9599 5.0144 -v -8.4280 8.9599 6.3665 -v -8.4517 8.9909 6.3665 -v -8.4303 9.0251 5.0144 -v -8.4303 9.0251 6.3665 -v -8.3934 9.0152 5.0144 -v -8.3934 9.0152 6.3665 -v -8.3919 8.9749 5.0144 -v -8.3919 8.9749 6.3665 -v -8.6384 8.2941 5.0875 -v -8.6147 8.2630 5.0875 -v -8.6147 8.2630 6.4396 -v -8.6384 8.2941 6.4396 -v -8.6170 8.3283 5.0875 -v -8.6170 8.3283 6.4396 -v -8.5801 8.3184 5.0875 -v -8.5801 8.3184 6.4396 -v -8.5787 8.2781 5.0875 -v -8.5787 8.2781 6.4396 -v -8.8252 7.5972 5.0440 -v -8.8014 7.5662 5.0440 -v -8.8014 7.5662 6.3961 -v -8.8252 7.5972 6.3961 -v -8.8038 7.6315 5.0440 -v -8.8038 7.6315 6.3961 -v -8.7668 7.6216 5.0440 -v -8.7668 7.6216 6.3961 -v -8.7654 7.5812 5.0440 -v -8.7654 7.5812 6.3961 -v -9.1986 6.2036 5.1576 -v -9.1749 6.1725 5.1576 -v -9.1749 6.1725 6.5097 -v -9.1986 6.2036 6.5097 -v -9.1772 6.2378 5.1576 -v -9.1772 6.2378 6.5097 -v -9.1402 6.2279 5.1576 -v -9.1402 6.2279 6.5097 -v -9.1388 6.1876 5.1576 -v -9.1388 6.1876 6.5097 -v -9.5720 4.8099 5.1447 -v -9.5483 4.7789 5.1447 -v -9.5483 4.7789 6.4968 -v -9.5720 4.8099 6.4968 -v -9.5506 4.8442 5.1447 -v -9.5506 4.8442 6.4968 -v -9.5137 4.8343 5.1447 -v -9.5137 4.8343 6.4968 -v -9.5122 4.7939 5.1447 -v -9.5122 4.7939 6.4968 -v -9.3853 5.5068 5.1362 -v -9.3616 5.4757 5.1362 -v -9.3616 5.4757 6.4883 -v -9.3853 5.5068 6.4883 -v -9.3639 5.5410 5.1362 -v -9.3639 5.5410 6.4883 -v -9.3269 5.5311 5.1362 -v -9.3269 5.5311 6.4883 -v -9.3255 5.4907 5.1362 -v -9.3255 5.4907 6.4883 -v -9.0119 6.9004 5.0881 -v -8.9882 6.8694 5.0881 -v -8.9882 6.8694 6.4401 -v -9.0119 6.9004 6.4401 -v -8.9905 6.9346 5.0881 -v -8.9905 6.9346 6.4401 -v -8.9535 6.9247 5.0881 -v -8.9535 6.9247 6.4401 -v -8.9521 6.8844 5.0881 -v -8.9521 6.8844 6.4401 -v -9.7587 4.1131 5.1029 -v -9.7350 4.0820 5.1029 -v -9.7350 4.0820 6.4550 -v -9.7587 4.1131 6.4550 -v -9.7373 4.1473 5.1029 -v -9.7373 4.1473 6.4550 -v -9.7004 4.1374 5.1029 -v -9.7004 4.1374 6.4550 -v -9.6989 4.0971 5.1029 -v -9.6989 4.0971 6.4550 -v -9.9455 3.4163 5.0642 -v -9.9217 3.3852 5.0642 -v -9.9217 3.3852 6.4163 -v -9.9455 3.4163 6.4163 -v -9.9240 3.4505 5.0642 -v -9.9240 3.4505 6.4163 -v -9.8871 3.4406 5.0642 -v -9.8871 3.4406 6.4163 -v -9.8857 3.4002 5.0642 -v -9.8857 3.4002 6.4163 -v -10.1322 2.7194 5.1111 -v -10.1084 2.6884 5.1111 -v -10.1084 2.6884 6.4632 -v -10.1322 2.7194 6.4632 -v -10.1108 2.7537 5.1111 -v -10.1108 2.7537 6.4632 -v -10.0738 2.7438 5.1111 -v -10.0738 2.7438 6.4632 -v -10.0724 2.7034 5.1111 -v -10.0724 2.7034 6.4632 -v -10.3189 2.0226 5.0244 -v -10.2952 1.9915 5.0244 -v -10.2952 1.9915 6.3764 -v -10.3189 2.0226 6.3764 -v -10.2975 2.0568 5.0244 -v -10.2975 2.0568 6.3764 -v -10.2605 2.0469 5.0244 -v -10.2605 2.0469 6.3764 -v -10.2591 2.0066 5.0244 -v -10.2591 2.0066 6.3764 -v -10.5056 1.3258 4.9479 -v -10.4819 1.2947 4.9479 -v -10.4819 1.2947 6.3000 -v -10.5056 1.3258 6.3000 -v -10.4842 1.3600 4.9479 -v -10.4842 1.3600 6.3000 -v -10.4472 1.3501 4.9479 -v -10.4472 1.3501 6.3000 -v -10.4458 1.3098 4.9479 -v -10.4458 1.3098 6.3000 -v -10.6923 0.6289 4.9479 -v -10.6686 0.5979 4.9479 -v -10.6686 0.5979 6.3000 -v -10.6923 0.6289 6.3000 -v -10.6709 0.6632 4.9479 -v -10.6709 0.6632 6.3000 -v -10.6340 0.6533 4.9479 -v -10.6340 0.6533 6.3000 -v -10.6325 0.6129 4.9479 -v -10.6325 0.6129 6.3000 -v -2.5116 2.8029 2.1331 -v -2.2308 0.5479 2.1282 -v -2.7703 0.5479 1.6755 -v -2.8164 2.8029 1.8774 -v -2.7703 5.0580 1.6755 -v -2.2308 5.0580 2.1282 -v -2.7703 2.8029 2.4415 -v -2.6888 0.5479 2.6741 -v -2.6888 5.5387 2.6741 -v -3.0751 2.8029 2.1857 -v -3.2284 0.5479 2.2214 -v -3.2284 5.5387 2.2214 -v -8.0783 10.3846 4.9479 -v -8.0546 10.3535 4.9479 -v -8.0546 10.3535 6.3000 -v -8.0783 10.3846 6.3000 -v -8.0569 10.4188 4.9479 -v -8.0569 10.4188 6.3000 -v -8.0199 10.4089 4.9479 -v -8.0199 10.4089 6.3000 -v -8.0185 10.3685 4.9479 -v -8.0185 10.3685 6.3000 -v -0.4624 0.6639 -8.4482 -v -0.4624 1.1792 -8.4482 -v 0.9419 0.5798 -8.4482 -v 0.9419 0.4156 -8.4482 -v -0.4624 1.0343 -6.6030 -v -0.4624 0.5190 -6.6030 -v -0.3985 1.2576 -8.3389 -v 0.8795 0.6805 -8.3389 -v 0.9426 0.6693 -8.4482 -v -0.4617 1.2687 -8.4482 -v -0.4617 1.1238 -6.6030 -v -0.3985 1.1127 -6.6030 -v 0.8795 0.5356 -6.6030 -v 0.8787 0.5909 -8.3389 -v 0.8787 0.4585 -6.6030 -v -0.3993 1.1680 -8.3389 -v 0.7683 0.5204 -6.4465 -v -0.2351 1.0678 -6.4465 -v -0.2351 1.0443 -5.0016 -v 0.7683 0.4970 -5.0016 -v 0.9419 0.4348 -6.6030 -v 0.9419 0.4067 -4.8671 -v 0.9419 0.2426 -4.8671 -v 0.9419 0.2707 -6.6030 -v 0.8795 0.5074 -4.8671 -v 0.9426 0.4962 -4.8671 -v 0.9426 0.5244 -6.6030 -v -0.3985 1.0845 -4.8671 -v -0.3993 1.0195 -4.8671 -v -0.3993 1.0195 -6.6030 -v -0.4624 1.0061 -4.8671 -v -0.4624 0.4908 -4.8671 -v -0.4617 1.0957 -4.8671 -v 0.8787 0.4351 -4.8671 -v 0.7657 0.6533 -8.1839 -v -0.2352 1.2001 -8.1839 -v -0.2352 1.0782 -6.7233 -v 0.7657 0.5313 -6.7233 -v 0.7414 0.4585 -6.4575 -v 0.7414 0.4351 -5.0126 -v 0.7517 0.4351 -4.8671 -v -0.2607 1.1414 -8.2012 -v 0.7402 0.5946 -8.2012 -v -0.2607 1.0195 -6.7406 -v 0.7402 0.4726 -6.7406 -v 0.7402 0.4585 -6.6030 -v -0.2620 1.0059 -6.4575 -v -0.2620 0.9525 -5.0065 -v -0.2607 1.0059 -6.6030 -v 0.9419 0.5798 -1.2860 -v -0.4624 1.1792 -1.2860 -v -0.4624 0.6639 -1.2860 -v 0.9419 0.4156 -1.2860 -v -0.4624 1.0343 -3.1312 -v -0.4624 0.5190 -3.1312 -v -0.3985 1.2576 -1.3954 -v -0.4617 1.2688 -1.2860 -v 0.9426 0.6693 -1.2860 -v 0.8795 0.6805 -1.3954 -v -0.3985 1.1127 -3.1312 -v -0.4617 1.1238 -3.1312 -v 0.8795 0.5356 -3.1312 -v 0.8787 0.4585 -3.1312 -v 0.8787 0.5909 -1.3954 -v -0.3993 1.1680 -1.3954 -v -0.2351 1.0443 -4.7326 -v -0.2351 1.0678 -3.2877 -v 0.7683 0.5204 -3.2877 -v 0.7683 0.4970 -4.7326 -v 0.9419 0.4348 -3.1312 -v 0.9419 0.2707 -3.1312 -v 0.9426 0.5244 -3.1312 -v -0.3993 1.0195 -3.1312 -v -0.2352 1.0782 -3.0109 -v -0.2352 1.2001 -1.5503 -v 0.7657 0.6533 -1.5503 -v 0.7657 0.5313 -3.0109 -v 0.7414 0.4585 -3.2767 -v 0.7414 0.4351 -4.7216 -v -0.2607 1.1414 -1.5330 -v 0.7402 0.5946 -1.5330 -v -0.2607 1.0195 -2.9936 -v 0.7402 0.4726 -2.9936 -v 0.7402 0.4585 -3.1312 -v -0.2620 1.0059 -3.2767 -v -0.2620 0.9525 -4.7277 -v -0.2607 1.0059 -3.1312 -v 0.3667 0.9579 -7.4260 -v 0.4136 0.8449 -7.4260 -v 0.5265 0.9579 -7.3598 -v 0.5265 0.7981 -7.4260 -v 0.6395 0.8449 -7.4260 -v 0.6863 0.9579 -7.4260 -v 0.6395 1.0709 -7.4260 -v 0.5265 1.1177 -7.4260 -v 0.4136 1.0709 -7.4260 -v 0.3667 0.7981 -7.5858 -v 0.3006 0.9579 -7.5858 -v 0.6863 0.7981 -7.5858 -v 0.5265 0.7319 -7.5858 -v 0.7525 0.9579 -7.5858 -v 0.6863 1.1177 -7.5858 -v 0.5265 1.1839 -7.5858 -v 0.3667 1.1177 -7.5858 -v 0.4136 0.8449 -7.7456 -v 0.3667 0.9579 -7.7456 -v 0.6395 0.8449 -7.7456 -v 0.5265 0.7981 -7.7456 -v 0.6863 0.9579 -7.7456 -v 0.6395 1.0709 -7.7456 -v 0.5265 1.1177 -7.7456 -v 0.4136 1.0709 -7.7456 -v 0.5265 0.9579 -7.8118 -v 0.0422 1.0581 -7.1382 -v 0.0890 0.9451 -7.1382 -v 0.2020 1.0581 -7.0720 -v 0.2020 0.8983 -7.1382 -v 0.3150 0.9451 -7.1382 -v 0.3618 1.0581 -7.1382 -v 0.3150 1.1711 -7.1382 -v 0.2020 1.2179 -7.1382 -v 0.0890 1.1711 -7.1382 -v 0.0422 0.8983 -7.2980 -v -0.0240 1.0581 -7.2980 -v 0.3618 0.8983 -7.2980 -v 0.2020 0.8322 -7.2980 -v 0.4280 1.0581 -7.2980 -v 0.3618 1.2179 -7.2980 -v 0.2020 1.2841 -7.2980 -v 0.0422 1.2179 -7.2980 -v 0.0890 0.9451 -7.4578 -v 0.0422 1.0581 -7.4578 -v 0.3150 0.9451 -7.4578 -v 0.2020 0.8983 -7.4578 -v 0.3618 1.0581 -7.4578 -v 0.3150 1.1711 -7.4578 -v 0.2020 1.2179 -7.4578 -v 0.0890 1.1711 -7.4578 -v 0.2020 1.0581 -7.5240 -v 0.3667 0.9579 -6.8213 -v 0.4136 0.8449 -6.8213 -v 0.5265 0.9579 -6.7551 -v 0.5265 0.7981 -6.8213 -v 0.6395 0.8449 -6.8213 -v 0.6863 0.9579 -6.8213 -v 0.6395 1.0709 -6.8213 -v 0.5265 1.1177 -6.8213 -v 0.4136 1.0709 -6.8213 -v 0.3667 0.7981 -6.9811 -v 0.3006 0.9579 -6.9811 -v 0.6863 0.7981 -6.9811 -v 0.5265 0.7319 -6.9811 -v 0.7525 0.9579 -6.9811 -v 0.6863 1.1177 -6.9811 -v 0.5265 1.1839 -6.9811 -v 0.3667 1.1177 -6.9811 -v 0.4136 0.8449 -7.1409 -v 0.3667 0.9579 -7.1409 -v 0.6395 0.8449 -7.1409 -v 0.5265 0.7981 -7.1409 -v 0.6863 0.9579 -7.1409 -v 0.6395 1.0709 -7.1409 -v 0.5265 1.1177 -7.1409 -v 0.4136 1.0709 -7.1409 -v 0.5265 0.9579 -7.2071 -v 1.1147 -0.1222 -7.2632 -v 1.1615 -0.1949 -7.3498 -v 1.2745 -0.1729 -7.2207 -v 1.2745 -0.2249 -7.3856 -v 1.3875 -0.1949 -7.3498 -v 1.4343 -0.1222 -7.2632 -v 1.3875 -0.0496 -7.1766 -v 1.2745 -0.0195 -7.1408 -v 1.1615 -0.0496 -7.1766 -v 1.1147 -0.1025 -7.4883 -v 1.0485 0.0002 -7.3659 -v 1.2745 -0.1451 -7.5390 -v 1.4343 -0.1025 -7.4883 -v 1.5005 0.0002 -7.3659 -v 1.4343 0.1029 -7.2435 -v 1.2745 0.1455 -7.1928 -v 1.1147 0.1029 -7.2435 -v 0.9039 0.2883 -8.3941 -v 0.9039 0.2883 -8.3135 -v 0.9392 0.0002 -8.3242 -v 0.9392 0.0002 -8.4305 -v 0.8329 0.0002 -8.4305 -v 0.8232 0.2883 -8.3941 -v 0.8329 0.0002 -8.3242 -v 0.8232 0.2883 -8.3135 -v 0.9392 0.5764 -8.3242 -v 0.9392 0.5764 -8.4305 -v 0.8329 0.5764 -8.4305 -v 0.8329 0.5764 -8.3242 -v -0.2959 0.3757 -8.3941 -v -0.2959 0.3757 -8.3135 -v -0.2606 0.0002 -8.3242 -v -0.2606 0.0002 -8.4305 -v -0.3668 0.0002 -8.4305 -v -0.3766 0.3757 -8.3941 -v -0.3668 0.0002 -8.3242 -v -0.3766 0.3757 -8.3135 -v -0.2606 0.7511 -8.3242 -v -0.2606 0.7511 -8.4305 -v -0.3668 0.7511 -8.4305 -v -0.3668 0.7511 -8.3242 -v 0.9039 0.2883 -1.3718 -v 0.9392 0.0002 -1.3355 -v 0.9392 0.0002 -1.4417 -v 0.9039 0.2883 -1.4525 -v 0.8232 0.2883 -1.3718 -v 0.8329 0.0002 -1.3355 -v 0.8232 0.2883 -1.4525 -v 0.8329 0.0002 -1.4417 -v 0.9392 0.5764 -1.4417 -v 0.9392 0.5764 -1.3355 -v 0.8329 0.5764 -1.3355 -v 0.8329 0.5764 -1.4417 -v 1.4770 0.6639 0.6729 -v 1.4770 1.1792 0.6729 -v 1.4770 0.5798 -0.7314 -v 1.4770 0.4156 -0.7314 -v 3.3223 1.0343 0.6729 -v 3.3223 0.5190 0.6729 -v 1.5864 1.2576 0.6090 -v 1.5864 0.6805 -0.6690 -v 1.4770 0.6693 -0.7321 -v 1.4770 1.2688 0.6721 -v 3.3223 1.1238 0.6721 -v 3.3223 1.1127 0.6090 -v 3.3223 0.5356 -0.6690 -v 1.5864 0.5909 -0.6683 -v 3.3223 0.4585 -0.6683 -v 1.5864 1.1680 0.6097 -v 3.4787 0.5204 -0.5578 -v 3.4787 1.0678 0.4456 -v 4.9236 1.0443 0.4456 -v 4.9236 0.4970 -0.5578 -v 3.3223 0.4348 -0.7314 -v 5.0581 0.4067 -0.7314 -v 5.0581 0.2426 -0.7314 -v 3.3223 0.2707 -0.7314 -v 5.0581 0.5074 -0.6690 -v 5.0581 0.4962 -0.7321 -v 3.3223 0.5244 -0.7321 -v 5.0581 1.0845 0.6090 -v 5.0581 1.0195 0.6097 -v 3.3223 1.0195 0.6097 -v 5.0581 1.0061 0.6729 -v 5.0581 0.4908 0.6729 -v 5.0581 1.0957 0.6721 -v 5.0581 0.4351 -0.6683 -v 1.7413 0.6533 -0.5552 -v 1.7413 1.2001 0.4457 -v 3.2019 1.0782 0.4457 -v 3.2019 0.5313 -0.5552 -v 3.4678 0.4585 -0.5310 -v 4.9126 0.4351 -0.5310 -v 5.0581 0.4351 -0.5413 -v 1.7240 1.1414 0.4712 -v 1.7240 0.5946 -0.5297 -v 3.1846 1.0195 0.4712 -v 3.1846 0.4726 -0.5297 -v 3.3223 0.4585 -0.5297 -v 3.4678 1.0059 0.4724 -v 4.9188 0.9525 0.4724 -v 3.3223 1.0059 0.4712 -v 8.6393 0.5798 -0.7314 -v 8.6393 1.1792 0.6729 -v 8.6393 0.6639 0.6729 -v 8.6393 0.4156 -0.7314 -v 6.7940 1.0343 0.6729 -v 6.7940 0.5190 0.6729 -v 8.5299 1.2576 0.6090 -v 8.6393 1.2688 0.6721 -v 8.6393 0.6693 -0.7321 -v 8.5299 0.6805 -0.6690 -v 6.7940 1.1127 0.6090 -v 6.7940 1.1238 0.6721 -v 6.7940 0.5356 -0.6690 -v 6.7940 0.4585 -0.6683 -v 8.5299 0.5909 -0.6683 -v 8.5299 1.1680 0.6097 -v 5.1927 1.0443 0.4456 -v 6.6376 1.0678 0.4456 -v 6.6376 0.5204 -0.5578 -v 5.1927 0.4970 -0.5578 -v 6.7940 0.4348 -0.7314 -v 6.7940 0.2707 -0.7314 -v 6.7940 0.5244 -0.7321 -v 6.7940 1.0195 0.6097 -v 6.9144 1.0782 0.4457 -v 8.3750 1.2001 0.4457 -v 8.3750 0.6533 -0.5552 -v 6.9144 0.5313 -0.5552 -v 6.6485 0.4585 -0.5310 -v 5.2036 0.4351 -0.5310 -v 8.3922 1.1414 0.4712 -v 8.3922 0.5946 -0.5297 -v 6.9316 1.0195 0.4712 -v 6.9316 0.4726 -0.5297 -v 6.7940 0.4585 -0.5297 -v 6.6485 1.0059 0.4724 -v 5.1975 0.9525 0.4724 -v 6.7940 1.0059 0.4712 -v 1.5311 0.2883 -0.6934 -v 1.6118 0.2883 -0.6934 -v 1.6010 0.0002 -0.7287 -v 1.4947 0.0002 -0.7287 -v 1.4947 0.0002 -0.6225 -v 1.5311 0.2883 -0.6127 -v 1.6010 0.0002 -0.6225 -v 1.6118 0.2883 -0.6127 -v 1.6010 0.5764 -0.7287 -v 1.4947 0.5764 -0.7287 -v 1.4947 0.5764 -0.6225 -v 1.6010 0.5764 -0.6225 -v 8.5534 0.2883 -0.6934 -v 8.5898 0.0002 -0.7287 -v 8.4835 0.0002 -0.7287 -v 8.4727 0.2883 -0.6934 -v 8.5534 0.2883 -0.6127 -v 8.5898 0.0002 -0.6225 -v 8.4727 0.2883 -0.6127 -v 8.4835 0.0002 -0.6225 -v 8.4835 0.5764 -0.7287 -v 8.5898 0.5764 -0.7287 -v 8.5898 0.5764 -0.6225 -v 8.4835 0.5764 -0.6225 -v 8.5309 0.3757 0.5064 -v 8.6116 0.3757 0.5064 -v 8.6008 0.0002 0.4710 -v 8.4946 0.0002 0.4710 -v 8.4946 0.0002 0.5773 -v 8.5309 0.3757 0.5870 -v 8.6008 0.0002 0.5773 -v 8.6116 0.3757 0.5870 -v 8.6008 0.7511 0.4710 -v 8.4946 0.7511 0.4710 -v 8.4946 0.7511 0.5773 -v 8.6008 0.7511 0.5773 -# 2114 vertices - -vn 0.0135 0.9890 -0.1472 -vn 0.0265 0.9811 -0.1915 -vn 0.0343 0.9897 -0.1389 -vn 0.0088 0.9885 -0.1511 -vn 0.0132 0.9813 -0.1923 -vn 0.0130 0.9890 -0.1472 -vn -0.0074 0.9871 -0.1602 -vn 0.0084 0.9868 -0.1617 -vn 0.0296 0.9851 -0.1694 -vn 0.0423 0.9755 -0.2159 -vn 0.0010 0.9852 -0.1717 -vn -0.0153 0.9773 -0.2113 -vn 0.0486 0.9565 -0.2876 -vn 0.0664 0.9545 -0.2906 -vn 0.0082 0.9566 -0.2914 -vn -0.0177 0.9650 -0.2617 -vn 0.0456 0.9392 -0.3403 -vn 0.0534 0.9486 -0.3121 -vn 0.0320 0.9392 -0.3418 -vn 0.0217 0.9641 -0.2647 -vn 0.7309 0.6762 -0.0923 -vn 0.6082 0.7906 -0.0702 -vn -0.5892 0.7907 -0.1663 -vn -0.7004 0.6803 -0.2159 -vn 0.6800 -0.7039 0.2052 -vn 0.7681 -0.6150 0.1785 -vn -0.7015 -0.7078 0.0832 -vn -0.7927 -0.6074 0.0519 -vn -0.7481 0.6065 -0.2693 -vn 0.7787 0.6144 -0.1266 -vn 0.6121 -0.7546 0.2365 -vn -0.6447 -0.7553 0.1175 -vn 0.5398 0.5886 0.6019 -vn 0.6298 0.5285 -0.5693 -vn -0.5283 0.5227 -0.6691 -vn -0.6435 0.5818 0.4974 -vn 0.7933 0.0000 -0.6089 -vn 0.7351 0.1309 -0.6652 -vn -0.6128 0.1464 -0.7765 -vn -0.6699 -0.0000 -0.7425 -vn 0.6184 0.0000 0.7859 -vn 0.6674 -0.0308 0.7441 -vn -0.7403 -0.0000 0.6723 -vn -0.7914 -0.0125 0.6112 -vn 0.8663 0.4993 0.0145 -vn -0.0156 0.9999 0.0053 -vn -0.0237 0.9882 -0.1511 -vn 0.8851 0.4651 0.0153 -vn -0.0042 0.9878 0.1556 -vn -0.8945 0.4464 -0.0229 -vn -0.8736 0.4860 -0.0229 -vn 0.4646 -0.8851 0.0267 -vn 0.4990 -0.8662 0.0267 -vn -0.0504 -0.3407 -0.9388 -vn 0.0031 0.8403 -0.5420 -vn 0.8256 0.3438 -0.4475 -vn 0.3418 -0.7581 -0.5554 -vn -0.7897 0.2845 -0.5436 -vn -0.3254 -0.8004 -0.5035 -vn -0.4463 -0.8948 -0.0114 -vn -0.4860 -0.8739 -0.0130 -vn 0.0504 -0.3664 0.9291 -vn -0.0195 0.8638 0.5035 -vn -0.7132 0.2945 0.6361 -vn -0.3239 -0.7703 0.5493 -vn 0.7201 0.3096 0.6209 -vn 0.3250 -0.7693 0.5500 -vn 0.0237 -0.9882 0.1511 -vn 0.0156 -0.9999 -0.0053 -vn 0.8919 0.4520 0.0160 -vn 0.4516 -0.8918 0.0259 -vn 0.0034 -0.9878 -0.1556 -vn -0.6115 -0.4809 -0.6283 -vn -0.5722 0.6865 -0.4486 -vn 0.5707 0.6755 -0.4669 -vn 0.6072 -0.4795 -0.6336 -vn 0.6848 -0.7208 -0.1072 -vn 0.7274 0.6486 0.2239 -vn 0.7192 0.6808 0.1389 -vn 0.6627 -0.7476 -0.0443 -vn -0.6873 -0.7135 -0.1362 -vn -0.6935 -0.7165 -0.0755 -vn -0.7458 0.6588 0.0984 -vn -0.7268 0.6617 0.1843 -vn -0.0366 -0.0859 -0.9956 -vn -0.0359 -0.0858 -0.9957 -vn 0.6649 0.0000 -0.7469 -vn 0.7033 0.0000 -0.7109 -vn -0.5485 -0.0000 0.8361 -vn -0.6858 -0.0000 -0.7278 -vn -0.7107 -0.0000 -0.7035 -vn -0.7033 -0.0000 0.7109 -vn 0.9997 0.0000 0.0259 -vn 0.0370 0.0000 0.9993 -vn 0.7225 -0.3788 -0.5783 -vn -0.0019 -0.8215 -0.5703 -vn -0.0320 0.6989 -0.7145 -vn 0.5859 0.5261 -0.6164 -vn -0.7068 0.7071 -0.0183 -vn -0.7068 -0.7071 -0.0183 -vn -0.7213 -0.6923 -0.0187 -vn -0.7210 0.6927 -0.0187 -vn -0.0027 0.8048 -0.5936 -vn -0.7086 0.3271 -0.6252 -vn -0.9038 0.4273 -0.0236 -vn -0.0240 0.9997 -0.0008 -vn 0.7068 -0.7071 0.0183 -vn 0.7068 0.7071 0.0183 -vn 0.6928 0.7209 0.0179 -vn 0.6928 -0.7209 0.0179 -vn 0.0000 -1.0000 -0.0000 -vn 0.0404 -0.9992 0.0011 -vn 0.0420 -0.9991 0.0011 -vn -0.0031 -1.0000 0.0000 -vn 0.0164 0.7193 -0.6945 -vn 0.0351 0.7011 -0.7122 -vn -0.0557 -0.6963 -0.7156 -vn -0.0443 -0.4832 -0.8744 -vn 0.4696 -0.3061 -0.8281 -vn 0.0008 -0.6981 -0.7160 -vn -0.0805 0.7054 -0.7042 -vn -0.0492 0.7136 -0.6989 -vn -0.0229 -0.7244 -0.6890 -vn -0.0366 0.6888 -0.7240 -vn -0.7321 -0.3736 -0.5696 -vn -0.5955 0.5250 -0.6081 -vn 0.6985 0.3294 -0.6352 -vn 0.8969 0.4417 0.0233 -vn -0.0404 -0.9992 -0.0011 -vn -0.0389 -0.9992 -0.0011 -vn -0.4967 -0.2784 -0.8221 -vn 0.3800 0.8850 -0.2689 -vn -0.4028 0.8657 -0.2972 -vn -0.0114 0.9999 -0.0004 -vn 0.2930 0.9038 -0.3120 -vn 0.7000 0.7139 0.0183 -vn -0.3109 0.8885 -0.3376 -vn -0.6710 0.7412 -0.0175 -vn -0.5787 0.5808 -0.5726 -vn -0.5787 -0.5808 -0.5726 -vn 0.5757 -0.5742 -0.5821 -vn 0.5757 0.5742 -0.5821 -vn 0.7234 -0.0792 -0.6859 -vn 0.9941 -0.1050 0.0259 -vn 0.6760 -0.0743 -0.7332 -vn 0.7175 0.0654 -0.6935 -vn -0.7255 0.0617 -0.6855 -vn -0.6889 0.0583 -0.7225 -vn 0.6809 0.0623 -0.7297 -vn -0.9942 -0.1045 -0.0252 -vn -0.7328 -0.0749 -0.6763 -vn -0.6843 -0.0695 -0.7259 -vn -0.9942 -0.1046 -0.0259 -vn 0.6832 0.0628 -0.7275 -vn 0.7205 0.0660 -0.6903 -vn -0.7283 0.0622 -0.6825 -vn -0.6908 0.0588 -0.7206 -vn 0.7373 -0.0758 -0.6714 -vn 0.6969 -0.0659 0.7141 -vn 0.6977 -0.0956 0.7099 -vn 0.6433 0.0724 -0.7622 -vn -0.7342 0.0777 -0.6744 -vn -0.6902 0.2141 -0.6912 -vn -0.7418 0.0796 0.6659 -vn -0.6779 0.0615 0.7326 -vn 0.7397 -0.0461 0.6714 -vn 0.6794 -0.1869 -0.7095 -vn -0.6646 -0.0883 -0.7420 -vn -0.7012 0.0601 0.7104 -vn 0.7777 -0.1556 0.6090 -vn 0.7449 -0.1260 0.6552 -vn -0.6013 0.0107 0.7990 -vn -0.7084 0.0357 0.7049 -vn 0.6653 -0.0423 -0.7454 -vn 0.5569 0.1291 -0.8205 -vn -0.7843 0.1316 -0.6062 -vn -0.7358 0.2610 -0.6248 -vn 0.7308 -0.0961 0.6758 -vn -0.7232 0.0330 0.6899 -vn 0.5284 -0.1613 -0.8336 -vn -0.8211 -0.0103 -0.5707 -vn -0.7446 -0.0717 -0.6637 -vn -0.6516 0.0699 -0.7554 -vn -0.6896 -0.1018 0.7170 -vn -0.6890 -0.0703 0.7214 -vn 0.7266 0.0827 -0.6820 -vn 0.6806 0.2272 -0.6966 -vn 0.6862 0.0572 0.7251 -vn 0.7495 0.0758 0.6576 -vn -0.7323 -0.0485 0.6793 -vn -0.6882 -0.1760 -0.7039 -vn 0.6566 -0.0928 -0.7485 -vn 0.7090 0.0565 0.7029 -vn 0.6096 0.0072 0.7927 -vn -0.7373 -0.1337 0.6622 -vn -0.7709 -0.1659 0.6149 -vn 0.7160 0.0337 0.6973 -vn -0.6736 -0.0394 -0.7381 -vn -0.5646 0.1268 -0.8156 -vn 0.7780 0.1403 -0.6124 -vn 0.7255 0.2768 -0.6301 -vn 0.7206 0.0306 0.6927 -vn -0.7134 -0.1004 0.6935 -vn -0.5485 -0.1517 -0.8222 -vn 0.8246 -0.0113 -0.5656 -vn -0.0023 -0.9818 -0.1900 -vn -0.0370 -0.5484 -0.8354 -vn 0.4890 -0.6629 -0.5669 -vn 0.6481 -0.7614 0.0168 -vn -0.0145 0.7649 -0.6439 -vn -0.0122 0.9999 0.0000 -vn 0.7999 0.5998 0.0206 -vn 0.6452 0.4725 -0.6004 -vn -0.8163 0.5772 -0.0214 -vn -0.6531 0.4740 -0.5906 -vn -0.4845 -0.6734 -0.5585 -vn -0.6813 -0.7318 -0.0175 -vn -0.7224 -0.0000 -0.6915 -vn -0.6947 0.1354 -0.7065 -vn -0.7045 0.0948 0.7033 -vn -0.6985 -0.0000 0.7156 -vn -0.5433 -0.0900 0.8347 -vn -0.5257 -0.1391 -0.8392 -vn 0.7189 0.0115 -0.6950 -vn 0.6828 0.1275 -0.7194 -vn 0.8659 -0.0899 -0.4921 -vn 0.7115 0.0066 0.7027 -vn 0.7085 0.0729 0.7020 -vn 0.8598 -0.0578 0.5073 -vn 0.4360 -0.5183 -0.7357 -vn 0.5749 -0.3782 -0.7256 -vn 0.6416 -0.4248 0.6386 -vn 0.4532 -0.1733 0.8744 -vn -0.5657 0.3819 -0.7309 -vn -0.7454 0.4359 -0.5043 -vn -0.5947 0.4293 0.6798 -vn -0.6462 0.5506 0.5285 -vn 0.7385 -0.2551 -0.6241 -vn -0.0122 -0.2025 0.9792 -vn -0.7576 0.5683 -0.3212 -vn -0.8054 0.5220 0.2807 -vn 0.6245 -0.4408 -0.6448 -vn 0.5934 -0.3613 0.7193 -vn 0.4612 -0.4908 0.7392 -vn 0.4295 -0.2011 -0.8804 -vn -0.5432 0.4033 0.7364 -vn -0.7339 0.4466 0.5117 -vn -0.6155 0.4102 -0.6730 -vn -0.6641 0.5308 -0.5265 -vn -0.0748 -0.2061 -0.9757 -vn 0.7536 -0.2519 0.6072 -vn -0.7618 0.5860 0.2762 -vn -0.8011 0.5032 -0.3242 -vn -0.7151 -0.0000 0.6991 -vn -0.7061 -0.0000 -0.7081 -vn -0.7126 0.0892 -0.6959 -vn -0.6861 0.1439 0.7132 -vn -0.4959 -0.1470 0.8558 -vn -0.5711 -0.0850 -0.8165 -vn 0.6910 0.1200 0.7128 -vn 0.7263 0.0107 0.6873 -vn 0.8561 -0.0852 0.5097 -vn 0.7004 0.0775 -0.7095 -vn 0.7038 0.0070 -0.7103 -vn 0.8696 -0.0610 -0.4900 -vn 0.7151 0.0000 -0.6991 -vn 0.7062 0.0000 0.7080 -vn 0.7127 0.0892 0.6958 -vn 0.6863 0.1440 -0.7130 -vn 0.4959 -0.1470 -0.8559 -vn 0.5710 -0.0850 0.8165 -vn -0.6908 0.1200 -0.7130 -vn -0.7262 0.0107 -0.6874 -vn -0.8559 -0.0852 -0.5100 -vn -0.7004 0.0775 0.7095 -vn -0.7038 0.0070 0.7103 -vn -0.8696 -0.0610 0.4900 -vn -0.7095 0.1789 0.6816 -vn -0.7115 0.4588 -0.5322 -vn -0.8524 0.1339 -0.5055 -vn -0.8921 -0.1267 0.4337 -vn 0.0355 -0.2669 0.9631 -vn -0.2980 0.5435 0.7848 -vn -0.3090 0.8198 -0.4822 -vn -0.0355 0.2669 -0.9631 -vn 0.0263 0.5715 0.8202 -vn -0.0153 0.8618 -0.5070 -vn 0.7172 0.1799 0.6733 -vn 0.8851 -0.1185 0.4502 -vn 0.8669 0.1389 -0.4788 -vn 0.6997 0.4689 -0.5391 -vn 0.3300 0.5331 0.7790 -vn 0.2891 0.8257 -0.4844 -vn -0.9151 0.4011 0.0408 -vn -0.9997 -0.0000 -0.0259 -vn -0.8923 -0.1267 0.4334 -vn -0.7097 0.1787 0.6815 -vn -0.2979 0.5432 0.7849 -vn -0.3967 0.9078 0.1358 -vn 0.0107 0.9872 0.1594 -vn 0.9197 0.3832 0.0854 -vn 0.7173 0.1799 0.6731 -vn 0.4216 0.8935 0.1549 -vn -0.9130 0.4068 0.0305 -vn -0.8900 -0.1068 0.4433 -vn -0.7084 0.2058 0.6752 -vn -0.2964 0.5722 0.7647 -vn -0.3952 0.9118 0.1114 -vn 0.0359 -0.2232 0.9741 -vn 0.0256 0.6008 0.7990 -vn 0.0095 0.9912 0.1320 -vn 0.9179 0.3895 0.0755 -vn 0.7167 0.2060 0.6663 -vn 0.8823 -0.1001 0.4600 -vn 0.4192 0.8985 0.1305 -vn 0.3277 0.5623 0.7593 -vn -0.9099 0.4147 0.0145 -vn -0.8866 -0.0765 0.4562 -vn -0.7065 0.2453 0.6638 -vn -0.2941 0.6132 0.7332 -vn -0.3933 0.9164 0.0748 -vn 0.0362 -0.1574 0.9869 -vn 0.0244 0.6426 0.7658 -vn 0.0084 0.9957 0.0923 -vn 0.9152 0.3985 0.0610 -vn 0.7155 0.2441 0.6545 -vn 0.8781 -0.0717 0.4730 -vn 0.4158 0.9045 0.0946 -vn 0.3243 0.6035 0.7284 -vn 0.8781 -0.0719 0.4730 -vn 0.0362 -0.1572 0.9869 -vn -0.9057 0.4238 -0.0061 -vn -0.8824 -0.0345 0.4692 -vn -0.7045 0.2952 0.6453 -vn -0.2914 0.6638 0.6888 -vn -0.3910 0.9200 0.0275 -vn 0.0366 -0.0700 0.9969 -vn 0.0229 0.6943 0.7193 -vn 0.0065 0.9991 0.0412 -vn 0.9115 0.4093 0.0404 -vn 0.7145 0.2924 0.6356 -vn 0.8725 -0.0326 0.4876 -vn 0.4116 0.9101 0.0481 -vn 0.3201 0.6550 0.6845 -vn -0.7156 0.2441 -0.6544 -vn -0.8781 -0.0719 -0.4730 -vn -0.8715 0.0807 0.4837 -vn -0.7008 0.4154 0.5800 -vn -0.3243 0.6035 -0.7285 -vn -0.0362 -0.1574 -0.9869 -vn -0.2888 0.7788 0.5569 -vn 0.0362 0.1574 0.9869 -vn -0.0244 0.6426 -0.7658 -vn -0.0362 -0.1572 -0.9869 -vn 0.0179 0.8129 0.5821 -vn 0.7065 0.2453 -0.6639 -vn 0.7122 0.4076 0.5715 -vn 0.8587 0.0772 0.5066 -vn 0.8865 -0.0765 -0.4563 -vn 0.2937 0.6132 -0.7333 -vn 0.3120 0.7715 0.5544 -vn -0.9105 0.4121 -0.0343 -vn -0.7141 0.3063 -0.6295 -vn -0.8711 -0.0208 -0.4907 -vn -0.4108 0.9111 -0.0343 -vn -0.3189 0.6697 -0.6707 -vn -0.0366 -0.0443 -0.9983 -vn -0.0061 0.9996 -0.0259 -vn -0.0221 0.7090 -0.7049 -vn -0.0366 -0.0441 -0.9984 -vn 0.9046 0.4261 0.0122 -vn 0.8812 -0.0219 -0.4723 -vn 0.7040 0.3096 -0.6392 -vn 0.3906 0.9205 -0.0137 -vn 0.2911 0.6781 -0.6749 -vn -0.0370 -0.0443 -0.9983 -vn -0.9133 0.4042 -0.0504 -vn -0.7147 0.2697 -0.6453 -vn -0.8753 -0.0517 -0.4808 -vn -0.4135 0.9078 -0.0702 -vn -0.3220 0.6310 -0.7059 -vn -0.0366 -0.1118 -0.9931 -vn -0.0072 0.9978 -0.0656 -vn -0.0237 0.6702 -0.7418 -vn 0.9077 0.4196 -0.0038 -vn 0.8846 -0.0547 -0.4631 -vn 0.7055 0.2716 -0.6546 -vn 0.3921 0.9185 -0.0504 -vn 0.2926 0.6401 -0.7104 -vn -0.9152 0.3984 -0.0610 -vn -0.4158 0.9045 -0.0946 -vn -0.0084 0.9957 -0.0923 -vn 0.9099 0.4147 -0.0145 -vn 0.8866 -0.0765 -0.4562 -vn 0.3933 0.9164 -0.0748 -vn 0.2941 0.6132 -0.7331 -vn -0.7156 0.2441 -0.6545 -vn -0.3243 0.6035 -0.7284 -vn -0.0244 0.6426 -0.7659 -vn 0.2941 0.6132 -0.7332 -vn -0.7141 0.3063 -0.6294 -vn -0.4105 0.9112 -0.0343 -vn 0.2911 0.6784 -0.6745 -vn -0.9022 0.4309 0.0168 -vn -0.7122 0.4078 -0.5714 -vn -0.8587 0.0772 -0.5066 -vn -0.4032 0.9121 0.0740 -vn -0.3120 0.7715 -0.5545 -vn -0.0362 0.1574 -0.9869 -vn -0.0019 0.9957 0.0923 -vn -0.0179 0.8129 -0.5822 -vn 0.8957 0.4400 0.0641 -vn 0.8715 0.0807 -0.4836 -vn 0.7008 0.4155 -0.5799 -vn 0.3884 0.9166 0.0954 -vn 0.2888 0.7786 -0.5571 -vn -0.7008 0.4154 0.5799 -vn -0.2888 0.7787 0.5569 -vn 0.0179 0.8129 0.5822 -vn 0.3117 0.7716 0.5546 -vn -0.8715 0.0807 0.4836 -vn -0.7008 0.4155 0.5799 -vn 0.3120 0.7715 0.5545 -vn -0.0000 1.0000 0.0000 -vn -0.6928 0.7209 -0.0183 -vn -0.7210 0.6927 -0.0191 -vn 0.0267 0.6925 0.7209 -vn 0.0256 0.7208 0.6927 -vn -0.0267 0.6924 -0.7210 -vn -0.0256 0.7207 -0.6927 -vn -0.0369 -0.0000 -0.9993 -vn 0.6928 0.7209 0.0183 -vn 0.7211 0.6926 0.0191 -vn 0.1987 0.9800 -0.0099 -vn 0.2689 0.9632 -0.0000 -vn 0.2073 0.9783 0.0046 -vn 0.2140 0.9768 0.0084 -vn 0.2691 0.9631 0.0099 -vn 0.2075 0.9782 0.0053 -vn 0.2241 0.9743 0.0206 -vn 0.2270 0.9738 0.0099 -vn 0.2382 0.9712 -0.0038 -vn 0.3086 0.9512 -0.0076 -vn 0.2388 0.9709 0.0160 -vn 0.2892 0.9568 0.0305 -vn 0.3959 0.9183 -0.0053 -vn 0.4034 0.9149 -0.0168 -vn 0.3965 0.9177 0.0221 -vn 0.3576 0.9331 0.0366 -vn 0.4604 0.8877 0.0015 -vn 0.4276 0.9039 -0.0061 -vn 0.4608 0.8874 0.0107 -vn 0.3647 0.9311 0.0107 -vn 0.1907 0.6629 -0.7240 -vn 0.2444 0.6550 0.7151 -vn 0.1665 0.7388 0.6531 -vn 0.1318 0.7242 -0.6769 -vn -0.1907 -0.6270 -0.7553 -vn -0.2251 -0.6890 -0.6889 -vn -0.1814 -0.7064 0.6842 -vn -0.1629 -0.6523 0.7402 -vn 0.3247 0.5993 0.7317 -vn 0.2728 0.6545 -0.7051 -vn -0.2506 -0.6841 -0.6850 -vn -0.1732 -0.6751 0.7171 -vn -0.5606 0.5834 -0.5877 -vn -0.5557 0.5670 0.6081 -vn 0.6070 0.5343 0.5882 -vn 0.6068 0.5339 -0.5888 -vn 0.6859 0.0000 -0.7277 -vn 0.7024 0.0000 0.7118 -vn 0.7127 0.1240 0.6905 -vn 0.7138 0.1081 -0.6920 -vn -0.6903 -0.0073 -0.7235 -vn -0.7306 -0.0000 -0.6828 -vn -0.7311 -0.0000 0.6823 -vn -0.6748 0.0186 0.7378 -vn 0.2096 0.9771 0.0359 -vn -0.0057 0.9999 0.0130 -vn 0.0853 0.5578 -0.8256 -vn 0.0862 0.5307 -0.8431 -vn -0.0729 0.5479 0.8334 -vn -0.0746 0.5157 0.8535 -vn -0.2161 0.9763 -0.0130 -vn 0.0295 -0.8296 -0.5576 -vn 0.0267 -0.8474 -0.5303 -vn 0.5819 0.3933 -0.7118 -vn 0.5131 0.8572 0.0450 -vn 0.9162 -0.3916 0.0847 -vn 0.5894 -0.7327 -0.3403 -vn 0.5106 0.3556 0.7828 -vn 0.4916 -0.7532 0.4372 -vn -0.0477 -0.8368 0.5455 -vn -0.0450 -0.8565 0.5142 -vn -0.6762 0.3579 0.6439 -vn -0.4914 0.8706 -0.0267 -vn -0.9075 -0.4109 -0.0870 -vn -0.5824 -0.7427 0.3304 -vn -0.5474 0.3789 -0.7462 -vn -0.5233 -0.7274 -0.4440 -vn 0.0055 -0.9999 -0.0130 -vn -0.2096 -0.9771 -0.0366 -vn 0.0866 0.5201 -0.8497 -vn 0.0256 -0.8536 -0.5203 -vn 0.2159 -0.9763 0.0137 -vn 0.5787 -0.4414 0.6857 -vn 0.6890 -0.4416 -0.5747 -vn 0.4547 0.7093 -0.5386 -vn 0.3547 0.7091 0.6094 -vn 0.2192 -0.7156 -0.6632 -vn 0.1354 -0.7445 -0.6537 -vn -0.1110 0.6529 -0.7492 -vn -0.2283 0.6210 -0.7498 -vn 0.1007 -0.7155 0.6913 -vn 0.0198 -0.7444 0.6674 -vn -0.3550 0.6211 0.6987 -vn -0.2395 0.6528 0.7186 -vn 0.8165 0.0000 -0.5773 -vn 0.9944 -0.0607 0.0870 -vn 0.7658 0.0000 -0.6431 -vn -0.8544 -0.0000 0.5195 -vn -0.7659 -0.0000 0.6430 -vn 0.6428 0.0000 0.7660 -vn 0.7040 0.0000 0.7102 -vn 0.0870 0.0000 -0.9962 -vn -0.9962 -0.0000 -0.0870 -vn 0.7096 0.7014 0.0679 -vn 0.5953 -0.8018 0.0519 -vn 0.6383 -0.4253 -0.6416 -vn 0.6501 0.5443 -0.5303 -vn -0.0616 0.7071 0.7044 -vn -0.0616 -0.7073 0.7042 -vn 0.6132 0.7881 0.0534 -vn -0.0752 0.5062 0.8591 -vn 0.5560 0.3933 0.7322 -vn 0.0616 -0.7073 -0.7042 -vn 0.0616 0.7072 -0.7043 -vn 0.0025 -0.9996 -0.0282 -vn 0.7120 0.7019 0.0183 -vn 0.6981 0.7153 0.0328 -vn 0.7091 -0.7003 0.0816 -vn 0.8304 -0.5524 0.0725 -vn 0.8785 -0.3013 -0.3708 -vn 0.6996 0.7075 0.0999 -vn 0.7126 -0.7003 0.0427 -vn 0.6975 0.7122 0.0786 -vn 0.7160 0.6948 0.0679 -vn 0.6920 -0.7194 0.0603 -vn 0.5489 0.5385 0.6393 -vn 0.5171 -0.4257 0.7425 -vn 0.6745 0.3934 -0.6247 -vn 0.0752 0.5062 -0.8591 -vn -0.0025 -0.9996 0.0282 -vn 0.8009 -0.3015 0.5173 -vn 0.3172 0.8858 -0.3388 -vn 0.2588 0.8838 0.3899 -vn -0.0008 1.0000 0.0076 -vn 0.3405 0.8988 -0.2762 -vn 0.0603 0.7216 -0.6897 -vn 0.2945 0.8992 0.3235 -vn -0.0603 0.7216 0.6897 -vn 0.5247 0.5773 0.6256 -vn 0.5247 -0.5773 0.6256 -vn 0.6254 -0.5774 -0.5249 -vn 0.6254 0.5774 -0.5249 -vn 0.7322 -0.1102 -0.6721 -vn 0.7939 -0.1002 -0.5998 -vn 0.0862 -0.1487 -0.9851 -vn 0.7425 0.0909 -0.6637 -vn 0.7894 0.0844 -0.6080 -vn 0.6721 0.0844 0.7356 -vn 0.6159 0.0909 0.7826 -vn -0.0875 -0.1479 0.9851 -vn -0.0862 -0.1480 0.9852 -vn 0.6775 -0.1003 0.7286 -vn 0.6014 -0.1106 0.7912 -vn 0.7870 0.0852 -0.6110 -vn 0.7382 0.0918 -0.6683 -vn 0.6689 0.0852 0.7384 -vn 0.6108 0.0918 0.7865 -vn 0.7414 -0.1027 -0.6632 -vn 0.8144 0.0076 -0.5803 -vn -0.6630 -0.1133 -0.7400 -vn -0.6521 -0.0949 -0.7522 -vn 0.6316 0.1055 0.7681 -vn 0.6075 0.2294 0.7605 -vn -0.7872 0.0869 0.6106 -vn -0.7122 0.1350 0.6889 -vn -0.6004 -0.0871 -0.7949 -vn 0.7481 -0.1777 -0.6394 -vn 0.6821 -0.0426 0.7300 -vn -0.7715 0.0625 0.6331 -vn -0.8473 0.0519 0.5286 -vn -0.5909 -0.1532 -0.7921 -vn -0.5646 -0.1650 -0.8087 -vn -0.7549 0.1160 0.6455 -vn 0.8093 -0.0832 -0.5815 -vn 0.8678 0.0495 -0.4945 -vn 0.5600 0.1604 0.8128 -vn 0.5301 0.2864 0.7981 -vn -0.7879 0.0437 0.6142 -vn -0.5917 -0.1473 -0.7926 -vn 0.8352 -0.1717 -0.5225 -vn 0.5196 0.0145 0.8543 -vn 0.6149 -0.1027 0.7819 -vn -0.7730 -0.0949 0.6273 -vn -0.7816 -0.1133 0.6134 -vn 0.7010 0.0076 0.7132 -vn 0.7552 0.1055 -0.6469 -vn 0.7303 0.2295 -0.6434 -vn -0.5818 0.1351 -0.8021 -vn -0.6693 0.0869 -0.7379 -vn -0.7295 -0.0871 0.6784 -vn 0.6260 -0.1777 0.7593 -vn 0.7985 -0.0426 -0.6005 -vn -0.6498 0.0625 -0.7575 -vn -0.6965 -0.1651 0.6983 -vn -0.7194 -0.1532 0.6775 -vn -0.7427 0.0519 -0.6676 -vn -0.6311 0.1160 -0.7669 -vn 0.6960 -0.0832 0.7132 -vn 0.7686 0.0495 0.6378 -vn 0.6925 0.1603 -0.7034 -vn 0.6605 0.2861 -0.6942 -vn -0.7204 -0.1473 0.6777 -vn -0.6693 0.0437 -0.7417 -vn 0.7316 -0.1716 0.6597 -vn 0.6604 0.0145 -0.7508 -vn 0.6092 -0.6437 -0.4631 -vn 0.8347 -0.5459 0.0732 -vn 0.2647 -0.9640 0.0229 -vn 0.0591 -0.7354 -0.6751 -vn 0.6581 0.7508 0.0572 -vn 0.6428 0.5040 -0.5769 -vn 0.0681 0.6242 -0.7783 -vn -0.0681 0.6241 0.7783 -vn -0.0589 -0.7354 0.6750 -vn 0.5196 -0.6440 0.5615 -vn 0.5328 0.5040 0.6798 -vn 0.6483 0.0000 0.7614 -vn -0.7808 -0.0000 0.6248 -vn -0.7488 0.1037 0.6546 -vn 0.6321 0.1361 0.7628 -vn 0.7496 -0.1320 0.6487 -vn -0.8390 -0.0957 0.5356 -vn 0.7638 0.1125 -0.6356 -vn 0.7633 0.0103 -0.6460 -vn 0.6262 -0.0897 -0.7745 -vn -0.6325 0.0792 -0.7705 -vn -0.6508 0.0071 -0.7592 -vn -0.4791 -0.0678 -0.8751 -vn -0.7707 -0.0000 0.6372 -vn -0.7549 0.1360 0.6416 -vn 0.6235 0.1036 0.7749 -vn 0.6604 0.0000 0.7509 -vn 0.7335 -0.0957 0.6729 -vn -0.8507 -0.1320 0.5089 -vn -0.6398 0.0103 -0.7685 -vn -0.6418 0.1125 -0.7586 -vn -0.4822 -0.0897 -0.8714 -vn 0.7727 0.0071 -0.6348 -vn 0.7569 0.0792 -0.6487 -vn 0.6236 -0.0678 -0.7788 -vn 0.7708 0.0000 -0.6371 -vn 0.7549 0.1360 -0.6415 -vn -0.6235 0.1036 -0.7749 -vn -0.6606 -0.0000 -0.7508 -vn -0.7335 -0.0956 -0.6729 -vn 0.8507 -0.1320 -0.5089 -vn 0.6399 0.0103 0.7684 -vn 0.6418 0.1125 0.7586 -vn 0.4822 -0.0897 0.8715 -vn -0.7727 0.0071 0.6348 -vn -0.7570 0.0792 0.6486 -vn -0.6235 -0.0678 0.7789 -vn -0.7361 0.2604 0.6249 -vn -0.6206 -0.1072 0.7768 -vn 0.4593 0.1041 0.8822 -vn 0.4541 0.5106 0.7301 -vn -0.8117 0.5630 0.1556 -vn -0.9778 -0.1913 -0.0854 -vn 0.4768 0.8355 0.2731 -vn 0.9778 0.1913 0.0855 -vn -0.8202 0.5676 -0.0717 -vn 0.5203 0.8528 0.0458 -vn -0.6163 0.2604 -0.7432 -vn 0.5739 0.5108 -0.6401 -vn 0.6056 0.1041 -0.7889 -vn -0.4761 -0.1072 -0.8728 -vn -0.7722 0.5630 -0.2945 -vn 0.5169 0.8356 -0.1862 -vn -0.1877 0.4927 0.8497 -vn -0.6205 -0.1072 0.7769 -vn -0.0872 -0.0000 0.9962 -vn -0.2384 0.9290 0.2830 -vn -0.8116 0.5631 0.1556 -vn -0.9778 -0.1913 -0.0855 -vn -0.2224 0.9747 -0.0198 -vn -0.0374 0.4925 -0.8695 -vn 0.0872 0.0000 -0.9962 -vn -0.6165 0.2604 -0.7431 -vn -0.1858 0.9291 -0.3197 -vn -0.1688 0.4952 0.8522 -vn -0.7266 0.2838 0.6257 -vn -0.6224 -0.0889 0.7776 -vn -0.2031 0.9362 0.2869 -vn -0.7913 0.5907 0.1579 -vn -0.9835 -0.1591 -0.0862 -vn -0.1854 0.9825 -0.0160 -vn -0.7996 0.5964 -0.0702 -vn -0.0181 0.4949 -0.8687 -vn -0.4774 -0.0889 -0.8742 -vn -0.6067 0.2838 -0.7425 -vn -0.1503 0.9363 -0.3174 -vn -0.7518 0.5907 -0.2930 -vn -0.1408 0.4974 0.8560 -vn -0.7111 0.3178 0.6272 -vn -0.6238 -0.0620 0.7791 -vn -0.1505 0.9447 0.2914 -vn -0.7596 0.6299 0.1617 -vn -0.9900 -0.1114 -0.0870 -vn -0.1303 0.9914 -0.0114 -vn -0.7676 0.6374 -0.0671 -vn 0.0101 0.4974 -0.8674 -vn -0.4789 -0.0620 -0.8757 -vn -0.5911 0.3178 -0.7414 -vn -0.0975 0.9445 -0.3136 -vn -0.7198 0.6300 -0.2914 -vn -0.7110 0.3177 0.6273 -vn -0.6239 -0.0620 0.7790 -vn -0.1507 0.9447 0.2914 -vn -0.1301 0.9914 -0.0114 -vn -0.0977 0.9445 -0.3136 -vn -0.7675 0.6375 -0.0671 -vn -0.1043 0.4982 0.8608 -vn -0.6883 0.3607 0.6294 -vn -0.6239 -0.0273 0.7810 -vn -0.0816 0.9510 0.2983 -vn -0.7156 0.6785 0.1663 -vn -0.9950 -0.0494 -0.0870 -vn -0.0580 0.9983 -0.0053 -vn -0.7228 0.6882 -0.0633 -vn 0.0467 0.4982 -0.8658 -vn -0.4789 -0.0273 -0.8775 -vn -0.5685 0.3607 -0.7394 -vn -0.0284 0.9509 -0.3082 -vn -0.6757 0.6784 -0.2884 -vn 0.5911 0.3178 0.7414 -vn -0.6164 0.4639 0.6363 -vn -0.6147 0.0610 0.7864 -vn 0.4789 -0.0620 0.8757 -vn 0.9899 -0.1116 0.0870 -vn 0.7198 0.6300 0.2914 -vn -0.5875 0.7891 0.1793 -vn -0.9900 0.1114 -0.0870 -vn 0.9900 -0.1114 0.0870 -vn 0.7676 0.6374 0.0671 -vn -0.5924 0.8040 -0.0519 -vn 0.7111 0.3178 -0.6272 -vn 0.6238 -0.0620 -0.7791 -vn -0.4690 0.0610 -0.8811 -vn -0.4963 0.4639 -0.7338 -vn 0.7596 0.6300 -0.1617 -vn -0.5475 0.7891 -0.2785 -vn -0.0574 0.4978 0.8654 -vn 0.4784 -0.0172 0.8780 -vn 0.5610 0.3729 0.7391 -vn 0.6623 0.6922 0.2869 -vn 0.0082 0.9518 0.3067 -vn 0.9957 -0.0311 0.0870 -vn 0.7092 0.7023 0.0618 -vn 0.0364 0.9993 0.0031 -vn 0.0937 0.4978 -0.8622 -vn 0.6810 0.3729 -0.6303 -vn 0.6237 -0.0172 -0.7814 -vn 0.0871 0.0000 -0.9962 -vn 0.0612 0.9518 -0.3006 -vn 0.7021 0.6920 -0.1678 -vn -0.0292 0.4982 0.8666 -vn 0.4791 -0.0439 0.8766 -vn 0.5798 0.3403 0.7403 -vn 0.6973 0.6556 0.2899 -vn 0.0616 0.9486 0.3105 -vn 0.9931 -0.0790 0.0870 -vn 0.7446 0.6643 0.0648 -vn 0.0925 0.9957 0.0084 -vn 0.1217 0.4982 -0.8585 -vn 0.6994 0.3403 -0.6286 -vn 0.6243 -0.0439 -0.7800 -vn 0.1146 0.9485 -0.2953 -vn 0.7369 0.6557 -0.1640 -vn -0.0101 0.4974 0.8674 -vn 0.7199 0.6300 0.2914 -vn 0.0977 0.9445 0.3136 -vn 0.1303 0.9914 0.0114 -vn 0.1408 0.4974 -0.8560 -vn 0.1505 0.9447 -0.2914 -vn 0.4783 -0.0172 0.8780 -vn 0.6622 0.6922 0.2869 -vn 0.6238 -0.0172 -0.7814 -vn 0.7020 0.6921 -0.1678 -vn -0.1400 0.4883 0.8614 -vn 0.4689 0.0610 0.8811 -vn 0.4965 0.4637 0.7338 -vn 0.5475 0.7891 0.2785 -vn -0.1507 0.9442 0.2930 -vn 0.9900 0.1114 0.0870 -vn 0.5925 0.8039 0.0519 -vn 0.0117 0.4883 -0.8726 -vn 0.6164 0.4639 -0.6363 -vn 0.6147 0.0610 -0.7864 -vn -0.0975 0.9441 -0.3151 -vn 0.5876 0.7891 -0.1793 -vn -0.4691 0.0610 -0.8810 -vn -0.4965 0.4637 -0.7338 -vn 0.4790 -0.0620 0.8756 -vn -0.4966 0.4637 -0.7338 -vn -0.7045 0.7070 -0.0618 -vn 0.7044 0.7071 0.0618 -vn 0.9962 0.0000 0.0870 -vn -0.6045 -0.5330 -0.5921 -vn 0.7548 -0.4607 -0.4669 -vn 0.8091 -0.5137 -0.2853 -vn -0.8513 -0.2926 -0.4356 -vn 0.6794 0.4787 0.5562 -vn 0.3839 0.6087 0.6943 -vn -0.7292 0.5187 0.4463 -vn -0.5018 0.6546 0.5653 -vn -0.9262 -0.2822 -0.2502 -vn 0.7838 -0.3283 -0.5272 -vn 0.3097 0.6756 0.6691 -vn -0.4288 0.6329 0.6447 -vn -0.7472 -0.5135 -0.4219 -vn -0.6621 -0.4605 -0.5913 -vn 0.6980 -0.5328 -0.4784 -vn 0.9141 -0.2926 -0.2808 -vn -0.7657 0.4787 0.4295 -vn -0.4986 0.6086 0.6172 -vn 0.6408 0.5186 0.5661 -vn 0.3959 0.6547 0.6439 -vn -0.6802 -0.3283 -0.6554 -vn 0.9555 -0.2821 -0.0862 -vn -0.4212 0.6757 0.6050 -vn 0.3105 0.6332 0.7089 -vn -0.0198 0.9780 -0.2075 -vn -0.1722 0.9594 -0.2236 -vn 0.1265 0.9884 -0.0847 -vn -0.0153 0.9527 -0.3037 -vn 0.2132 0.9613 -0.1747 -vn 0.3605 0.9244 0.1243 -vn 0.4048 0.9138 0.0328 -vn -0.0248 0.9917 0.1259 -vn 0.4482 0.8868 0.1129 -vn 0.0996 0.6702 -0.7354 -vn 0.3283 0.6486 0.6867 -vn 0.2445 0.7467 0.6186 -vn 0.0437 0.7171 -0.6956 -vn -0.2775 -0.6071 -0.7446 -vn -0.3035 -0.6842 -0.6632 -vn -0.0984 -0.7122 0.6951 -vn -0.0755 -0.6694 0.7391 -vn 0.4027 0.5785 0.7093 -vn 0.1919 0.6731 -0.7142 -vn -0.3319 -0.6902 -0.6431 -vn -0.0797 -0.6712 0.7370 -vn -0.7004 0.6803 -0.2160 -vn 0.7679 -0.6151 0.1785 -vn -0.7927 -0.6073 0.0519 -vn -0.7481 0.6064 -0.2693 -vn 0.6120 -0.7546 0.2365 -vn -0.6449 -0.7552 0.1175 -vn -0.7446 0.6024 0.2876 -vn 0.3855 0.5740 0.7224 -vn 0.7714 0.5030 -0.3899 -vn -0.3155 0.4810 -0.8180 -vn -0.3497 0.2346 -0.9070 -vn -0.4784 -0.0000 -0.8782 -vn 0.9344 0.0000 -0.3563 -vn 0.8702 0.2228 -0.4395 -vn -0.9323 -0.0413 0.3594 -vn -0.8895 -0.0000 0.4570 -vn 0.3501 0.0000 0.9367 -vn 0.4708 -0.0163 0.8821 -vn 0.7055 -0.0105 -0.7086 -vn 0.7008 0.0000 -0.7134 -vn 0.7348 0.0000 0.6783 -vn 0.6868 0.0708 0.7234 -vn 0.7055 0.0105 -0.7086 -vn 0.6868 -0.0708 0.7234 -vn -0.6929 -0.0000 -0.7210 -vn -0.7269 0.0367 -0.6857 -vn -0.7269 -0.0368 -0.6857 -vn -0.7122 -0.0000 0.7019 -vn -0.6904 0.1207 0.7133 -vn -0.6904 -0.1207 0.7133 -vn 0.5788 0.5809 0.5723 -vn 0.5757 0.5742 -0.5822 -vn -0.5787 0.5809 -0.5723 -vn -0.5759 0.5741 0.5820 -vn 0.7031 0.0000 -0.7111 -vn 0.7109 0.0000 0.7033 -vn -0.7109 -0.0000 -0.7033 -vn -0.2926 0.9112 0.2899 -vn -0.3105 0.8976 -0.3128 -vn 0.5789 0.5810 0.5722 -vn 0.5757 0.5741 -0.5822 -vn 0.3178 0.8964 0.3090 -vn -0.5787 0.5806 -0.5728 -vn 0.2849 0.9124 -0.2937 -vn -0.5759 0.5742 0.5820 -vn 0.7347 0.0000 0.6784 -vn -0.6931 -0.0000 -0.7208 -vn 0.7069 0.7071 0.0183 -vn 0.5788 0.5808 0.5724 -vn 0.5868 -0.5689 0.5762 -vn 0.6977 -0.7162 0.0168 -vn -0.0259 0.7072 -0.7066 -vn 0.5758 0.5741 -0.5821 -vn 0.5835 -0.5623 -0.5860 -vn -0.0240 -0.7186 -0.6951 -vn -0.7069 0.7071 -0.0183 -vn -0.5789 0.5808 -0.5723 -vn -0.5869 -0.5689 -0.5761 -vn -0.6977 -0.7162 -0.0168 -vn 0.0259 0.7073 0.7065 -vn -0.5757 0.5742 0.5822 -vn -0.5833 -0.5625 0.5860 -vn 0.0240 -0.7186 0.6951 -vn 0.0027 -1.0000 -0.0000 -vn -0.0015 -1.0000 0.0015 -vn 0.0000 -1.0000 -0.0023 -vn 0.0011 -1.0000 0.0008 -vn -0.0027 -1.0000 0.0000 -vn 0.0015 -1.0000 -0.0015 -vn 0.0000 -1.0000 0.0023 -vn -0.0011 -1.0000 -0.0008 -vn -0.6376 -0.0107 0.7703 -vn -0.6326 -0.0000 0.7745 -vn -0.7934 -0.0000 -0.6087 -vn -0.7508 0.0682 -0.6570 -vn -0.6376 0.0107 0.7703 -vn -0.7508 -0.0683 -0.6570 -vn 0.7566 0.0000 0.6539 -vn 0.7871 0.0362 0.6158 -vn 0.7871 -0.0362 0.6158 -vn 0.6444 0.0000 -0.7647 -vn 0.6222 0.1241 -0.7729 -vn 0.6222 -0.1242 -0.7729 -vn -0.4426 0.8966 -0.0153 -vn -0.4547 0.8724 0.1793 -vn -0.0008 1.0000 -0.0023 -vn -0.3155 0.8195 0.4785 -vn 0.1209 0.8231 0.5548 -vn 0.4017 0.8668 0.2953 -vn 0.4432 0.8926 0.0824 -vn 0.4524 0.8892 -0.0687 -vn 0.4181 0.8485 -0.3244 -vn 0.0965 0.8110 -0.5770 -vn -0.3109 0.8384 -0.4477 -vn -0.4300 0.8837 -0.1847 -vn -0.8452 0.3597 0.3953 -vn -0.8767 0.2880 0.3853 -vn -0.9641 0.2643 -0.0252 -vn -0.9435 0.3307 -0.0214 -vn -0.4566 0.4067 0.7913 -vn -0.4883 0.3422 0.8028 -vn 0.1900 0.4124 0.8910 -vn 0.2110 0.3513 0.9122 -vn 0.7010 0.3693 0.6102 -vn 0.7366 0.2976 0.6073 -vn 0.9169 0.3330 0.2198 -vn 0.9392 0.2659 0.2174 -vn 0.9223 0.3403 -0.1831 -vn 0.9466 0.2716 -0.1739 -vn 0.6946 0.3845 -0.6080 -vn 0.7320 0.3135 -0.6049 -vn 0.1446 0.4173 -0.8972 -vn 0.1526 0.3586 -0.9209 -vn -0.4841 0.3941 -0.7813 -vn -0.5207 0.3250 -0.7895 -vn -0.8400 0.3468 -0.4173 -vn -0.8684 0.2769 -0.4113 -vn -0.8938 -0.1408 0.4257 -vn -0.9914 -0.1289 -0.0214 -vn -0.4862 -0.1589 0.8593 -vn 0.1995 -0.1608 0.9666 -vn 0.7412 -0.1446 0.6555 -vn 0.9637 -0.1299 0.2335 -vn 0.9714 -0.1329 -0.1968 -vn 0.7379 -0.1507 -0.6578 -vn 0.1553 -0.1625 -0.9744 -vn -0.5125 -0.1543 -0.8447 -vn -0.8853 -0.1356 -0.4448 -vn -0.8320 -0.4234 0.3586 -vn -0.9210 -0.3887 -0.0244 -vn -0.4574 -0.4944 0.7392 -vn 0.1995 -0.5049 0.8398 -vn 0.6989 -0.4361 0.5669 -vn 0.8969 -0.3914 0.2060 -vn 0.9022 -0.3996 -0.1625 -vn 0.6903 -0.4583 -0.5599 -vn 0.1415 -0.5142 -0.8459 -vn -0.4917 -0.4731 -0.7310 -vn -0.8273 -0.4074 -0.3868 -vn -0.5952 0.5356 -0.5990 -vn -0.5926 0.5265 0.6096 -vn 0.5952 0.5356 0.5991 -vn 0.5925 0.5264 -0.6097 -vn 0.7107 0.0000 -0.7035 -vn 0.7183 0.0000 0.6958 -vn 0.6997 0.1206 0.7042 -vn 0.6913 0.1282 -0.7111 -vn -0.7183 -0.0000 -0.6958 -vn -0.6997 0.1206 -0.7042 -vn -0.7107 -0.0000 0.7035 -vn -0.6913 0.1282 0.7111 -vn -0.5949 0.5356 -0.5993 -vn -0.5925 0.5266 0.6096 -vn 0.5950 0.5358 0.5991 -vn 0.5925 0.5266 -0.6096 -vn 0.7108 0.0000 -0.7034 -vn 0.7182 0.0000 0.6958 -vn 0.6995 0.1205 0.7044 -vn -0.6995 0.1205 -0.7044 -vn -0.7107 -0.0000 0.7034 -vn 0.7234 0.0000 0.6904 -vn 0.7160 0.0000 0.6981 -vn 0.6857 0.0025 0.7279 -vn 0.6898 0.0019 0.7240 -vn 0.6994 -0.0002 0.7147 -vn 0.7023 0.0000 0.7119 -vn 0.7084 0.0000 0.7058 -vn 0.7166 0.0000 0.6975 -vn 0.7157 0.0271 0.6979 -vn 0.7084 0.0122 0.7057 -vn 0.7232 0.0332 0.6898 -vn 0.7311 0.0656 0.6791 -vn 0.7335 0.0542 0.6776 -vn 0.6915 0.0643 0.7195 -vn 0.7015 0.1234 0.7019 -vn 0.7119 0.1116 0.6934 -vn 0.7000 0.0574 0.7118 -vn 0.7076 0.0500 0.7049 -vn 0.7226 0.0967 0.6845 -vn 0.7288 0.0763 0.6804 -vn 0.7157 0.0391 0.6974 -vn 0.7314 0.0261 0.6814 -vn 0.7500 0.0544 0.6592 -vn 0.7515 0.0277 0.6592 -vn 0.6888 0.0061 0.7249 -vn 0.6909 0.0772 0.7188 -vn 0.7390 0.0650 0.6705 -vn 0.7434 0.0744 0.6647 -vn 0.7147 0.1205 0.6890 -vn 0.6987 0.1308 0.7033 -vn 0.7104 0.1282 0.6921 -vn 0.7380 0.0938 0.6682 -vn 0.7239 0.1091 0.6812 -vn 0.7084 0.0019 0.7058 -vn 0.7283 0.0057 0.6852 -vn 0.6817 0.0082 0.7316 -vn 0.7459 0.0078 0.6660 -vn 0.3522 -0.5390 -0.7651 -vn 0.9098 -0.4135 -0.0366 -vn 0.6909 -0.6014 0.4013 -vn -0.1072 -0.9197 -0.3777 -vn -0.0796 0.3017 -0.9501 -vn -0.7758 0.1783 -0.6052 -vn 0.2146 0.9219 -0.3225 -vn -0.2037 0.9705 0.1289 -vn 0.8262 0.4990 0.2617 -vn 0.6217 0.4208 0.6606 -vn -0.9376 0.2333 -0.2579 -vn -0.0053 -0.0067 -1.0000 -vn -0.0240 0.0578 -0.9980 -vn -0.9300 0.2485 -0.2708 -vn -0.5910 0.1646 0.7897 -vn -0.6324 0.1389 0.7621 -vn 0.6093 -0.1348 0.7814 -vn 0.6033 -0.1670 0.7799 -vn 0.9433 -0.2321 -0.2373 -vn 0.9410 -0.2129 -0.2632 -vn -0.3342 0.7081 0.6220 -vn 0.6496 0.4493 0.6133 -vn 0.8970 0.3906 -0.2068 -vn -0.5706 0.7909 -0.2213 -vn 0.1400 0.5421 -0.8286 -vn -0.0164 -0.0521 -0.9985 -vn -0.9368 0.2178 -0.2739 -vn -0.5951 0.1923 0.7803 -vn 0.6266 -0.1124 0.7712 -vn 0.9346 -0.2476 -0.2556 -vn -0.9986 -0.0462 -0.0259 -vn -0.2396 -0.9709 -0.0061 -vn -0.2869 -0.9579 -0.0076 -vn -0.9987 -0.0443 -0.0259 -vn -0.3517 0.9361 -0.0092 -vn -0.3941 0.9190 -0.0099 -vn 0.7982 0.6020 0.0206 -vn 0.7805 0.6248 0.0206 -vn 0.8549 -0.5184 0.0221 -vn 0.8423 -0.5386 0.0221 -vn -0.9378 0.2325 -0.2578 -vn -0.0053 -0.0076 -1.0000 -vn -0.0191 0.0543 -0.9983 -vn -0.9299 0.2472 -0.2724 -vn -0.5911 0.1637 0.7898 -vn -0.6300 0.1363 0.7645 -vn 0.6090 -0.1358 0.7814 -vn 0.6046 -0.1693 0.7783 -vn 0.9429 -0.2329 -0.2380 -vn 0.9409 -0.2143 -0.2624 -vn -0.3342 0.7080 0.6221 -vn 0.6266 -0.1123 0.7712 -vn 0.7806 0.6247 0.0206 -vn 0.8547 -0.5186 0.0221 -vn -0.7272 -0.0000 0.6865 -vn -0.7085 -0.0000 -0.7057 -vn -0.7135 -0.0098 -0.7006 -vn -0.6791 0.0751 0.7302 -vn -0.7135 0.0099 -0.7006 -vn -0.6791 -0.0750 0.7302 -vn 0.6850 0.0000 -0.7286 -vn 0.7194 0.0390 -0.6935 -vn 0.7194 -0.0389 -0.6935 -vn 0.7197 0.0000 0.6943 -vn 0.6986 0.1135 0.7065 -vn 0.6986 -0.1135 0.7065 -vn 0.8423 -0.5385 0.0221 -vn 0.7984 0.6018 0.0206 -vn -0.3940 0.9190 -0.0099 -vn 0.8548 -0.5185 0.0221 -vn 0.8548 -0.5186 0.0221 -vn -0.9987 -0.0442 -0.0259 -vn 0.9969 0.0000 -0.0786 -vn 0.9905 0.1147 -0.0763 -vn -0.0626 0.1158 -0.9913 -vn -0.0950 -0.0000 -0.9955 -vn -0.2796 -0.1066 -0.9542 -vn 0.9918 -0.1139 0.0572 -vn 0.0675 0.0125 0.9976 -vn 0.0858 0.1349 0.9871 -vn -0.2052 -0.1025 0.9733 -vn -0.9975 0.0058 0.0710 -vn -0.9944 0.0650 0.0839 -vn -0.9715 -0.0552 0.2304 -vn -0.6855 -0.0000 -0.7280 -vn -0.7117 0.0026 -0.7025 -vn 0.7023 -0.0028 -0.7118 -vn 0.7627 0.0000 -0.6468 -vn -0.9997 0.0036 -0.0259 -vn 0.4753 0.8514 0.2220 -vn 0.0696 0.8741 0.4806 -vn 0.6676 0.4555 -0.5890 -vn -0.4571 0.6835 -0.5692 -vn -0.6398 0.7685 0.0107 -vn 0.7779 0.6269 0.0443 -vn -0.6398 0.7685 0.0122 -vn -0.4795 0.6298 0.6111 -vn -0.6954 0.7186 0.0092 -vn 0.6698 0.4569 0.5854 -vn 0.7990 0.3105 -0.5150 -vn -0.2519 0.8301 -0.4974 -vn -0.3190 0.7414 0.5904 -vn 0.7329 0.2053 0.6486 -vn 0.9997 -0.0036 0.0259 -vn 0.9997 -0.0037 0.0259 -vn -0.6548 0.7558 -0.0076 -vn 0.7651 0.6433 0.0275 -vn 0.7776 0.6272 0.0435 -vn 0.7660 0.6422 0.0282 -vn 0.8665 0.4984 0.0267 -vn 0.7381 0.6733 0.0427 -vn -0.6555 0.7551 -0.0076 -vn -0.6893 0.7243 -0.0153 -vn 0.8177 0.3500 -0.4570 -vn -0.2476 0.8669 -0.4326 -vn -0.2987 0.6636 0.6859 -vn 0.7069 0.1493 0.6914 -vn 0.4515 0.8535 -0.2602 -vn 0.5074 0.7968 0.3281 -vn 0.2501 0.9682 -0.0061 -vn 0.0654 0.9367 -0.3441 -vn 0.5489 0.8311 -0.0893 -vn -0.1656 0.9075 0.3861 -vn 0.5310 0.7600 0.3746 -vn 0.2636 0.9637 0.0435 -vn -0.0326 0.9558 -0.2922 -vn 0.1663 0.9031 0.3960 -vn 0.3174 0.9472 0.0450 -vn 0.7101 -0.0026 0.7041 -vn -0.7040 0.0028 0.7101 -vn -0.6740 -0.0000 0.7387 -vn 0.7631 0.0000 0.6462 -vn 0.4643 0.8641 -0.1946 -vn -0.4633 0.6740 0.5753 -vn 0.6767 0.4566 0.5775 -vn 0.0267 0.8740 -0.4853 -vn 0.7777 0.6287 -0.0031 -vn -0.6401 0.7670 -0.0450 -vn -0.6401 0.7669 -0.0465 -vn -0.6958 0.7169 -0.0435 -vn -0.4748 0.6371 -0.6072 -vn 0.6614 0.4545 -0.5967 -vn -0.3107 0.7496 -0.5844 -vn -0.2569 0.8267 0.5005 -vn 0.8059 0.3091 0.5050 -vn 0.7241 0.2003 -0.6600 -vn 0.7774 0.6290 -0.0015 -vn 0.7856 0.6186 0.0130 -vn -0.6184 0.7855 -0.0259 -vn 0.7377 0.6751 -0.0061 -vn 0.8560 0.5167 0.0175 -vn 0.7864 0.6176 0.0130 -vn -0.6191 0.7849 -0.0259 -vn -0.7177 0.6960 -0.0214 -vn -0.2913 0.6731 -0.6798 -vn -0.2523 0.8636 0.4364 -vn 0.8233 0.3467 0.4494 -vn 0.6989 0.1445 -0.7005 -vn 0.4549 0.8433 0.2861 -vn 0.5026 0.8103 -0.3014 -vn 0.2321 0.9725 0.0175 -vn 0.0992 0.9370 0.3349 -vn 0.5483 0.8273 0.1221 -vn -0.2085 0.9002 -0.3822 -vn 0.5234 0.7768 -0.3502 -vn 0.2615 0.9647 -0.0298 -vn 0.0050 0.9600 0.2800 -vn 0.1246 0.9101 -0.3953 -vn 0.3153 0.9486 -0.0282 -vn -0.8169 -0.0000 0.5768 -vn -0.6258 -0.3861 0.6777 -vn 0.0195 0.0000 0.9998 -vn 0.2014 -0.6946 0.6906 -vn 0.5961 -0.5506 0.5844 -vn 0.8169 0.0000 0.5768 -vn 0.5961 0.5506 0.5844 -vn 0.0128 0.8059 0.5918 -vn -0.5834 0.5641 0.5844 -vn -0.9336 -0.3574 -0.0244 -vn -0.9998 -0.0000 -0.0175 -vn 0.7233 -0.6904 0.0122 -vn 0.4091 -0.9123 0.0198 -vn 0.9998 0.0000 0.0175 -vn 0.7233 0.6904 0.0122 -vn -0.7233 0.6904 -0.0122 -vn -0.6408 -0.3639 -0.6760 -vn -0.8169 -0.0000 -0.5768 -vn 0.5834 -0.5641 -0.5844 -vn 0.1585 -0.7154 -0.6805 -vn 0.8169 0.0000 -0.5768 -vn 0.5834 0.5641 -0.5844 -vn -0.0128 0.8059 -0.5918 -vn -0.5961 0.5506 -0.5844 -vn -0.0195 -0.0000 -0.9998 -vn -0.7818 -0.5180 0.3471 -vn -0.5596 -0.8286 0.0130 -vn 0.0134 -0.8211 0.5707 -vn -0.0069 -0.9903 -0.1389 -vn 0.5627 -0.8261 0.0298 -vn 0.7819 -0.5022 0.3693 -vn 0.6193 -0.1894 0.7620 -vn 0.0208 -0.0265 0.9994 -vn -0.6067 -0.1945 0.7707 -vn -0.6661 0.0305 -0.7452 -vn -0.8609 0.3989 -0.3159 -vn -0.0139 -0.1853 -0.9826 -vn 0.6618 0.0254 -0.7492 -vn 0.8571 0.4195 -0.2991 -vn 0.6506 0.7470 0.1366 -vn 0.0113 0.9122 0.4097 -vn -0.6614 0.7353 0.1480 -vn 0.7166 0.0000 -0.6975 -vn 0.6728 0.0000 0.7399 -vn 0.7442 0.0499 0.6660 -vn 0.6789 0.1998 -0.7065 -vn -0.6653 0.0996 -0.7399 -vn -0.7553 -0.0000 -0.6554 -vn -0.7063 -0.0584 0.7055 -vn -0.6993 -0.0000 0.7149 -vn 0.7442 -0.0499 0.6660 -vn 0.6789 -0.1999 -0.7065 -vn -0.6653 -0.0996 -0.7399 -vn -0.7063 0.0584 0.7055 -vn 0.7130 0.0000 -0.7011 -vn 0.6819 0.0000 0.7315 -vn 0.7372 0.0373 0.6746 -vn 0.6867 0.1546 -0.7103 -vn -0.6761 0.0753 -0.7330 -vn -0.7451 -0.0000 -0.6670 -vn -0.7055 -0.0449 0.7072 -vn -0.7000 -0.0000 0.7141 -vn 0.7372 -0.0373 0.6746 -vn 0.6867 -0.1545 -0.7103 -vn -0.6761 -0.0752 -0.7330 -vn -0.7055 0.0449 0.7072 -vn 0.7240 0.0000 0.6898 -vn 0.6883 0.1882 0.7005 -vn 0.7366 0.0524 -0.6743 -vn 0.6648 0.0000 -0.7470 -vn -0.7486 -0.0000 0.6630 -vn -0.6573 0.1050 0.7462 -vn -0.7070 -0.0000 -0.7072 -vn -0.7139 -0.0549 -0.6981 -vn 0.7366 -0.0524 -0.6743 -vn 0.6883 -0.1883 0.7005 -vn -0.6573 -0.1050 0.7462 -vn -0.7139 0.0549 -0.6981 -vn -0.7144 -0.0000 0.6997 -vn -0.7018 0.0040 0.7124 -vn -0.7122 -0.0038 -0.7019 -vn -0.6630 -0.0000 -0.7486 -vn 0.0370 0.0051 0.9993 -vn 0.0368 0.0000 0.9993 -vn 0.1970 0.8805 -0.4311 -vn 0.4866 0.8721 0.0511 -vn -0.5691 0.5103 -0.6448 -vn -0.5652 0.6469 0.5119 -vn 0.0637 0.7472 0.6615 -vn 0.0055 0.6457 -0.7636 -vn 0.0658 0.7470 0.6615 -vn 0.6125 0.5972 0.5179 -vn 0.0610 0.7200 0.6913 -vn 0.5926 0.4910 -0.6386 -vn -0.5277 0.2999 -0.7947 -vn -0.5278 0.8091 0.2586 -vn 0.5964 0.7372 0.3174 -vn 0.6129 0.2264 -0.7570 -vn -0.0370 -0.0051 -0.9993 -vn -0.0369 -0.0052 -0.9993 -vn -0.0368 -0.0000 -0.9993 -vn 0.0370 0.7675 0.6400 -vn -0.0173 0.6369 -0.7708 -vn 0.0040 0.6464 -0.7630 -vn -0.0174 0.6352 -0.7721 -vn -0.0256 0.5730 -0.8192 -vn 0.0086 0.6883 -0.7254 -vn 0.0369 0.0052 0.9993 -vn 0.0371 0.7667 0.6409 -vn 0.0324 0.6979 0.7155 -vn -0.4877 0.3418 -0.8033 -vn -0.4669 0.8470 0.2540 -vn 0.6844 0.6729 0.2808 -vn 0.6434 0.1783 -0.7444 -vn -0.3576 0.8403 -0.4074 -vn 0.3627 0.8148 -0.4524 -vn -0.0227 0.9859 -0.1656 -vn -0.3447 0.9387 -0.0099 -vn -0.1041 0.8438 -0.5265 -vn 0.3559 0.9189 0.1701 -vn 0.4420 0.7767 -0.4487 -vn 0.0456 0.9798 -0.1945 -vn -0.2251 0.9725 0.0603 -vn 0.3389 0.9403 -0.0298 -vn 0.0446 0.9713 -0.2334 -vn 0.7046 -0.0040 -0.7096 -vn 0.7093 0.0038 0.7049 -vn 0.7206 0.0000 0.6934 -vn 0.6479 0.0000 -0.7617 -vn 0.0364 0.0051 0.9993 -vn -0.2314 0.8668 -0.4417 -vn 0.5686 0.6552 0.4974 -vn 0.5669 0.5062 -0.6499 -vn -0.4793 0.8774 0.0198 -vn -0.0635 0.6433 -0.7630 -vn -0.0130 0.7493 0.6621 -vn -0.0151 0.7492 0.6621 -vn -0.0124 0.7219 0.6919 -vn -0.6067 0.5916 0.5309 -vn -0.5964 0.4954 -0.6316 -vn -0.5948 0.7318 0.3327 -vn 0.5299 0.8110 0.2480 -vn 0.5228 0.2972 -0.7990 -vn -0.6162 0.2332 -0.7523 -vn -0.0366 -0.0051 -0.9993 -vn -0.0367 -0.0052 -0.9993 -vn -0.0618 0.6437 -0.7628 -vn -0.0392 0.6622 -0.7483 -vn 0.0119 0.7383 0.6743 -vn -0.0591 0.6863 -0.7249 -vn -0.0352 0.5516 -0.8334 -vn -0.0392 0.6609 -0.7494 -vn 0.0367 0.0052 0.9993 -vn 0.0119 0.7376 0.6752 -vn 0.0190 0.7262 0.6873 -vn -0.6832 0.6682 0.2945 -vn 0.4686 0.8490 0.2441 -vn 0.4822 0.3392 -0.8077 -vn -0.6481 0.1849 -0.7388 -vn 0.3254 0.8529 -0.4082 -vn -0.3965 0.7992 -0.4517 -vn 0.0114 0.9837 -0.1793 -vn 0.3544 0.9349 0.0183 -vn 0.0637 0.8450 -0.5310 -vn -0.3515 0.9262 0.1366 -vn -0.4719 0.7568 -0.4523 -vn -0.0595 0.9786 -0.1968 -vn 0.2373 0.9673 0.0900 -vn -0.3380 0.9391 -0.0618 -vn -0.0622 0.9698 -0.2357 -vn -0.7219 -0.0000 -0.6920 -vn 0.7481 0.0000 -0.6636 -vn 0.6577 0.0992 -0.7467 -vn -0.6897 0.1871 -0.6995 -vn -0.7360 0.0580 0.6744 -vn -0.6648 -0.0000 0.7470 -vn 0.7123 -0.0540 0.6997 -vn 0.7086 0.0000 0.7056 -vn 0.6577 -0.0992 -0.7467 -vn -0.6897 -0.1871 -0.6995 -vn -0.7360 -0.0580 0.6744 -vn 0.7123 0.0540 0.6997 -vn 0.7145 0.0000 -0.6996 -vn 0.6807 0.1988 -0.7050 -vn -0.6659 0.0942 -0.7401 -vn 0.6733 0.0000 0.7394 -vn 0.7439 0.0552 0.6661 -vn -0.7010 -0.0000 0.7132 -vn -0.7046 -0.0575 0.7073 -vn -0.6659 -0.0942 -0.7401 -vn 0.6807 -0.1988 -0.7050 -vn 0.7439 -0.0552 0.6661 -vn -0.7046 0.0575 0.7073 -vn -0.7191 -0.0000 -0.6949 -vn 0.7378 0.0000 -0.6751 -vn 0.6685 0.0750 -0.7399 -vn -0.6966 0.1446 -0.7028 -vn -0.7292 0.0437 0.6829 -vn -0.6741 -0.0000 0.7387 -vn 0.7118 -0.0415 0.7011 -vn 0.7092 0.0000 0.7051 -vn 0.6685 -0.0750 -0.7399 -vn -0.6966 -0.1446 -0.7028 -vn -0.7292 -0.0437 0.6829 -vn 0.7118 0.0415 0.7011 -# 1436 vertex normals - -vt 0.5543 0.3819 0.0000 -vt 0.5766 0.3819 0.0000 -vt 0.5699 0.3290 0.0000 -vt 0.5544 0.3281 0.0000 -vt 0.5766 0.4508 0.0000 -vt 0.5543 0.4508 0.0000 -vt 0.5668 0.5107 0.0000 -vt 0.5544 0.5107 0.0000 -vt 0.5323 0.3819 0.0000 -vt 0.5323 0.3262 0.0000 -vt 0.5323 0.4508 0.0000 -vt 0.5322 0.5107 0.0000 -vt 0.5099 0.3818 0.0000 -vt 0.5098 0.3244 0.0000 -vt 0.5099 0.4508 0.0000 -vt 0.5097 0.5109 0.0000 -vt 0.4869 0.3816 0.0000 -vt 0.4870 0.3221 0.0000 -vt 0.4870 0.4509 0.0000 -vt 0.4872 0.5110 0.0000 -vt 0.9115 0.1697 0.0000 -vt 0.9096 0.0208 0.0000 -vt 0.9278 0.0207 0.0000 -vt 0.9249 0.1696 0.0000 -vt 0.9657 0.1761 0.0000 -vt 0.9500 0.1783 0.0000 -vt 0.9522 0.0253 0.0000 -vt 0.9711 0.0226 0.0000 -vt 0.9317 0.3184 0.0000 -vt 0.9092 0.3185 0.0000 -vt 0.9871 0.3257 0.0000 -vt 0.9639 0.3290 0.0000 -vt 0.3011 0.1842 0.0000 -vt 0.3011 0.1683 0.0000 -vt 0.2824 0.1683 0.0000 -vt 0.2824 0.1842 0.0000 -vt 0.2731 0.1015 0.0000 -vt 0.2757 0.0096 0.0000 -vt 0.2570 0.0096 0.0000 -vt 0.2619 0.1015 0.0000 -vt 0.2914 0.0825 0.0000 -vt 0.2817 0.0825 0.0000 -vt 0.2860 0.0077 0.0000 -vt 0.3004 0.0077 0.0000 -vt 0.2570 0.1933 0.0000 -vt 0.2757 0.1933 0.0000 -vt 0.3004 0.1573 0.0000 -vt 0.2860 0.1573 0.0000 -vt 0.2831 0.5415 0.0000 -vt 0.2876 0.7272 0.0000 -vt 0.1570 0.7301 0.0000 -vt 0.1588 0.5391 0.0000 -vt 0.1600 0.5278 0.0000 -vt 0.2845 0.5302 0.0000 -vt 0.5593 0.7492 0.0000 -vt 0.5495 0.7564 0.0000 -vt 0.5310 0.5442 0.0000 -vt 0.5411 0.5368 0.0000 -vt 0.0350 0.5359 0.0000 -vt 0.0236 0.7419 0.0000 -vt 0.0133 0.7352 0.0000 -vt 0.0247 0.5291 0.0000 -vt 0.3718 0.4361 0.0000 -vt 0.4116 0.4372 0.0000 -vt 0.4148 0.5077 0.0000 -vt 0.3731 0.5041 0.0000 -vt 0.3312 0.5052 0.0000 -vt 0.3320 0.4348 0.0000 -vt 0.4175 0.7369 0.0000 -vt 0.4073 0.5435 0.0000 -vt 0.4090 0.5322 0.0000 -vt 0.5335 0.5329 0.0000 -vt 0.0354 0.5246 0.0000 -vt 0.2925 0.4331 0.0000 -vt 0.2885 0.5097 0.0000 -vt 0.4511 0.4380 0.0000 -vt 0.4572 0.5147 0.0000 -vt 0.4798 0.4212 0.0000 -vt 0.3807 0.4212 0.0000 -vt 0.3807 0.3221 0.0000 -vt 0.4798 0.3221 0.0000 -vt 0.2850 0.3118 0.0000 -vt 0.2850 0.3380 0.0000 -vt 0.2499 0.3303 0.0000 -vt 0.2499 0.3066 0.0000 -vt 0.3086 0.4106 0.0000 -vt 0.3086 0.3690 0.0000 -vt 0.2423 0.3710 0.0000 -vt 0.2423 0.4086 0.0000 -vt 0.3196 0.3267 0.0000 -vt 0.3196 0.3576 0.0000 -vt 0.3742 0.3652 0.0000 -vt 0.3742 0.4144 0.0000 -vt 0.4938 0.7770 0.0000 -vt 0.4938 0.9928 0.0000 -vt 0.5823 0.9148 0.0000 -vt 0.5823 0.7770 0.0000 -vt 0.0099 0.8916 0.0000 -vt 0.2078 0.8916 0.0000 -vt 0.2078 0.8042 0.0000 -vt 0.0099 0.8042 0.0000 -vt 0.1904 0.9949 0.0000 -vt 0.0053 0.9949 0.0000 -vt 0.0053 0.9131 0.0000 -vt 0.1904 0.9131 0.0000 -vt 0.4053 0.9148 0.0000 -vt 0.4053 0.7770 0.0000 -vt 0.2678 0.8611 0.0000 -vt 0.2678 0.7781 0.0000 -vt 0.3211 0.7781 0.0000 -vt 0.3211 0.9081 0.0000 -vt 0.8981 0.4255 0.0000 -vt 0.8858 0.4345 0.0000 -vt 0.8856 0.3969 0.0000 -vt 0.8979 0.3976 0.0000 -vt 0.9296 0.3584 0.0000 -vt 0.9296 0.3243 0.0000 -vt 0.9534 0.3243 0.0000 -vt 0.9534 0.3584 0.0000 -vt 0.9376 0.5171 0.0000 -vt 0.9376 0.4718 0.0000 -vt 0.9427 0.4718 0.0000 -vt 0.9427 0.5171 0.0000 -vt 0.9079 0.3584 0.0000 -vt 0.9079 0.3243 0.0000 -vt 0.9341 0.3999 0.0000 -vt 0.9546 0.4002 0.0000 -vt 0.9546 0.4032 0.0000 -vt 0.9341 0.4029 0.0000 -vt 0.9308 0.3930 0.0000 -vt 0.9175 0.3916 0.0000 -vt 0.9308 0.3847 0.0000 -vt 0.8856 0.4425 0.0000 -vt 0.8991 0.4326 0.0000 -vt 0.9062 0.4354 0.0000 -vt 0.8856 0.4497 0.0000 -vt 0.8535 0.3847 0.0000 -vt 0.8668 0.3922 0.0000 -vt 0.8535 0.3930 0.0000 -vt 0.8922 0.3818 0.0000 -vt 0.8922 0.3901 0.0000 -vt 0.8734 0.4256 0.0000 -vt 0.8733 0.3979 0.0000 -vt 0.9376 0.5625 0.0000 -vt 0.9427 0.5625 0.0000 -vt 0.9137 0.3997 0.0000 -vt 0.9136 0.4026 0.0000 -vt 0.8720 0.4326 0.0000 -vt 0.8649 0.4354 0.0000 -vt 0.9497 0.4833 0.0000 -vt 0.9497 0.4152 0.0000 -vt 0.9542 0.4152 0.0000 -vt 0.9542 0.4833 0.0000 -vt 0.9497 0.5204 0.0000 -vt 0.9542 0.5204 0.0000 -vt 0.9497 0.5575 0.0000 -vt 0.9542 0.5575 0.0000 -vt 0.9542 0.6250 0.0000 -vt 0.9497 0.6250 0.0000 -vt 0.8866 0.3751 0.0000 -vt 0.8570 0.3757 0.0000 -vt 0.8570 0.3729 0.0000 -vt 0.8866 0.3723 0.0000 -vt 0.9161 0.3745 0.0000 -vt 0.9161 0.3717 0.0000 -vt 0.8649 0.4026 0.0000 -vt 0.8720 0.4022 0.0000 -vt 0.9427 0.6217 0.0000 -vt 0.9376 0.6217 0.0000 -vt 0.9376 0.4126 0.0000 -vt 0.9427 0.4126 0.0000 -vt 0.8991 0.4019 0.0000 -vt 0.9062 0.4026 0.0000 -vt 0.9160 0.3675 0.0000 -vt 0.9315 0.3672 0.0000 -vt 0.9316 0.3714 0.0000 -vt 0.8865 0.3681 0.0000 -vt 0.8569 0.3687 0.0000 -vt 0.8414 0.3690 0.0000 -vt 0.8415 0.3732 0.0000 -vt 0.9341 0.3967 0.0000 -vt 0.9546 0.3970 0.0000 -vt 0.9137 0.3964 0.0000 -vt 0.9392 0.3712 0.0000 -vt 0.9393 0.3751 0.0000 -vt 0.9317 0.3752 0.0000 -vt 0.9391 0.3670 0.0000 -vt 0.9374 0.3847 0.0000 -vt 0.9374 0.3930 0.0000 -vt 0.9102 0.3996 0.0000 -vt 0.9102 0.3963 0.0000 -vt 0.9102 0.4026 0.0000 -vt 0.9581 0.4003 0.0000 -vt 0.9580 0.4033 0.0000 -vt 0.9581 0.3970 0.0000 -vt 0.8469 0.3930 0.0000 -vt 0.8469 0.3847 0.0000 -vt 0.8339 0.3733 0.0000 -vt 0.8338 0.3691 0.0000 -vt 0.8339 0.3771 0.0000 -vt 0.8416 0.3770 0.0000 -vt 0.6537 0.7500 0.0000 -vt 0.5717 0.7500 0.0000 -vt 0.5717 0.5730 0.0000 -vt 0.6537 0.5730 0.0000 -vt 0.6192 0.8707 0.0000 -vt 0.7028 0.8707 0.0000 -vt 0.6942 0.7769 0.0000 -vt 0.6278 0.7769 0.0000 -vt 0.5717 0.7509 0.0000 -vt 0.6192 0.8702 0.0000 -vt 0.6213 0.7769 0.0000 -vt 0.6111 0.8702 0.0000 -vt 0.7007 0.7769 0.0000 -vt 0.7028 0.8702 0.0000 -vt 0.7110 0.8702 0.0000 -vt 0.5998 0.7509 0.0000 -vt 0.5998 0.5730 0.0000 -vt 0.7566 0.8777 0.0000 -vt 0.7430 0.8777 0.0000 -vt 0.7455 0.8046 0.0000 -vt 0.7653 0.8046 0.0000 -vt 0.7197 0.8767 0.0000 -vt 0.7332 0.8767 0.0000 -vt 0.7265 0.8006 0.0000 -vt 0.7088 0.8006 0.0000 -vt 0.7452 0.9590 0.0000 -vt 0.7656 0.9590 0.0000 -vt 0.7232 0.9613 0.0000 -vt 0.7414 0.9613 0.0000 -vt 0.8245 0.8198 0.0000 -vt 0.8176 0.8887 0.0000 -vt 0.8307 0.8887 0.0000 -vt 0.8434 0.8198 0.0000 -vt 0.7950 0.8927 0.0000 -vt 0.7777 0.8923 0.0000 -vt 0.7895 0.8025 0.0000 -vt 0.8121 0.8029 0.0000 -vt 0.8080 0.9580 0.0000 -vt 0.8276 0.9653 0.0000 -vt 0.7767 0.9897 0.0000 -vt 0.8000 0.9901 0.0000 -vt 0.6832 0.7109 0.0000 -vt 0.6832 0.6133 0.0000 -vt 0.8256 0.6133 0.0000 -vt 0.8256 0.7109 0.0000 -vt 0.8172 0.6055 0.0000 -vt 0.6847 0.6055 0.0000 -vt 0.6847 0.5792 0.0000 -vt 0.8172 0.5792 0.0000 -vt 0.6843 0.7193 0.0000 -vt 0.6793 0.7379 0.0000 -vt 0.8273 0.7329 0.0000 -vt 0.8323 0.7143 0.0000 -vt 0.7770 0.1495 0.0000 -vt 0.7887 0.0175 0.0000 -vt 0.7500 0.0175 0.0000 -vt 0.7552 0.1495 0.0000 -vt 0.7500 0.2815 0.0000 -vt 0.7887 0.2815 0.0000 -vt 0.6720 0.1497 0.0000 -vt 0.6501 0.1497 0.0000 -vt 0.6432 0.0228 0.0000 -vt 0.6820 0.0228 0.0000 -vt 0.6820 0.2766 0.0000 -vt 0.6432 0.3036 0.0000 -vt 0.7224 0.1415 0.0000 -vt 0.7006 0.1415 0.0000 -vt 0.6960 0.0189 0.0000 -vt 0.7348 0.0189 0.0000 -vt 0.6954 0.2903 0.0000 -vt 0.7341 0.2903 0.0000 -vt 0.2296 0.2265 0.0000 -vt 0.2377 0.3163 0.0000 -vt 0.2165 0.3163 0.0000 -vt 0.2085 0.2265 0.0000 -vt 0.1711 0.3177 0.0000 -vt 0.1936 0.3147 0.0000 -vt 0.1836 0.2466 0.0000 -vt 0.1646 0.2356 0.0000 -vt 0.2296 0.4035 0.0000 -vt 0.2085 0.4035 0.0000 -vt 0.1915 0.3650 0.0000 -vt 0.1772 0.3973 0.0000 -vt 0.3399 0.3448 0.0000 -vt 0.3399 0.2955 0.0000 -vt 0.3315 0.2955 0.0000 -vt 0.3315 0.3447 0.0000 -vt 0.3349 0.3516 0.0000 -vt 0.3638 0.3512 0.0000 -vt 0.3684 0.3444 0.0000 -vt 0.3684 0.2958 0.0000 -vt 0.3638 0.2890 0.0000 -vt 0.3349 0.2886 0.0000 -vt 0.3687 0.3532 0.0000 -vt 0.3730 0.3452 0.0000 -vt 0.3730 0.2950 0.0000 -vt 0.3687 0.2871 0.0000 -vt 0.3420 0.2223 0.0000 -vt 0.3325 0.2223 0.0000 -vt 0.3326 0.2774 0.0000 -vt 0.3421 0.2774 0.0000 -vt 0.3741 0.2774 0.0000 -vt 0.3740 0.2222 0.0000 -vt 0.3362 0.2850 0.0000 -vt 0.3683 0.2849 0.0000 -vt 0.3795 0.2772 0.0000 -vt 0.3795 0.2222 0.0000 -vt 0.3740 0.2871 0.0000 -vt 0.3795 0.2865 0.0000 -vt 0.3281 0.7749 0.0000 -vt 0.3281 0.7711 0.0000 -vt 0.0089 0.7656 0.0000 -vt 0.0088 0.7694 0.0000 -vt 0.3283 0.7604 0.0000 -vt 0.0091 0.7549 0.0000 -vt 0.0711 0.7886 0.0000 -vt 0.0084 0.7886 0.0000 -vt 0.0084 0.7858 0.0000 -vt 0.0711 0.7858 0.0000 -vt 0.0084 0.7747 0.0000 -vt 0.0711 0.7747 0.0000 -vt 0.2599 0.7974 0.0000 -vt 0.0814 0.7941 0.0000 -vt 0.0814 0.7923 0.0000 -vt 0.2599 0.7956 0.0000 -vt 0.0815 0.7850 0.0000 -vt 0.2601 0.7883 0.0000 -vt 0.3904 0.9914 0.0000 -vt 0.3904 0.9117 0.0000 -vt 0.2102 0.9117 0.0000 -vt 0.2102 0.9914 0.0000 -vt 0.4064 0.1943 0.0000 -vt 0.3356 0.2009 0.0000 -vt 0.3508 0.1509 0.0000 -vt 0.4040 0.1592 0.0000 -vt 0.3141 0.2067 0.0000 -vt 0.3128 0.1381 0.0000 -vt 0.3695 0.0881 0.0000 -vt 0.3952 0.1005 0.0000 -vt 0.3151 0.0965 0.0000 -vt 0.5998 0.0056 0.0000 -vt 0.5984 0.1602 0.0000 -vt 0.6271 0.1602 0.0000 -vt 0.6385 0.0056 0.0000 -vt 0.5998 0.3148 0.0000 -vt 0.6385 0.3148 0.0000 -vt 0.5792 0.1625 0.0000 -vt 0.5495 0.1625 0.0000 -vt 0.5498 0.0090 0.0000 -vt 0.5897 0.0090 0.0000 -vt 0.5897 0.3161 0.0000 -vt 0.5498 0.3161 0.0000 -vt 0.1025 0.5132 0.0000 -vt 0.0149 0.5132 0.0000 -vt 0.0149 0.4236 0.0000 -vt 0.1025 0.4236 0.0000 -vt 0.1578 0.3962 0.0000 -vt 0.0854 0.3962 0.0000 -vt 0.0854 0.1884 0.0000 -vt 0.1578 0.1884 0.0000 -vt 0.0058 0.1784 0.0000 -vt 0.0667 0.1784 0.0000 -vt 0.0667 0.0037 0.0000 -vt 0.0058 0.0037 0.0000 -vt 0.0800 0.1790 0.0000 -vt 0.1409 0.1790 0.0000 -vt 0.1409 0.0042 0.0000 -vt 0.0800 0.0042 0.0000 -vt 0.0787 0.4021 0.0000 -vt 0.0041 0.4021 0.0000 -vt 0.0041 0.1881 0.0000 -vt 0.0787 0.1881 0.0000 -vt 0.0057 0.4170 0.0000 -vt 0.1117 0.4170 0.0000 -vt 0.1117 0.5198 0.0000 -vt 0.0057 0.5198 0.0000 -vt 0.1578 0.4044 0.0000 -vt 0.0854 0.4044 0.0000 -vt 0.0058 0.1853 0.0000 -vt 0.0667 0.1853 0.0000 -vt 0.0800 0.1859 0.0000 -vt 0.1409 0.1859 0.0000 -vt 0.0787 0.4106 0.0000 -vt 0.0041 0.4106 0.0000 -vt 0.1234 0.5153 0.0000 -vt 0.2286 0.5153 0.0000 -vt 0.2286 0.5003 0.0000 -vt 0.1234 0.5003 0.0000 -vt 0.1981 0.4483 0.0000 -vt 0.1195 0.4483 0.0000 -vt 0.1195 0.4224 0.0000 -vt 0.1981 0.4177 0.0000 -vt 0.2025 0.4850 0.0000 -vt 0.2869 0.4850 0.0000 -vt 0.2869 0.4598 0.0000 -vt 0.2025 0.4551 0.0000 -vt 0.2767 0.4483 0.0000 -vt 0.2767 0.4224 0.0000 -vt 0.1182 0.4850 0.0000 -vt 0.1182 0.4598 0.0000 -vt 0.2519 0.2562 0.0000 -vt 0.2598 0.2562 0.0000 -vt 0.2598 0.2285 0.0000 -vt 0.2519 0.2203 0.0000 -vt 0.2878 0.2921 0.0000 -vt 0.2878 0.2839 0.0000 -vt 0.2598 0.2839 0.0000 -vt 0.2519 0.2921 0.0000 -vt 0.3237 0.2562 0.0000 -vt 0.3157 0.2562 0.0000 -vt 0.3157 0.2839 0.0000 -vt 0.3237 0.2921 0.0000 -vt 0.2878 0.2203 0.0000 -vt 0.2878 0.2285 0.0000 -vt 0.3157 0.2285 0.0000 -vt 0.3237 0.2203 0.0000 -vt 0.4345 0.1722 0.0000 -vt 0.4256 0.1733 0.0000 -vt 0.4270 0.1485 0.0000 -vt 0.4169 0.1712 0.0000 -vt 0.4170 0.1257 0.0000 -vt 0.4257 0.1234 0.0000 -vt 0.4346 0.1245 0.0000 -vt 0.4424 0.1289 0.0000 -vt 0.4483 0.1356 0.0000 -vt 0.4515 0.1440 0.0000 -vt 0.4515 0.1530 0.0000 -vt 0.4483 0.1613 0.0000 -vt 0.4424 0.1680 0.0000 -vt 0.4148 0.0240 0.0000 -vt 0.4045 0.0414 0.0000 -vt 0.3976 0.0383 0.0000 -vt 0.4037 0.0190 0.0000 -vt 0.4245 0.0314 0.0000 -vt 0.4105 0.0459 0.0000 -vt 0.4324 0.0410 0.0000 -vt 0.4152 0.0515 0.0000 -vt 0.4382 0.0525 0.0000 -vt 0.4182 0.0578 0.0000 -vt 0.3409 0.0445 0.0000 -vt 0.3589 0.0536 0.0000 -vt 0.3564 0.0601 0.0000 -vt 0.3361 0.0564 0.0000 -vt 0.3480 0.0344 0.0000 -vt 0.3632 0.0477 0.0000 -vt 0.3571 0.0262 0.0000 -vt 0.3688 0.0427 0.0000 -vt 0.3678 0.0204 0.0000 -vt 0.3754 0.0391 0.0000 -vt 0.3796 0.0172 0.0000 -vt 0.3827 0.0371 0.0000 -vt 0.3917 0.0167 0.0000 -vt 0.3902 0.0369 0.0000 -vt 0.4221 0.0116 0.0000 -vt 0.4080 0.0053 0.0000 -vt 0.4344 0.0210 0.0000 -vt 0.4441 0.0327 0.0000 -vt 0.4513 0.0455 0.0000 -vt 0.3286 0.0372 0.0000 -vt 0.3224 0.0505 0.0000 -vt 0.3374 0.0247 0.0000 -vt 0.3489 0.0144 0.0000 -vt 0.3625 0.0070 0.0000 -vt 0.3774 0.0029 0.0000 -vt 0.3928 0.0023 0.0000 -vt 0.4102 0.2721 0.0000 -vt 0.3951 0.2794 0.0000 -vt 0.3897 0.2637 0.0000 -vt 0.4061 0.2601 0.0000 -vt 0.4170 0.2828 0.0000 -vt 0.4040 0.2934 0.0000 -vt 0.4261 0.2917 0.0000 -vt 0.4159 0.3050 0.0000 -vt 0.4371 0.2981 0.0000 -vt 0.4302 0.3135 0.0000 -vt 0.4390 0.1981 0.0000 -vt 0.4328 0.1825 0.0000 -vt 0.4489 0.1782 0.0000 -vt 0.4513 0.1948 0.0000 -vt 0.4279 0.2041 0.0000 -vt 0.4182 0.1904 0.0000 -vt 0.4184 0.2126 0.0000 -vt 0.4058 0.2015 0.0000 -vt 0.4112 0.2231 0.0000 -vt 0.3964 0.2152 0.0000 -vt 0.4066 0.2349 0.0000 -vt 0.3903 0.2307 0.0000 -vt 0.4048 0.2475 0.0000 -vt 0.3880 0.2471 0.0000 -vt 0.7282 0.5246 0.0000 -vt 0.7378 0.5238 0.0000 -vt 0.7411 0.5710 0.0000 -vt 0.7328 0.5717 0.0000 -vt 0.7186 0.5257 0.0000 -vt 0.7245 0.5726 0.0000 -vt 0.7163 0.5737 0.0000 -vt 0.7090 0.5267 0.0000 -vt 0.6995 0.5283 0.0000 -vt 0.7081 0.5751 0.0000 -vt 0.7957 0.5247 0.0000 -vt 0.8053 0.5255 0.0000 -vt 0.7990 0.5727 0.0000 -vt 0.7908 0.5717 0.0000 -vt 0.7860 0.5239 0.0000 -vt 0.7826 0.5710 0.0000 -vt 0.7763 0.5233 0.0000 -vt 0.7743 0.5705 0.0000 -vt 0.7667 0.5230 0.0000 -vt 0.7660 0.5703 0.0000 -vt 0.7571 0.5230 0.0000 -vt 0.7577 0.5703 0.0000 -vt 0.7474 0.5233 0.0000 -vt 0.7494 0.5705 0.0000 -vt 0.2323 0.2005 0.0000 -vt 0.1605 0.2005 0.0000 -vt 0.1605 0.1287 0.0000 -vt 0.2323 0.1287 0.0000 -vt 0.2493 0.0649 0.0000 -vt 0.1549 0.0649 0.0000 -vt 0.1510 0.0139 0.0000 -vt 0.2531 0.0139 0.0000 -vt 0.1510 0.1160 0.0000 -vt 0.2531 0.1160 0.0000 -vt 0.8932 0.8530 0.0000 -vt 0.8784 0.8552 0.0000 -vt 0.8769 0.8224 0.0000 -vt 0.8917 0.8188 0.0000 -vt 0.9487 0.8371 0.0000 -vt 0.9515 0.8608 0.0000 -vt 0.9383 0.8557 0.0000 -vt 0.9371 0.8262 0.0000 -vt 0.9218 0.8207 0.0000 -vt 0.9232 0.8532 0.0000 -vt 0.9081 0.8508 0.0000 -vt 0.9066 0.8151 0.0000 -vt 0.8658 0.8597 0.0000 -vt 0.8798 0.8879 0.0000 -vt 0.8649 0.8886 0.0000 -vt 0.8947 0.8872 0.0000 -vt 0.8960 0.9072 0.0000 -vt 0.8803 0.9073 0.0000 -vt 0.9543 0.8844 0.0000 -vt 0.9601 0.9224 0.0000 -vt 0.9439 0.9164 0.0000 -vt 0.9394 0.8851 0.0000 -vt 0.9245 0.8858 0.0000 -vt 0.9278 0.9118 0.0000 -vt 0.9117 0.9072 0.0000 -vt 0.9096 0.8865 0.0000 -vt 0.8648 0.9120 0.0000 -vt 0.8807 0.9266 0.0000 -vt 0.8646 0.9353 0.0000 -vt 0.9648 0.8659 0.0000 -vt 0.9692 0.8836 0.0000 -vt 0.8564 0.8393 0.0000 -vt 0.8666 0.8309 0.0000 -vt 0.8532 0.8643 0.0000 -vt 0.8972 0.9272 0.0000 -vt 0.9137 0.9278 0.0000 -vt 0.9659 0.9604 0.0000 -vt 0.9763 0.9283 0.0000 -vt 0.9833 0.9730 0.0000 -vt 0.9311 0.9378 0.0000 -vt 0.9484 0.9478 0.0000 -vt 0.8501 0.8893 0.0000 -vt 0.8493 0.9166 0.0000 -vt 0.9603 0.8481 0.0000 -vt 0.8485 0.9440 0.0000 -vt 0.9897 0.8367 0.0000 -vt 0.9878 0.8367 0.0000 -vt 0.9878 0.5203 0.0000 -vt 0.9897 0.5203 0.0000 -vt 0.9916 0.8367 0.0000 -vt 0.9916 0.5203 0.0000 -vt 0.9839 0.8367 0.0000 -vt 0.9818 0.8367 0.0000 -vt 0.9818 0.5203 0.0000 -vt 0.9839 0.5203 0.0000 -vt 0.9859 0.8367 0.0000 -vt 0.9859 0.5203 0.0000 -vt 0.9958 0.8502 0.0000 -vt 0.9868 0.8563 0.0000 -vt 0.9783 0.8496 0.0000 -vt 0.9928 0.8397 0.0000 -vt 0.9820 0.8393 0.0000 -vt 0.9203 0.5099 0.0000 -vt 0.9177 0.5100 0.0000 -vt 0.9146 0.4105 0.0000 -vt 0.9189 0.4103 0.0000 -vt 0.9223 0.5099 0.0000 -vt 0.9221 0.4104 0.0000 -vt 0.9252 0.5099 0.0000 -vt 0.9269 0.4107 0.0000 -vt 0.9272 0.5099 0.0000 -vt 0.9301 0.4107 0.0000 -vt 0.9151 0.5100 0.0000 -vt 0.9104 0.4108 0.0000 -vt 0.9068 0.6461 0.0000 -vt 0.9068 0.6257 0.0000 -vt 0.9272 0.6194 0.0000 -vt 0.9272 0.6524 0.0000 -vt 0.9398 0.6359 0.0000 -vt 0.9182 0.5597 0.0000 -vt 0.9208 0.5597 0.0000 -vt 0.9228 0.5596 0.0000 -vt 0.9257 0.5596 0.0000 -vt 0.9277 0.5597 0.0000 -vt 0.9156 0.5597 0.0000 -vt 0.9188 0.6094 0.0000 -vt 0.9214 0.6094 0.0000 -vt 0.9234 0.6094 0.0000 -vt 0.9263 0.6093 0.0000 -vt 0.9283 0.6094 0.0000 -vt 0.9162 0.6094 0.0000 -vt 0.9909 0.4977 0.0000 -vt 0.9862 0.4977 0.0000 -vt 0.9862 0.3406 0.0000 -vt 0.9909 0.3406 0.0000 -vt 0.9718 0.4977 0.0000 -vt 0.9671 0.4977 0.0000 -vt 0.9671 0.3406 0.0000 -vt 0.9718 0.3406 0.0000 -vt 0.9766 0.4977 0.0000 -vt 0.9766 0.3406 0.0000 -vt 0.9814 0.4977 0.0000 -vt 0.9814 0.3406 0.0000 -vt 0.4627 0.1545 0.0000 -vt 0.4900 0.1545 0.0000 -vt 0.4886 0.0081 0.0000 -vt 0.4519 0.0081 0.0000 -vt 0.4886 0.3010 0.0000 -vt 0.4519 0.3010 0.0000 -vt 0.5082 0.1567 0.0000 -vt 0.4982 0.0112 0.0000 -vt 0.5360 0.0112 0.0000 -vt 0.5362 0.1567 0.0000 -vt 0.5360 0.3022 0.0000 -vt 0.4982 0.3022 0.0000 -vt 0.8396 0.7268 0.0000 -vt 0.8396 0.7694 0.0000 -vt 0.9436 0.7198 0.0000 -vt 0.9436 0.7062 0.0000 -vt 0.6527 0.5196 0.0000 -vt 0.5818 0.5262 0.0000 -vt 0.5823 0.5023 0.0000 -vt 0.6532 0.4957 0.0000 -vt 0.8263 0.3959 0.0000 -vt 0.8263 0.3521 0.0000 -vt 0.8299 0.3500 0.0000 -vt 0.8299 0.3981 0.0000 -vt 0.7694 0.3981 0.0000 -vt 0.7694 0.3959 0.0000 -vt 0.8397 0.7769 0.0000 -vt 0.9437 0.7272 0.0000 -vt 0.6526 0.5237 0.0000 -vt 0.5817 0.5303 0.0000 -vt 0.6942 0.3326 0.0000 -vt 0.7990 0.3325 0.0000 -vt 0.7985 0.3269 0.0000 -vt 0.6938 0.3278 0.0000 -vt 0.9750 0.7589 0.0000 -vt 0.8460 0.8162 0.0000 -vt 0.8459 0.8073 0.0000 -vt 0.9749 0.7500 0.0000 -vt 0.7029 0.3584 0.0000 -vt 0.7029 0.4454 0.0000 -vt 0.6025 0.4454 0.0000 -vt 0.6025 0.3584 0.0000 -vt 0.6885 0.4818 0.0000 -vt 0.5970 0.4799 0.0000 -vt 0.5977 0.4706 0.0000 -vt 0.6891 0.4725 0.0000 -vt 0.7694 0.3521 0.0000 -vt 0.7125 0.3521 0.0000 -vt 0.7125 0.3500 0.0000 -vt 0.7694 0.3500 0.0000 -vt 0.6881 0.4868 0.0000 -vt 0.5967 0.4849 0.0000 -vt 0.6961 0.3466 0.0000 -vt 0.5980 0.3534 0.0000 -vt 0.5976 0.3494 0.0000 -vt 0.6956 0.3408 0.0000 -vt 0.7235 0.5183 0.0000 -vt 0.7240 0.4945 0.0000 -vt 0.7125 0.3959 0.0000 -vt 0.7125 0.3981 0.0000 -vt 0.7234 0.5225 0.0000 -vt 0.5899 0.3399 0.0000 -vt 0.5896 0.3354 0.0000 -vt 0.7801 0.4810 0.0000 -vt 0.7795 0.4903 0.0000 -vt 0.7791 0.4953 0.0000 -vt 0.7943 0.3415 0.0000 -vt 0.7948 0.3470 0.0000 -vt 0.7756 0.4056 0.0000 -vt 0.7227 0.4056 0.0000 -vt 0.7174 0.4000 0.0000 -vt 0.7810 0.4000 0.0000 -vt 0.7174 0.4051 0.0000 -vt 0.8395 0.4464 0.0000 -vt 0.8395 0.4056 0.0000 -vt 0.8445 0.4000 0.0000 -vt 0.8445 0.4521 0.0000 -vt 0.7860 0.4464 0.0000 -vt 0.7810 0.4521 0.0000 -vt 0.7860 0.4056 0.0000 -vt 0.7810 0.4056 0.0000 -vt 0.7957 0.4563 0.0000 -vt 0.8479 0.4563 0.0000 -vt 0.8479 0.4601 0.0000 -vt 0.7957 0.4601 0.0000 -vt 0.7389 0.4601 0.0000 -vt 0.7389 0.4563 0.0000 -vt 0.7071 0.4601 0.0000 -vt 0.7071 0.4563 0.0000 -vt 0.6117 0.4563 0.0000 -vt 0.6117 0.4601 0.0000 -vt 0.7810 0.4464 0.0000 -vt 0.7756 0.4465 0.0000 -vt 0.7225 0.4465 0.0000 -vt 0.7174 0.4521 0.0000 -vt 0.8927 0.0885 0.0000 -vt 0.8969 0.0810 0.0000 -vt 0.9040 0.0969 0.0000 -vt 0.7896 0.0803 0.0000 -vt 0.8005 0.0831 0.0000 -vt 0.7899 0.0962 0.0000 -vt 0.8040 0.0926 0.0000 -vt 0.8032 0.1028 0.0000 -vt 0.7986 0.1119 0.0000 -vt 0.8969 0.1127 0.0000 -vt 0.8927 0.1052 0.0000 -vt 0.8917 0.0969 0.0000 -vt 0.8804 0.0738 0.0000 -vt 0.8804 0.0857 0.0000 -vt 0.8177 0.0918 0.0000 -vt 0.8187 0.0777 0.0000 -vt 0.8166 0.1056 0.0000 -vt 0.8156 0.1197 0.0000 -vt 0.8804 0.1080 0.0000 -vt 0.8804 0.1199 0.0000 -vt 0.8804 0.0969 0.0000 -vt 0.8639 0.0810 0.0000 -vt 0.8681 0.0885 0.0000 -vt 0.8311 0.0946 0.0000 -vt 0.8360 0.0857 0.0000 -vt 0.8303 0.1048 0.0000 -vt 0.8336 0.1146 0.0000 -vt 0.8681 0.1052 0.0000 -vt 0.8639 0.1127 0.0000 -vt 0.8691 0.0969 0.0000 -vt 0.8568 0.0969 0.0000 -vt 0.8472 0.0847 0.0000 -vt 0.8445 0.1003 0.0000 -vt 0.8552 0.1486 0.0000 -vt 0.8618 0.1328 0.0000 -vt 0.8776 0.1486 0.0000 -vt 0.8776 0.1262 0.0000 -vt 0.8933 0.1328 0.0000 -vt 0.8999 0.1486 0.0000 -vt 0.8933 0.1644 0.0000 -vt 0.8776 0.1709 0.0000 -vt 0.8618 0.1644 0.0000 -vt 0.8921 0.2853 0.0000 -vt 0.8780 0.2903 0.0000 -vt 0.8731 0.2809 0.0000 -vt 0.8852 0.2721 0.0000 -vt 0.8950 0.3000 0.0000 -vt 0.8800 0.3007 0.0000 -vt 0.8934 0.3149 0.0000 -vt 0.8789 0.3112 0.0000 -vt 0.8876 0.3287 0.0000 -vt 0.8748 0.3209 0.0000 -vt 0.8780 0.3402 0.0000 -vt 0.8680 0.3291 0.0000 -vt 0.8616 0.2542 0.0000 -vt 0.8564 0.2683 0.0000 -vt 0.8460 0.2661 0.0000 -vt 0.8469 0.2512 0.0000 -vt 0.8747 0.2614 0.0000 -vt 0.8657 0.2733 0.0000 -vt 0.8151 0.1246 0.0000 -vt 0.8347 0.1328 0.0000 -vt 0.7954 0.1328 0.0000 -vt 0.8151 0.1802 0.0000 -vt 0.7954 0.1721 0.0000 -vt 0.8347 0.1721 0.0000 -vt 0.7873 0.1524 0.0000 -vt 0.8429 0.1524 0.0000 -vt 0.8717 0.2132 0.0000 -vt 0.8609 0.2131 0.0000 -vt 0.8603 0.1878 0.0000 -vt 0.8719 0.1869 0.0000 -vt 0.8834 0.1879 0.0000 -vt 0.8825 0.2133 0.0000 -vt 0.8956 0.1897 0.0000 -vt 0.8925 0.2133 0.0000 -vt 0.8509 0.2131 0.0000 -vt 0.8481 0.1893 0.0000 -vt 0.8600 0.2384 0.0000 -vt 0.8715 0.2395 0.0000 -vt 0.8831 0.2386 0.0000 -vt 0.8953 0.2370 0.0000 -vt 0.8478 0.2367 0.0000 -vt 0.6535 0.9321 0.0000 -vt 0.6428 0.9320 0.0000 -vt 0.6438 0.8990 0.0000 -vt 0.6559 0.8983 0.0000 -vt 0.6680 0.9016 0.0000 -vt 0.6635 0.9322 0.0000 -vt 0.6314 0.9001 0.0000 -vt 0.6327 0.9319 0.0000 -vt 0.6228 0.9318 0.0000 -vt 0.6185 0.8998 0.0000 -vt 0.6434 0.9650 0.0000 -vt 0.6555 0.9660 0.0000 -vt 0.6676 0.9629 0.0000 -vt 0.6310 0.9636 0.0000 -vt 0.6181 0.9637 0.0000 -# 820 texture coords - -o market -g market -f 1/1/1 2/2/2 3/3/3 -f 3/3/3 4/4/4 1/1/1 -f 5/5/5 2/2/2 1/1/1 -f 1/1/1 6/6/6 5/5/5 -f 7/7/7 5/5/5 6/6/6 -f 6/6/6 8/8/8 7/7/7 -f 9/9/9 1/1/1 4/4/4 -f 4/4/4 10/10/10 9/9/9 -f 6/6/6 1/1/1 9/9/9 -f 9/9/9 11/11/11 6/6/6 -f 8/8/8 6/6/6 11/11/11 -f 11/11/11 12/12/12 8/8/8 -f 13/13/13 9/9/9 10/10/10 -f 10/10/10 14/14/14 13/13/13 -f 11/11/11 9/9/9 13/13/13 -f 13/13/13 15/15/15 11/11/11 -f 12/12/12 11/11/11 15/15/15 -f 15/15/15 16/16/16 12/12/12 -f 17/17/17 13/13/13 14/14/14 -f 14/14/14 18/18/18 17/17/17 -f 15/15/15 13/13/13 17/17/17 -f 17/17/17 19/19/19 15/15/15 -f 16/16/16 15/15/15 19/19/19 -f 19/19/19 20/20/20 16/16/16 -f 21/21/21 22/22/22 23/23/23 -f 23/23/23 24/24/24 21/21/21 -f 21/25/21 25/26/25 26/27/26 -f 26/27/26 22/28/22 21/25/21 -f 27/24/27 28/23/28 26/22/26 -f 26/22/26 25/21/25 27/24/27 -f 24/25/24 23/28/23 28/27/28 -f 28/27/28 27/26/27 24/25/24 -f 29/29/29 30/30/30 21/21/21 -f 21/21/21 24/24/24 29/29/29 -f 30/31/30 31/32/31 25/26/25 -f 25/26/25 21/25/21 30/31/30 -f 31/30/31 32/29/32 27/24/27 -f 27/24/27 25/21/25 31/30/31 -f 27/26/27 32/32/32 29/31/29 -f 29/31/29 24/25/24 27/26/27 -f 33/33/33 34/34/34 35/35/35 -f 35/35/35 36/36/36 33/33/33 -f 37/37/37 38/38/38 39/39/39 -f 39/39/39 40/40/40 37/37/37 -f 37/41/37 41/42/41 42/43/42 -f 42/43/42 38/44/38 37/41/37 -f 43/40/43 44/39/44 42/38/42 -f 42/38/42 41/37/41 43/40/43 -f 40/41/40 39/44/39 44/43/44 -f 44/43/44 43/42/43 40/41/40 -f 35/45/35 34/46/34 37/37/37 -f 37/37/37 40/40/40 35/45/35 -f 37/41/37 34/47/34 33/48/33 -f 33/48/33 41/42/41 37/41/37 -f 33/46/33 36/45/36 43/40/43 -f 43/40/43 41/37/41 33/46/33 -f 36/48/36 35/47/35 40/41/40 -f 40/41/40 43/42/43 36/48/36 -f 45/49/45 46/50/46 47/51/47 -f 47/51/47 48/52/48 45/49/45 -f 46/50/46 49/51/49 50/52/50 -f 50/52/50 51/49/51 46/50/46 -f 45/49/45 48/52/48 52/53/52 -f 52/53/52 53/54/53 45/49/45 -f 54/55/54 55/56/55 56/57/56 -f 56/57/56 57/58/57 54/55/54 -f 58/59/58 55/60/55 54/61/54 -f 54/61/54 59/62/59 58/59/58 -f 51/49/51 50/52/50 60/53/60 -f 60/53/60 61/54/61 51/49/51 -f 62/55/62 63/56/63 64/57/64 -f 64/57/64 65/58/65 62/55/62 -f 66/59/66 63/60/63 62/61/62 -f 62/61/62 67/62/67 66/59/66 -f 53/63/53 52/64/52 68/65/68 -f 68/65/68 69/66/69 53/63/53 -f 61/63/61 69/66/69 68/67/68 -f 68/67/68 70/68/60 61/63/61 -f 56/57/56 55/56/55 49/69/49 -f 49/69/49 71/70/70 56/57/56 -f 71/70/70 49/69/49 46/50/46 -f 46/50/46 45/49/45 71/70/70 -f 66/59/66 48/52/48 47/51/47 -f 47/51/47 63/60/63 66/59/66 -f 64/57/64 63/56/63 47/69/47 -f 47/69/47 72/70/50 64/57/64 -f 47/69/47 46/50/46 51/49/51 -f 51/49/51 72/70/50 47/69/47 -f 58/59/58 50/52/50 49/51/49 -f 49/51/49 55/60/55 58/59/58 -f 56/57/56 71/70/70 73/71/71 -f 73/71/71 57/72/57 56/57/56 -f 71/70/70 45/49/45 53/54/53 -f 53/54/53 73/71/71 71/70/70 -f 67/73/67 52/53/52 48/52/48 -f 48/52/48 66/59/66 67/73/67 -f 64/57/64 72/70/50 70/71/60 -f 70/71/60 65/72/65 64/57/64 -f 72/70/50 51/49/51 61/54/61 -f 61/54/61 70/71/60 72/70/50 -f 59/73/59 60/53/60 50/52/50 -f 50/52/50 58/59/58 59/73/59 -f 57/74/57 73/68/71 74/67/72 -f 74/67/72 54/75/54 57/74/57 -f 73/68/71 53/63/53 69/66/69 -f 69/66/69 74/67/72 73/68/71 -f 67/76/67 62/77/62 68/65/68 -f 68/65/68 52/64/52 67/76/67 -f 59/76/59 54/77/54 74/65/72 -f 74/65/72 60/64/60 59/76/59 -f 60/64/60 74/65/72 69/66/69 -f 69/66/69 61/63/61 60/64/60 -f 65/74/65 70/68/60 68/67/68 -f 68/67/68 62/75/62 65/74/65 -f 75/78/73 76/79/74 77/80/75 -f 77/80/75 78/81/76 75/78/73 -f 79/82/77 80/83/78 81/84/79 -f 81/84/79 82/85/80 79/82/77 -f 83/86/81 79/87/77 82/88/80 -f 82/88/80 84/89/82 83/86/81 -f 85/84/83 86/83/84 83/82/81 -f 83/82/81 84/85/82 85/84/83 -f 80/87/78 86/86/84 85/89/83 -f 85/89/83 81/88/79 80/87/78 -f 78/90/76 77/91/75 80/83/78 -f 80/83/78 79/82/77 78/90/76 -f 78/92/76 79/87/77 83/86/81 -f 83/86/81 75/93/73 78/92/76 -f 75/90/73 83/82/81 86/83/84 -f 86/83/84 76/91/74 75/90/73 -f 76/93/74 86/86/84 80/87/78 -f 80/87/78 77/92/75 76/93/74 -f 87/94/85 88/95/86 89/96/87 -f 89/96/87 90/97/88 87/94/85 -f 91/98/89 92/99/90 93/100/91 -f 93/100/91 94/101/92 91/98/89 -f 89/102/87 95/103/93 96/104/93 -f 96/104/93 90/105/88 89/102/87 -f 92/106/90 88/95/86 87/94/85 -f 87/94/85 93/107/91 92/106/90 -f 91/108/89 94/109/92 97/110/94 -f 97/110/94 98/111/94 91/108/89 -f 99/112/95 100/113/96 101/114/97 -f 101/114/97 102/115/98 99/112/95 -f 103/116/99 104/117/100 105/118/101 -f 105/118/101 106/119/102 103/116/99 -f 107/120/103 108/121/104 109/122/105 -f 109/122/105 110/123/106 107/120/103 -f 111/117/107 112/116/108 113/124/109 -f 113/124/109 114/125/110 111/117/107 -f 115/126/111 116/127/112 117/128/113 -f 117/128/113 118/129/114 115/126/111 -f 119/130/115 120/131/116 121/132/117 -f 122/133/118 123/134/119 108/135/104 -f 108/135/104 107/136/103 122/133/118 -f 124/137/120 125/138/121 126/139/122 -f 127/140/123 128/141/124 125/138/121 -f 125/138/121 124/137/120 127/140/123 -f 129/142/125 130/143/126 101/114/97 -f 101/114/97 100/113/96 129/142/125 -f 131/144/127 107/120/103 110/123/106 -f 110/123/106 132/145/128 131/144/127 -f 133/146/129 115/126/111 118/129/114 -f 118/129/114 134/147/130 133/146/129 -f 135/148/131 122/133/118 107/136/103 -f 107/136/103 131/149/127 135/148/131 -f 120/131/116 128/141/124 127/140/123 -f 127/140/123 121/132/117 120/131/116 -f 99/150/95 102/151/98 136/152/132 -f 136/152/132 123/153/119 99/150/95 -f 100/154/96 99/150/95 123/153/119 -f 123/153/119 122/155/118 100/154/96 -f 129/156/125 100/154/96 122/155/118 -f 122/155/118 135/157/131 129/156/125 -f 137/158/133 130/159/126 129/156/125 -f 129/156/125 135/157/131 137/158/133 -f 101/160/97 130/161/126 137/162/133 -f 137/162/133 138/163/134 101/160/97 -f 102/164/98 101/160/97 138/163/134 -f 138/163/134 136/165/132 102/164/98 -f 135/148/131 131/149/127 139/166/135 -f 139/166/135 137/167/133 135/148/131 -f 132/145/128 140/168/136 139/169/135 -f 139/169/135 131/144/127 132/145/128 -f 109/122/105 108/121/104 141/170/137 -f 141/170/137 142/171/138 109/122/105 -f 123/134/119 136/172/132 141/173/137 -f 141/173/137 108/135/104 123/134/119 -f 143/124/139 144/125/140 104/117/100 -f 104/117/100 103/116/99 143/124/139 -f 120/174/116 119/175/115 141/176/137 -f 141/176/137 136/165/132 120/174/116 -f 128/177/124 120/174/116 136/165/132 -f 136/165/132 138/163/134 128/177/124 -f 125/178/121 128/177/124 138/163/134 -f 138/163/134 137/162/133 125/178/121 -f 126/179/122 125/178/121 137/162/133 -f 137/162/133 139/180/135 126/179/122 -f 145/118/141 146/119/142 112/116/108 -f 112/116/108 111/117/107 145/118/141 -f 127/181/123 124/182/120 116/127/112 -f 116/127/112 115/126/111 127/181/123 -f 121/183/117 127/181/123 115/126/111 -f 115/126/111 133/146/129 121/183/117 -f 103/184/99 106/185/102 142/186/138 -f 142/186/138 141/176/137 103/184/99 -f 143/187/139 103/184/99 141/176/137 -f 141/176/137 119/175/115 143/187/139 -f 144/188/140 143/189/139 119/130/115 -f 119/130/115 121/132/117 144/188/140 -f 104/190/100 144/191/140 121/183/117 -f 121/183/117 133/146/129 104/190/100 -f 105/192/101 104/190/100 133/146/129 -f 133/146/129 134/147/130 105/192/101 -f 111/193/107 114/194/110 117/128/113 -f 117/128/113 116/127/112 111/193/107 -f 145/195/141 111/193/107 116/127/112 -f 116/127/112 124/182/120 145/195/141 -f 146/196/142 145/197/141 124/137/120 -f 124/137/120 126/139/122 146/196/142 -f 112/198/108 146/199/142 126/179/122 -f 126/179/122 139/180/135 112/198/108 -f 113/200/109 112/198/108 139/180/135 -f 139/180/135 140/201/136 113/200/109 -f 147/202/143 148/203/144 149/204/144 -f 149/204/144 150/205/145 147/202/143 -f 151/206/146 152/207/147 153/208/148 -f 153/208/148 154/209/149 151/206/146 -f 155/210/150 156/202/151 157/205/152 -f 157/205/152 158/204/153 155/210/150 -f 159/211/154 160/209/155 157/212/152 -f 157/212/152 156/213/151 159/211/154 -f 150/214/145 161/208/156 162/215/157 -f 162/215/157 147/216/143 150/214/145 -f 151/217/146 154/218/149 160/205/155 -f 160/205/155 159/202/154 151/217/146 -f 153/218/148 152/217/147 162/202/157 -f 162/202/157 161/205/156 153/218/148 -f 163/219/158 164/220/159 165/221/160 -f 165/221/160 166/222/161 163/219/158 -f 167/223/162 163/224/158 166/225/161 -f 166/225/161 168/226/163 167/223/162 -f 169/221/164 170/220/165 167/219/162 -f 167/219/162 168/222/163 169/221/164 -f 165/225/160 164/224/159 170/223/165 -f 170/223/165 169/226/164 165/225/160 -f 171/227/166 164/220/159 163/219/158 -f 163/219/158 172/228/167 171/227/166 -f 173/229/168 172/230/167 163/224/158 -f 163/224/158 167/223/162 173/229/168 -f 174/227/169 173/228/168 167/219/162 -f 167/219/162 170/220/165 174/227/169 -f 174/229/169 170/223/165 164/224/159 -f 164/224/159 171/230/166 174/229/169 -f 175/231/170 176/232/171 177/233/172 -f 177/233/172 178/234/173 175/231/170 -f 179/235/174 176/236/171 175/237/170 -f 175/237/170 180/238/175 179/235/174 -f 181/233/176 179/232/174 180/231/175 -f 180/231/175 182/234/177 181/233/176 -f 178/237/173 177/236/172 181/235/176 -f 181/235/176 182/238/177 178/237/173 -f 183/239/178 184/240/179 177/233/172 -f 177/233/172 176/232/171 183/239/178 -f 183/241/178 176/236/171 179/235/174 -f 179/235/174 185/242/180 183/241/178 -f 185/239/180 179/232/174 181/233/176 -f 181/233/176 186/240/181 185/239/180 -f 184/241/179 186/242/181 181/235/176 -f 181/235/176 177/236/172 184/241/179 -f 187/219/182 188/222/183 189/221/184 -f 189/221/184 190/220/185 187/219/182 -f 191/223/186 192/226/187 188/225/183 -f 188/225/183 187/224/182 191/223/186 -f 191/219/186 193/220/188 194/221/189 -f 194/221/189 192/222/187 191/219/186 -f 193/223/188 190/224/185 189/225/184 -f 189/225/184 194/226/189 193/223/188 -f 195/227/190 196/228/191 187/219/182 -f 187/219/182 190/220/185 195/227/190 -f 187/224/182 196/230/191 197/229/192 -f 197/229/192 191/223/186 187/224/182 -f 191/219/186 197/228/192 198/227/193 -f 198/227/193 193/220/188 191/219/186 -f 198/229/193 195/230/190 190/224/185 -f 190/224/185 193/223/188 198/229/193 -f 199/233/194 200/232/195 201/231/196 -f 201/231/196 202/234/197 199/233/194 -f 203/235/198 204/238/199 201/237/196 -f 201/237/196 200/236/195 203/235/198 -f 205/233/200 206/234/201 204/231/199 -f 204/231/199 203/232/198 205/233/200 -f 205/235/200 199/236/194 202/237/197 -f 202/237/197 206/238/201 205/235/200 -f 199/233/194 207/240/202 208/239/203 -f 208/239/203 200/232/195 199/233/194 -f 208/241/203 209/242/204 203/235/198 -f 203/235/198 200/236/195 208/241/203 -f 209/239/204 210/240/205 205/233/200 -f 205/233/200 203/232/198 209/239/204 -f 205/235/200 210/242/205 207/241/202 -f 207/241/202 199/236/194 205/235/200 -f 211/243/206 212/244/207 213/245/208 -f 213/245/208 214/246/209 211/243/206 -f 215/244/210 216/243/211 217/246/212 -f 217/246/212 218/245/213 215/244/210 -f 218/247/213 217/248/212 214/249/209 -f 214/249/209 213/250/208 218/247/213 -f 212/251/207 215/252/210 218/253/213 -f 218/253/213 213/254/208 212/251/207 -f 219/248/214 220/247/215 221/250/216 -f 221/250/216 222/249/217 219/248/214 -f 221/245/216 212/244/207 211/243/206 -f 211/243/206 222/246/217 221/245/216 -f 219/246/214 216/243/211 215/244/210 -f 215/244/210 220/245/215 219/246/214 -f 220/253/215 215/252/210 212/251/207 -f 212/251/207 221/254/216 220/253/215 -f 223/255/218 224/256/219 225/257/220 -f 225/257/220 226/258/221 223/255/218 -f 227/259/222 228/260/223 223/255/218 -f 223/255/218 226/258/221 227/259/222 -f 223/261/218 229/262/224 230/263/225 -f 230/263/225 224/264/219 223/261/218 -f 228/265/223 231/266/226 229/262/224 -f 229/262/224 223/261/218 228/265/223 -f 229/267/224 232/268/227 233/269/228 -f 233/269/228 230/270/225 229/267/224 -f 234/271/229 232/268/227 229/267/224 -f 229/267/224 231/272/226 234/271/229 -f 226/261/221 225/264/220 233/263/228 -f 233/263/228 232/262/227 226/261/221 -f 227/265/222 226/261/221 232/262/227 -f 232/262/227 234/266/229 227/265/222 -f 235/273/230 236/274/231 237/275/232 -f 237/275/232 238/276/233 235/273/230 -f 239/277/234 236/278/231 235/279/230 -f 235/279/230 240/280/235 239/277/234 -f 241/275/236 239/274/234 240/273/235 -f 240/273/235 242/276/237 241/275/236 -f 238/279/233 237/278/232 241/277/236 -f 241/277/236 242/280/237 238/279/233 -f 243/281/238 244/282/239 237/275/232 -f 237/275/232 236/274/231 243/281/238 -f 243/283/238 236/278/231 239/277/234 -f 239/277/234 245/284/240 243/283/238 -f 245/281/240 239/274/234 241/275/236 -f 241/275/236 246/282/241 245/281/240 -f 244/283/239 246/284/241 241/277/236 -f 241/277/236 237/278/232 244/283/239 -f 247/275/242 248/274/243 249/273/244 -f 249/273/244 250/276/245 247/275/242 -f 251/277/246 252/280/247 249/279/244 -f 249/279/244 248/278/243 251/277/246 -f 253/275/248 254/276/249 252/273/247 -f 252/273/247 251/274/246 253/275/248 -f 253/277/248 247/278/242 250/279/245 -f 250/279/245 254/280/249 253/277/248 -f 247/275/242 255/282/250 256/281/251 -f 256/281/251 248/274/243 247/275/242 -f 256/283/251 257/284/252 251/277/246 -f 251/277/246 248/278/243 256/283/251 -f 257/281/252 258/282/253 253/275/248 -f 253/275/248 251/274/246 257/281/252 -f 253/277/248 258/284/253 255/283/250 -f 255/283/250 247/278/242 253/277/248 -f 259/255/254 260/258/255 261/257/256 -f 261/257/256 262/256/257 259/255/254 -f 259/255/254 263/260/258 264/259/259 -f 264/259/259 260/258/255 259/255/254 -f 265/263/260 266/262/261 259/261/254 -f 259/261/254 262/264/257 265/263/260 -f 266/262/261 267/266/262 263/265/258 -f 263/265/258 259/261/254 266/262/261 -f 268/269/263 269/268/264 266/267/261 -f 266/267/261 265/270/260 268/269/263 -f 270/271/265 267/272/262 266/267/261 -f 266/267/261 269/268/264 270/271/265 -f 260/261/255 269/262/264 268/263/263 -f 268/263/263 261/264/256 260/261/255 -f 264/265/259 270/266/265 269/262/264 -f 269/262/264 260/261/255 264/265/259 -f 271/255/266 272/258/267 273/257/268 -f 273/257/268 274/256/269 271/255/266 -f 271/255/266 275/260/270 276/259/271 -f 276/259/271 272/258/267 271/255/266 -f 277/263/272 278/262/273 271/261/266 -f 271/261/266 274/264/269 277/263/272 -f 278/262/273 279/266/274 275/265/270 -f 275/265/270 271/261/266 278/262/273 -f 280/269/275 281/268/276 278/267/273 -f 278/267/273 277/270/272 280/269/275 -f 282/271/277 279/272/274 278/267/273 -f 278/267/273 281/268/276 282/271/277 -f 272/261/267 281/262/276 280/263/275 -f 280/263/275 273/264/268 272/261/267 -f 276/265/271 282/266/277 281/262/276 -f 281/262/276 272/261/267 276/265/271 -f 283/285/278 284/286/279 285/287/280 -f 285/287/280 286/288/281 283/285/278 -f 283/285/278 286/289/281 287/290/282 -f 287/290/282 288/291/283 283/285/278 -f 288/291/283 289/292/284 284/286/279 -f 284/286/279 283/285/278 288/291/283 -f 284/286/279 289/292/284 290/293/285 -f 290/293/285 285/294/280 284/286/279 -f 291/295/282 292/296/286 288/291/283 -f 288/291/283 287/290/282 291/295/282 -f 288/291/283 292/296/286 293/297/287 -f 293/297/287 289/292/284 288/291/283 -f 289/292/284 293/297/287 294/298/285 -f 294/298/285 290/293/285 289/292/284 -f 295/285/288 296/288/289 297/287/290 -f 297/287/290 298/286/291 295/285/288 -f 299/290/282 296/289/289 295/285/288 -f 295/285/288 300/291/292 299/290/282 -f 298/286/291 301/292/293 300/291/292 -f 300/291/292 295/285/288 298/286/291 -f 298/286/291 297/294/290 302/293/285 -f 302/293/285 301/292/293 298/286/291 -f 300/291/292 292/296/286 291/295/282 -f 291/295/282 299/290/282 300/291/292 -f 300/291/292 301/292/293 293/297/287 -f 293/297/287 292/296/286 300/291/292 -f 301/292/293 302/293/285 294/298/285 -f 294/298/285 293/297/287 301/292/293 -f 303/299/294 304/300/295 305/301/296 -f 305/301/296 306/302/297 303/299/294 -f 306/302/297 307/303/298 308/304/299 -f 308/304/299 303/299/294 306/302/297 -f 306/302/297 305/305/296 309/306/282 -f 309/306/282 307/303/298 306/302/297 -f 308/304/299 307/303/298 310/307/286 -f 310/307/286 311/308/300 308/304/299 -f 307/303/298 309/309/282 312/310/282 -f 312/310/282 310/307/286 307/303/298 -f 313/299/301 314/302/302 315/301/289 -f 315/301/289 316/300/93 313/299/301 -f 317/304/303 318/303/292 314/302/302 -f 314/302/302 313/299/301 317/304/303 -f 314/302/302 318/303/292 319/306/282 -f 319/306/282 315/305/289 314/302/302 -f 317/304/303 311/308/300 310/307/286 -f 310/307/286 318/303/292 317/304/303 -f 318/303/292 310/307/286 312/310/282 -f 312/310/282 319/309/282 318/303/292 -f 320/299/304 321/300/295 322/301/305 -f 322/301/305 323/302/306 320/299/304 -f 323/302/306 324/303/307 325/304/308 -f 325/304/308 320/299/304 323/302/306 -f 323/302/306 322/305/305 326/306/309 -f 326/306/309 324/303/307 323/302/306 -f 325/304/308 324/303/307 327/307/310 -f 327/307/310 328/308/311 325/304/308 -f 324/303/307 326/309/309 329/310/309 -f 329/310/309 327/307/310 324/303/307 -f 330/299/312 331/302/313 332/301/314 -f 332/301/314 333/300/93 330/299/312 -f 334/304/315 335/303/316 331/302/313 -f 331/302/313 330/299/312 334/304/315 -f 331/302/313 335/303/316 336/306/309 -f 336/306/309 332/305/314 331/302/313 -f 334/304/315 328/308/311 327/307/310 -f 327/307/310 335/303/316 334/304/315 -f 335/303/316 327/307/310 329/310/309 -f 329/310/309 336/309/309 335/303/316 -f 337/299/317 338/300/295 339/301/318 -f 339/301/318 340/302/319 337/299/317 -f 340/302/319 341/303/320 342/304/321 -f 342/304/321 337/299/317 340/302/319 -f 340/302/319 339/305/318 343/306/322 -f 343/306/322 341/303/320 340/302/319 -f 342/304/321 341/303/320 344/307/323 -f 344/307/323 345/308/324 342/304/321 -f 341/303/320 343/309/322 346/310/322 -f 346/310/322 344/307/323 341/303/320 -f 347/299/325 348/302/326 349/301/327 -f 349/301/327 350/300/93 347/299/325 -f 351/304/328 352/303/329 348/302/326 -f 348/302/326 347/299/325 351/304/328 -f 348/302/326 352/303/329 353/306/322 -f 353/306/322 349/305/327 348/302/326 -f 351/304/328 345/308/324 344/307/323 -f 344/307/323 352/303/329 351/304/328 -f 352/303/329 344/307/323 346/310/322 -f 346/310/322 353/309/322 352/303/329 -f 354/299/317 355/300/295 356/301/318 -f 356/301/318 357/302/319 354/299/317 -f 357/302/319 358/303/320 359/304/321 -f 359/304/321 354/299/317 357/302/319 -f 357/302/319 356/305/318 360/306/322 -f 360/306/322 358/303/320 357/302/319 -f 359/304/321 358/303/320 361/307/323 -f 361/307/323 362/308/324 359/304/321 -f 358/303/320 360/309/322 363/310/322 -f 363/310/322 361/307/323 358/303/320 -f 364/299/325 365/302/326 366/301/330 -f 366/301/330 367/300/93 364/299/325 -f 368/304/328 369/303/329 365/302/326 -f 365/302/326 364/299/325 368/304/328 -f 365/302/326 369/303/329 370/306/322 -f 370/306/322 366/305/330 365/302/326 -f 368/304/328 362/308/324 361/307/323 -f 361/307/323 369/303/329 368/304/328 -f 369/303/329 361/307/323 363/310/322 -f 363/310/322 370/309/322 369/303/329 -f 371/299/317 372/300/295 373/301/318 -f 373/301/318 374/302/319 371/299/317 -f 374/302/319 375/303/320 376/304/321 -f 376/304/321 371/299/317 374/302/319 -f 374/302/319 373/305/318 377/306/331 -f 377/306/331 375/303/320 374/302/319 -f 376/304/321 375/303/320 378/307/323 -f 378/307/323 379/308/324 376/304/321 -f 375/303/320 377/309/331 380/310/322 -f 380/310/322 378/307/323 375/303/320 -f 381/299/325 382/302/326 383/301/330 -f 383/301/330 384/300/93 381/299/325 -f 385/304/328 386/303/329 382/302/326 -f 382/302/326 381/299/325 385/304/328 -f 382/302/326 386/303/329 387/306/322 -f 387/306/322 383/305/330 382/302/326 -f 385/304/328 379/308/324 378/307/323 -f 378/307/323 386/303/329 385/304/328 -f 386/303/329 378/307/323 380/310/322 -f 380/310/322 387/309/322 386/303/329 -f 388/299/332 389/300/295 390/301/333 -f 390/301/333 391/302/334 388/299/332 -f 391/302/334 392/303/335 393/304/336 -f 393/304/336 388/299/332 391/302/334 -f 391/302/334 390/305/333 394/306/337 -f 394/306/337 392/303/335 391/302/334 -f 393/304/336 392/303/335 395/307/338 -f 395/307/338 396/308/339 393/304/336 -f 392/303/335 394/309/337 397/310/337 -f 397/310/337 395/307/338 392/303/335 -f 398/299/340 399/302/341 400/301/342 -f 400/301/342 401/300/93 398/299/340 -f 402/304/343 403/303/344 399/302/341 -f 399/302/341 398/299/340 402/304/343 -f 399/302/341 403/303/344 404/306/337 -f 404/306/337 400/305/342 399/302/341 -f 402/304/343 396/308/339 395/307/338 -f 395/307/338 403/303/344 402/304/343 -f 403/303/344 395/307/338 397/310/337 -f 397/310/337 404/309/337 403/303/344 -f 405/285/345 406/288/346 407/287/347 -f 407/287/347 408/286/348 405/285/345 -f 405/285/345 409/291/349 410/290/350 -f 410/290/350 406/289/346 405/285/345 -f 409/291/349 405/285/345 408/286/348 -f 408/286/348 411/292/351 409/291/349 -f 412/293/352 411/292/351 408/286/348 -f 408/286/348 407/294/347 412/293/352 -f 409/291/349 413/296/353 414/295/354 -f 414/295/354 410/290/350 409/291/349 -f 409/291/349 411/292/351 415/297/355 -f 415/297/355 413/296/353 409/291/349 -f 411/292/351 412/293/352 416/298/352 -f 416/298/352 415/297/355 411/292/351 -f 417/285/356 418/286/357 419/287/358 -f 419/287/358 420/288/359 417/285/356 -f 421/290/350 422/291/360 417/285/356 -f 417/285/356 420/289/359 421/290/350 -f 418/286/357 417/285/356 422/291/360 -f 422/291/360 423/292/361 418/286/357 -f 424/293/352 419/294/358 418/286/357 -f 418/286/357 423/292/361 424/293/352 -f 414/295/354 413/296/353 422/291/360 -f 422/291/360 421/290/350 414/295/354 -f 422/291/360 413/296/353 415/297/355 -f 415/297/355 423/292/361 422/291/360 -f 423/292/361 415/297/355 416/298/352 -f 416/298/352 424/293/352 423/292/361 -f 425/299/362 426/302/363 427/301/364 -f 427/301/364 428/300/295 425/299/362 -f 426/302/363 425/299/362 429/304/365 -f 429/304/365 430/303/366 426/302/363 -f 431/306/367 427/305/364 426/302/363 -f 426/302/363 430/303/366 431/306/367 -f 429/304/365 432/308/368 433/307/369 -f 433/307/369 430/303/366 429/304/365 -f 430/303/366 433/307/369 434/310/370 -f 434/310/370 431/309/367 430/303/366 -f 435/299/371 436/300/93 437/301/372 -f 437/301/372 438/302/373 435/299/371 -f 439/304/374 435/299/371 438/302/373 -f 438/302/373 440/303/375 439/304/374 -f 441/306/376 440/303/375 438/302/373 -f 438/302/373 437/305/372 441/306/376 -f 439/304/374 440/303/375 433/307/369 -f 433/307/369 432/308/368 439/304/374 -f 440/303/375 441/309/376 434/310/370 -f 434/310/370 433/307/369 440/303/375 -f 442/299/377 443/302/378 444/301/379 -f 444/301/379 445/300/295 442/299/377 -f 443/302/378 442/299/377 446/304/380 -f 446/304/380 447/303/381 443/302/378 -f 448/306/382 444/305/379 443/302/378 -f 443/302/378 447/303/381 448/306/382 -f 446/304/380 449/308/383 450/307/384 -f 450/307/384 447/303/381 446/304/380 -f 447/303/381 450/307/384 451/310/382 -f 451/310/382 448/309/382 447/303/381 -f 452/299/385 453/300/93 454/301/386 -f 454/301/386 455/302/387 452/299/385 -f 456/304/388 452/299/385 455/302/387 -f 455/302/387 457/303/389 456/304/388 -f 458/306/382 457/303/389 455/302/387 -f 455/302/387 454/305/386 458/306/382 -f 456/304/388 457/303/389 450/307/384 -f 450/307/384 449/308/383 456/304/388 -f 457/303/389 458/309/382 451/310/382 -f 451/310/382 450/307/384 457/303/389 -f 459/299/390 460/302/345 461/301/346 -f 461/301/346 462/300/295 459/299/390 -f 460/302/345 459/299/390 463/304/391 -f 463/304/391 464/303/349 460/302/345 -f 465/306/350 461/305/346 460/302/345 -f 460/302/345 464/303/349 465/306/350 -f 463/304/391 466/308/392 467/307/353 -f 467/307/353 464/303/349 463/304/391 -f 464/303/349 467/307/353 468/310/350 -f 468/310/350 465/309/350 464/303/349 -f 469/299/393 470/300/93 471/301/394 -f 471/301/394 472/302/356 469/299/393 -f 473/304/395 469/299/393 472/302/356 -f 472/302/356 474/303/396 473/304/395 -f 475/306/350 474/303/396 472/302/356 -f 472/302/356 471/305/394 475/306/350 -f 473/304/395 474/303/396 467/307/353 -f 467/307/353 466/308/392 473/304/395 -f 474/303/396 475/309/350 468/310/350 -f 468/310/350 467/307/353 474/303/396 -f 476/299/390 477/302/397 478/301/346 -f 478/301/346 479/300/295 476/299/390 -f 477/302/397 476/299/390 480/304/391 -f 480/304/391 481/303/398 477/302/397 -f 482/306/350 478/305/346 477/302/397 -f 477/302/397 481/303/398 482/306/350 -f 480/304/391 483/308/392 484/307/399 -f 484/307/399 481/303/398 480/304/391 -f 481/303/398 484/307/399 485/310/350 -f 485/310/350 482/309/350 481/303/398 -f 486/299/393 487/300/93 488/301/394 -f 488/301/394 489/302/356 486/299/393 -f 490/304/395 486/299/393 489/302/356 -f 489/302/356 491/303/400 490/304/395 -f 492/306/350 491/303/400 489/302/356 -f 489/302/356 488/305/394 492/306/350 -f 490/304/395 491/303/400 484/307/399 -f 484/307/399 483/308/392 490/304/395 -f 491/303/400 492/309/350 485/310/350 -f 485/310/350 484/307/399 491/303/400 -f 493/299/362 494/302/401 495/301/364 -f 495/301/364 496/300/295 493/299/362 -f 494/302/401 493/299/362 497/304/402 -f 497/304/402 498/303/366 494/302/401 -f 499/306/367 495/305/364 494/302/401 -f 494/302/401 498/303/366 499/306/367 -f 497/304/402 500/308/368 501/307/369 -f 501/307/369 498/303/366 497/304/402 -f 498/303/366 501/307/369 502/310/370 -f 502/310/370 499/309/367 498/303/366 -f 503/299/371 504/300/93 505/301/372 -f 505/301/372 506/302/373 503/299/371 -f 507/304/374 503/299/371 506/302/373 -f 506/302/373 508/303/403 507/304/374 -f 509/306/367 508/303/403 506/302/373 -f 506/302/373 505/305/372 509/306/367 -f 507/304/374 508/303/403 501/307/369 -f 501/307/369 500/308/368 507/304/374 -f 508/303/403 509/309/367 502/310/370 -f 502/310/370 501/307/369 508/303/403 -f 510/299/404 511/302/405 512/301/406 -f 512/301/406 513/300/295 510/299/404 -f 511/302/405 510/299/404 514/304/407 -f 514/304/407 515/303/408 511/302/405 -f 516/306/409 512/305/406 511/302/405 -f 511/302/405 515/303/408 516/306/409 -f 514/304/407 517/308/410 518/307/411 -f 518/307/411 515/303/408 514/304/407 -f 515/303/408 518/307/411 519/310/409 -f 519/310/409 516/309/409 515/303/408 -f 520/299/412 521/300/93 522/301/413 -f 522/301/413 523/302/414 520/299/412 -f 524/304/415 520/299/412 523/302/414 -f 523/302/414 525/303/416 524/304/415 -f 526/306/409 525/303/416 523/302/414 -f 523/302/414 522/305/413 526/306/409 -f 524/304/415 525/303/416 518/307/411 -f 518/307/411 517/308/410 524/304/415 -f 525/303/416 526/309/409 519/310/409 -f 519/310/409 518/307/411 525/303/416 -f 527/285/345 528/288/346 529/287/347 -f 529/287/347 530/286/417 527/285/345 -f 527/285/345 531/291/349 532/290/350 -f 532/290/350 528/289/346 527/285/345 -f 531/291/349 527/285/345 530/286/417 -f 530/286/417 533/292/418 531/291/349 -f 534/293/352 533/292/418 530/286/417 -f 530/286/417 529/294/347 534/293/352 -f 531/291/349 535/296/353 536/295/350 -f 536/295/350 532/290/350 531/291/349 -f 531/291/349 533/292/418 537/297/419 -f 537/297/419 535/296/353 531/291/349 -f 533/292/418 534/293/352 538/298/352 -f 538/298/352 537/297/419 533/292/418 -f 539/285/356 540/286/357 541/287/358 -f 541/287/358 542/288/394 539/285/356 -f 543/290/350 544/291/396 539/285/356 -f 539/285/356 542/289/394 543/290/350 -f 540/286/357 539/285/356 544/291/396 -f 544/291/396 545/292/420 540/286/357 -f 546/293/352 541/294/358 540/286/357 -f 540/286/357 545/292/420 546/293/352 -f 536/295/350 535/296/353 544/291/396 -f 544/291/396 543/290/350 536/295/350 -f 544/291/396 535/296/353 537/297/419 -f 537/297/419 545/292/420 544/291/396 -f 545/292/420 537/297/419 538/298/352 -f 538/298/352 546/293/352 545/292/420 -f 547/285/345 548/288/346 549/287/421 -f 549/287/421 550/286/422 547/285/345 -f 547/285/345 551/291/349 552/290/350 -f 552/290/350 548/289/346 547/285/345 -f 551/291/349 547/285/345 550/286/422 -f 550/286/422 553/292/418 551/291/349 -f 554/293/352 553/292/418 550/286/422 -f 550/286/422 549/294/421 554/293/352 -f 551/291/349 555/296/353 556/295/354 -f 556/295/354 552/290/350 551/291/349 -f 551/291/349 553/292/418 557/297/419 -f 557/297/419 555/296/353 551/291/349 -f 553/292/418 554/293/352 558/298/352 -f 558/298/352 557/297/419 553/292/418 -f 559/285/356 560/286/357 561/287/358 -f 561/287/358 562/288/394 559/285/356 -f 563/290/350 564/291/360 559/285/356 -f 559/285/356 562/289/394 563/290/350 -f 560/286/357 559/285/356 564/291/360 -f 564/291/360 565/292/423 560/286/357 -f 566/293/352 561/294/358 560/286/357 -f 560/286/357 565/292/423 566/293/352 -f 556/295/354 555/296/353 564/291/360 -f 564/291/360 563/290/350 556/295/354 -f 564/291/360 555/296/353 557/297/419 -f 557/297/419 565/292/423 564/291/360 -f 565/292/423 557/297/419 558/298/352 -f 558/298/352 566/293/352 565/292/423 -f 567/311/424 568/312/425 569/313/426 -f 569/313/426 570/314/424 567/311/424 -f 568/312/425 571/315/295 572/316/295 -f 572/316/295 569/313/426 568/312/425 -f 573/317/424 574/318/424 575/319/427 -f 575/319/427 576/320/428 573/317/424 -f 576/320/428 575/319/427 577/321/94 -f 577/321/94 578/322/94 576/320/428 -f 579/323/424 580/324/424 581/325/429 -f 581/325/429 582/326/430 579/323/424 -f 582/326/430 581/325/429 583/327/431 -f 583/327/431 584/328/431 582/326/430 -f 585/311/424 586/314/424 587/313/432 -f 587/313/432 588/312/433 585/311/424 -f 588/312/433 587/313/432 589/316/93 -f 589/316/93 590/315/93 588/312/433 -f 591/3/434 592/2/435 593/1/436 -f 593/1/436 594/4/437 591/3/434 -f 595/5/438 596/6/439 593/1/436 -f 593/1/436 592/2/435 595/5/438 -f 597/7/440 598/8/441 596/6/439 -f 596/6/439 595/5/438 597/7/440 -f 594/4/437 593/1/436 599/9/442 -f 599/9/442 600/10/443 594/4/437 -f 596/6/439 601/11/444 599/9/442 -f 599/9/442 593/1/436 596/6/439 -f 598/8/441 602/12/445 601/11/444 -f 601/11/444 596/6/439 598/8/441 -f 600/10/443 599/9/442 603/13/446 -f 603/13/446 604/14/447 600/10/443 -f 601/11/444 605/15/448 603/13/446 -f 603/13/446 599/9/442 601/11/444 -f 602/12/445 606/16/449 605/15/448 -f 605/15/448 601/11/444 602/12/445 -f 604/14/447 603/13/446 607/17/450 -f 607/17/450 608/18/451 604/14/447 -f 605/15/448 609/19/452 607/17/450 -f 607/17/450 603/13/446 605/15/448 -f 606/16/449 610/20/453 609/19/452 -f 609/19/452 605/15/448 606/16/449 -f 611/21/454 612/24/455 613/23/456 -f 613/23/456 614/22/457 611/21/454 -f 615/27/458 616/26/459 611/25/454 -f 611/25/454 614/28/457 615/27/458 -f 617/24/460 616/21/459 615/22/458 -f 615/22/458 618/23/461 617/24/460 -f 612/25/455 617/26/460 618/27/461 -f 618/27/461 613/28/456 612/25/455 -f 619/29/462 612/24/455 611/21/454 -f 611/21/454 620/30/463 619/29/462 -f 620/31/463 611/25/454 616/26/459 -f 616/26/459 621/32/464 620/31/463 -f 621/30/464 616/21/459 617/24/460 -f 617/24/460 622/29/465 621/30/464 -f 619/31/462 622/32/465 617/26/460 -f 617/26/460 612/25/455 619/31/462 -f 623/33/466 624/36/467 625/35/468 -f 625/35/468 626/34/469 623/33/466 -f 627/37/470 628/40/471 629/39/472 -f 629/39/472 630/38/473 627/37/470 -f 631/43/474 632/42/475 627/41/470 -f 627/41/470 630/44/473 631/43/474 -f 633/40/476 632/37/475 631/38/474 -f 631/38/474 634/39/477 633/40/476 -f 628/41/471 633/42/476 634/43/477 -f 634/43/477 629/44/472 628/41/471 -f 625/45/468 628/40/471 627/37/470 -f 627/37/470 626/46/469 625/45/468 -f 623/48/466 626/47/469 627/41/470 -f 627/41/470 632/42/475 623/48/466 -f 623/46/466 632/37/475 633/40/476 -f 633/40/476 624/45/467 623/46/466 -f 624/48/467 633/42/476 628/41/471 -f 628/41/471 625/47/468 624/48/467 -f 635/51/478 636/50/479 637/49/480 -f 637/49/480 638/52/481 635/51/478 -f 636/50/479 639/49/482 640/52/483 -f 640/52/483 641/51/484 636/50/479 -f 637/49/480 642/54/485 643/53/486 -f 643/53/486 638/52/481 637/49/480 -f 644/57/487 645/56/488 646/55/489 -f 646/55/489 647/58/490 644/57/487 -f 648/59/491 649/62/492 646/61/489 -f 646/61/489 645/60/488 648/59/491 -f 639/49/482 650/54/493 651/53/494 -f 651/53/494 640/52/483 639/49/482 -f 652/57/495 653/56/496 654/55/497 -f 654/55/497 655/58/498 652/57/495 -f 656/59/499 657/62/500 654/61/497 -f 654/61/497 653/60/496 656/59/499 -f 642/63/485 658/66/501 659/65/502 -f 659/65/502 643/64/486 642/63/485 -f 659/67/502 658/66/501 650/63/493 -f 650/63/493 660/68/494 659/67/502 -f 641/69/484 645/56/488 644/57/487 -f 644/57/487 661/70/503 641/69/484 -f 636/50/479 641/69/484 661/70/503 -f 661/70/503 637/49/480 636/50/479 -f 656/59/499 653/60/496 635/51/478 -f 635/51/478 638/52/481 656/59/499 -f 635/69/478 653/56/496 652/57/495 -f 652/57/495 662/70/483 635/69/478 -f 635/69/478 662/70/483 639/49/482 -f 639/49/482 636/50/479 635/69/478 -f 648/59/491 645/60/488 641/51/484 -f 641/51/484 640/52/483 648/59/491 -f 644/57/487 647/72/490 663/71/504 -f 663/71/504 661/70/503 644/57/487 -f 661/70/503 663/71/504 642/54/485 -f 642/54/485 637/49/480 661/70/503 -f 657/73/500 656/59/499 638/52/481 -f 638/52/481 643/53/486 657/73/500 -f 652/57/495 655/72/498 660/71/494 -f 660/71/494 662/70/483 652/57/495 -f 662/70/483 660/71/494 650/54/493 -f 650/54/493 639/49/482 662/70/483 -f 649/73/492 648/59/491 640/52/483 -f 640/52/483 651/53/494 649/73/492 -f 647/74/490 646/75/489 664/67/505 -f 664/67/505 663/68/504 647/74/490 -f 663/68/504 664/67/505 658/66/501 -f 658/66/501 642/63/485 663/68/504 -f 659/65/502 654/77/497 657/76/500 -f 657/76/500 643/64/486 659/65/502 -f 664/65/505 646/77/489 649/76/492 -f 649/76/492 651/64/494 664/65/505 -f 658/66/501 664/65/505 651/64/494 -f 651/64/494 650/63/493 658/66/501 -f 655/74/498 654/75/497 659/67/502 -f 659/67/502 660/68/494 655/74/498 -f 665/78/506 666/81/507 667/80/508 -f 667/80/508 668/79/509 665/78/506 -f 669/82/510 670/85/511 671/84/512 -f 671/84/512 672/83/513 669/82/510 -f 673/86/514 674/89/515 670/88/511 -f 670/88/511 669/87/510 673/86/514 -f 673/82/514 675/83/516 676/84/517 -f 676/84/517 674/85/515 673/82/514 -f 672/87/513 671/88/512 676/89/517 -f 676/89/517 675/86/516 672/87/513 -f 672/83/513 667/91/508 666/90/507 -f 666/90/507 669/82/510 672/83/513 -f 666/92/507 665/93/506 673/86/514 -f 673/86/514 669/87/510 666/92/507 -f 665/90/506 668/91/509 675/83/516 -f 675/83/516 673/82/514 665/90/506 -f 668/93/509 667/92/508 672/87/513 -f 672/87/513 675/86/516 668/93/509 -f 677/96/518 678/95/519 679/94/519 -f 679/94/519 680/97/520 677/96/518 -f 681/98/521 682/101/522 683/100/523 -f 683/100/523 684/99/524 681/98/521 -f 677/329/518 680/330/520 685/331/525 -f 685/331/525 686/332/525 677/329/518 -f 684/106/524 683/107/523 679/94/519 -f 679/94/519 678/95/519 684/106/524 -f 687/110/526 682/109/522 681/108/521 -f 681/108/521 688/111/526 687/110/526 -f 689/114/527 690/113/528 691/112/529 -f 691/112/529 692/115/530 689/114/527 -f 693/116/531 694/119/531 695/118/532 -f 695/118/532 696/117/532 693/116/531 -f 697/120/533 698/123/424 699/122/534 -f 699/122/534 700/121/535 697/120/533 -f 701/117/536 702/125/536 703/124/537 -f 703/124/537 704/116/537 701/117/536 -f 705/126/111 706/129/111 707/128/538 -f 707/128/538 708/127/538 705/126/111 -f 709/131/539 710/130/540 711/132/541 -f 712/133/542 697/136/533 700/135/535 -f 700/135/535 713/134/543 712/133/542 -f 714/138/544 715/137/545 716/139/546 -f 714/138/544 717/141/547 718/140/548 -f 718/140/548 715/137/545 714/138/544 -f 689/114/527 719/143/549 720/142/550 -f 720/142/550 690/113/528 689/114/527 -f 721/144/551 722/145/552 698/123/424 -f 698/123/424 697/120/533 721/144/551 -f 723/146/553 724/147/553 706/129/111 -f 706/129/111 705/126/111 723/146/553 -f 725/148/554 721/149/551 697/136/533 -f 697/136/533 712/133/542 725/148/554 -f 709/131/539 711/132/541 718/140/548 -f 718/140/548 717/141/547 709/131/539 -f 691/150/529 713/153/543 726/152/555 -f 726/152/555 692/151/530 691/150/529 -f 690/154/528 712/155/542 713/153/543 -f 713/153/543 691/150/529 690/154/528 -f 720/156/550 725/157/554 712/155/542 -f 712/155/542 690/154/528 720/156/550 -f 720/156/550 719/159/549 727/158/556 -f 727/158/556 725/157/554 720/156/550 -f 689/160/527 728/163/557 727/162/556 -f 727/162/556 719/161/549 689/160/527 -f 692/164/530 726/165/555 728/163/557 -f 728/163/557 689/160/527 692/164/530 -f 729/166/558 721/149/551 725/148/554 -f 725/148/554 727/167/556 729/166/558 -f 722/145/552 721/144/551 729/169/558 -f 729/169/558 730/168/559 722/145/552 -f 731/170/560 700/121/535 699/122/534 -f 699/122/534 732/171/561 731/170/560 -f 713/134/543 700/135/535 731/173/560 -f 731/173/560 726/172/555 713/134/543 -f 733/124/562 693/116/531 696/117/532 -f 696/117/532 734/125/563 733/124/562 -f 709/174/539 726/165/555 731/176/560 -f 731/176/560 710/175/540 709/174/539 -f 717/177/547 728/163/557 726/165/555 -f 726/165/555 709/174/539 717/177/547 -f 714/178/544 727/162/556 728/163/557 -f 728/163/557 717/177/547 714/178/544 -f 716/179/546 729/180/558 727/162/556 -f 727/162/556 714/178/544 716/179/546 -f 735/118/564 701/117/536 704/116/537 -f 704/116/537 736/119/565 735/118/564 -f 718/181/548 705/126/111 708/127/538 -f 708/127/538 715/182/545 718/181/548 -f 711/183/541 723/146/553 705/126/111 -f 705/126/111 718/181/548 711/183/541 -f 693/184/531 731/176/560 732/186/561 -f 732/186/561 694/185/531 693/184/531 -f 733/187/562 710/175/540 731/176/560 -f 731/176/560 693/184/531 733/187/562 -f 734/188/563 711/132/541 710/130/540 -f 710/130/540 733/189/562 734/188/563 -f 696/190/532 723/146/553 711/183/541 -f 711/183/541 734/191/563 696/190/532 -f 695/192/532 724/147/553 723/146/553 -f 723/146/553 696/190/532 695/192/532 -f 701/193/536 708/127/538 707/128/538 -f 707/128/538 702/194/536 701/193/536 -f 735/195/564 715/182/545 708/127/538 -f 708/127/538 701/193/536 735/195/564 -f 736/196/565 716/139/546 715/137/545 -f 715/137/545 735/197/564 736/196/565 -f 704/198/537 729/180/558 716/179/546 -f 716/179/546 736/199/565 704/198/537 -f 703/200/537 730/201/559 729/180/558 -f 729/180/558 704/198/537 703/200/537 -f 737/202/566 738/205/567 739/204/568 -f 739/204/568 740/203/568 737/202/566 -f 741/206/569 742/209/570 743/208/571 -f 743/208/571 744/207/572 741/206/569 -f 745/210/573 746/204/574 747/205/575 -f 747/205/575 748/202/576 745/210/573 -f 749/211/577 748/213/576 747/212/575 -f 747/212/575 750/209/578 749/211/577 -f 751/215/579 752/208/580 738/214/567 -f 738/214/567 737/216/566 751/215/579 -f 741/217/569 749/202/577 750/205/578 -f 750/205/578 742/218/570 741/217/569 -f 743/218/571 752/205/580 751/202/579 -f 751/202/579 744/217/572 743/218/571 -f 753/219/581 754/222/582 755/221/583 -f 755/221/583 756/220/584 753/219/581 -f 757/223/585 758/226/586 754/225/582 -f 754/225/582 753/224/581 757/223/585 -f 757/219/585 759/220/587 760/221/588 -f 760/221/588 758/222/586 757/219/585 -f 759/223/587 756/224/584 755/225/583 -f 755/225/583 760/226/588 759/223/587 -f 761/227/589 762/228/590 753/219/581 -f 753/219/581 756/220/584 761/227/589 -f 753/224/581 762/230/590 763/229/591 -f 763/229/591 757/223/585 753/224/581 -f 757/219/585 763/228/591 764/227/592 -f 764/227/592 759/220/587 757/219/585 -f 764/229/592 761/230/589 756/224/584 -f 756/224/584 759/223/587 764/229/592 -f 765/233/593 766/232/594 767/231/595 -f 767/231/595 768/234/596 765/233/593 -f 769/235/597 770/238/598 767/237/595 -f 767/237/595 766/236/594 769/235/597 -f 771/233/599 772/234/600 770/231/598 -f 770/231/598 769/232/597 771/233/599 -f 771/235/599 765/236/593 768/237/596 -f 768/237/596 772/238/600 771/235/599 -f 765/233/593 773/240/601 774/239/602 -f 774/239/602 766/232/594 765/233/593 -f 774/241/602 775/242/603 769/235/597 -f 769/235/597 766/236/594 774/241/602 -f 775/239/603 776/240/604 771/233/599 -f 771/233/599 769/232/597 775/239/603 -f 771/235/599 776/242/604 773/241/601 -f 773/241/601 765/236/593 771/235/599 -f 777/219/605 778/220/606 779/221/607 -f 779/221/607 780/222/608 777/219/605 -f 781/223/609 777/224/605 780/225/608 -f 780/225/608 782/226/610 781/223/609 -f 783/221/611 784/220/612 781/219/609 -f 781/219/609 782/222/610 783/221/611 -f 779/225/607 778/224/606 784/223/612 -f 784/223/612 783/226/611 779/225/607 -f 785/227/613 778/220/606 777/219/605 -f 777/219/605 786/228/614 785/227/613 -f 787/229/615 786/230/614 777/224/605 -f 777/224/605 781/223/609 787/229/615 -f 788/227/616 787/228/615 781/219/609 -f 781/219/609 784/220/612 788/227/616 -f 788/229/616 784/223/612 778/224/606 -f 778/224/606 785/230/613 788/229/616 -f 789/231/617 790/232/618 791/233/619 -f 791/233/619 792/234/620 789/231/617 -f 793/235/621 790/236/618 789/237/617 -f 789/237/617 794/238/622 793/235/621 -f 795/233/623 793/232/621 794/231/622 -f 794/231/622 796/234/624 795/233/623 -f 792/237/620 791/236/619 795/235/623 -f 795/235/623 796/238/624 792/237/620 -f 797/239/625 798/240/626 791/233/619 -f 791/233/619 790/232/618 797/239/625 -f 797/241/625 790/236/618 793/235/621 -f 793/235/621 799/242/627 797/241/625 -f 799/239/627 793/232/621 795/233/623 -f 795/233/623 800/240/628 799/239/627 -f 798/241/626 800/242/628 795/235/623 -f 795/235/623 791/236/619 798/241/626 -f 801/245/629 802/244/630 803/243/631 -f 803/243/631 804/246/632 801/245/629 -f 805/244/633 806/245/634 807/246/635 -f 807/246/635 808/243/424 805/244/633 -f 806/247/634 801/250/629 804/249/632 -f 804/249/632 807/248/635 806/247/634 -f 806/253/634 805/252/633 802/251/630 -f 802/251/630 801/254/629 806/253/634 -f 809/248/636 810/249/637 811/250/638 -f 811/250/638 812/247/639 809/248/636 -f 811/245/638 810/246/637 803/243/631 -f 803/243/631 802/244/630 811/245/638 -f 809/246/636 812/245/639 805/244/633 -f 805/244/633 808/243/424 809/246/636 -f 812/253/639 811/254/638 802/251/630 -f 802/251/630 805/252/633 812/253/639 -f 813/255/640 814/258/641 815/257/642 -f 815/257/642 816/256/643 813/255/640 -f 813/255/640 817/260/644 818/259/645 -f 818/259/645 814/258/641 813/255/640 -f 819/263/646 820/262/647 813/261/640 -f 813/261/640 816/264/643 819/263/646 -f 820/262/647 821/266/648 817/265/644 -f 817/265/644 813/261/640 820/262/647 -f 822/269/649 823/268/650 820/267/647 -f 820/267/647 819/270/646 822/269/649 -f 824/271/651 821/272/648 820/267/647 -f 820/267/647 823/268/650 824/271/651 -f 814/261/641 823/262/650 822/263/649 -f 822/263/649 815/264/642 814/261/641 -f 818/265/645 824/266/651 823/262/650 -f 823/262/650 814/261/641 818/265/645 -f 825/255/652 826/256/653 827/257/654 -f 827/257/654 828/258/655 825/255/652 -f 829/259/656 830/260/657 825/255/652 -f 825/255/652 828/258/655 829/259/656 -f 825/261/652 831/262/658 832/263/659 -f 832/263/659 826/264/653 825/261/652 -f 830/265/657 833/266/660 831/262/658 -f 831/262/658 825/261/652 830/265/657 -f 831/267/658 834/268/661 835/269/662 -f 835/269/662 832/270/659 831/267/658 -f 836/271/663 834/268/661 831/267/658 -f 831/267/658 833/272/660 836/271/663 -f 828/261/655 827/264/654 835/263/662 -f 835/263/662 834/262/661 828/261/655 -f 829/265/656 828/261/655 834/262/661 -f 834/262/661 836/266/663 829/265/656 -f 837/255/664 838/256/665 839/257/666 -f 839/257/666 840/258/667 837/255/664 -f 841/259/668 842/260/669 837/255/664 -f 837/255/664 840/258/667 841/259/668 -f 837/261/664 843/262/670 844/263/671 -f 844/263/671 838/264/665 837/261/664 -f 842/265/669 845/266/672 843/262/670 -f 843/262/670 837/261/664 842/265/669 -f 843/267/670 846/268/673 847/269/674 -f 847/269/674 844/270/671 843/267/670 -f 848/271/675 846/268/673 843/267/670 -f 843/267/670 845/272/672 848/271/675 -f 840/261/667 839/264/666 847/263/674 -f 847/263/674 846/262/673 840/261/667 -f 841/265/668 840/261/667 846/262/673 -f 846/262/673 848/266/675 841/265/668 -f 849/285/676 850/288/677 851/287/678 -f 851/287/678 852/286/679 849/285/676 -f 849/285/676 853/291/680 854/290/681 -f 854/290/681 850/289/677 849/285/676 -f 853/291/680 849/285/676 852/286/679 -f 852/286/679 855/292/682 853/291/680 -f 856/293/683 855/292/682 852/286/679 -f 852/286/679 851/294/678 856/293/683 -f 853/291/680 857/296/684 858/295/681 -f 858/295/681 854/290/681 853/291/680 -f 853/291/680 855/292/682 859/297/685 -f 859/297/685 857/296/684 853/291/680 -f 855/292/682 856/293/683 860/298/683 -f 860/298/683 859/297/685 855/292/682 -f 861/285/686 862/286/687 863/287/688 -f 863/287/688 864/288/689 861/285/686 -f 865/290/681 866/291/690 861/285/686 -f 861/285/686 864/289/689 865/290/681 -f 862/286/687 861/285/686 866/291/690 -f 866/291/690 867/292/691 862/286/687 -f 868/293/683 863/294/688 862/286/687 -f 862/286/687 867/292/691 868/293/683 -f 858/295/681 857/296/684 866/291/690 -f 866/291/690 865/290/681 858/295/681 -f 866/291/690 857/296/684 859/297/685 -f 859/297/685 867/292/691 866/291/690 -f 867/292/691 859/297/685 860/298/683 -f 860/298/683 868/293/683 867/292/691 -f 869/299/692 870/302/676 871/301/693 -f 871/301/693 872/300/694 869/299/692 -f 870/302/676 869/299/692 873/304/695 -f 873/304/695 874/303/696 870/302/676 -f 875/306/697 871/305/693 870/302/676 -f 870/302/676 874/303/696 875/306/697 -f 873/304/695 876/308/698 877/307/684 -f 877/307/684 874/303/696 873/304/695 -f 874/303/696 877/307/684 878/310/697 -f 878/310/697 875/309/697 874/303/696 -f 879/299/699 880/300/700 881/301/689 -f 881/301/689 882/302/701 879/299/699 -f 883/304/702 879/299/699 882/302/701 -f 882/302/701 884/303/690 883/304/702 -f 885/306/697 884/303/690 882/302/701 -f 882/302/701 881/305/689 885/306/697 -f 883/304/702 884/303/690 877/307/684 -f 877/307/684 876/308/698 883/304/702 -f 884/303/690 885/309/697 878/310/697 -f 878/310/697 877/307/684 884/303/690 -f 886/299/703 887/302/704 888/301/705 -f 888/301/705 889/300/694 886/299/703 -f 887/302/704 886/299/703 890/304/706 -f 890/304/706 891/303/707 887/302/704 -f 892/306/708 888/305/705 887/302/704 -f 887/302/704 891/303/707 892/306/708 -f 890/304/706 893/308/709 894/307/710 -f 894/307/710 891/303/707 890/304/706 -f 891/303/707 894/307/710 895/310/708 -f 895/310/708 892/309/708 891/303/707 -f 896/299/711 897/300/525 898/301/712 -f 898/301/712 899/302/713 896/299/711 -f 900/304/714 896/299/711 899/302/713 -f 899/302/713 901/303/715 900/304/714 -f 902/306/708 901/303/715 899/302/713 -f 899/302/713 898/305/712 902/306/708 -f 900/304/714 901/303/715 894/307/710 -f 894/307/710 893/308/709 900/304/714 -f 901/303/715 902/309/708 895/310/708 -f 895/310/708 894/307/710 901/303/715 -f 903/299/716 904/302/717 905/301/718 -f 905/301/718 906/300/694 903/299/716 -f 904/302/717 903/299/716 907/304/719 -f 907/304/719 908/303/720 904/302/717 -f 909/306/721 905/305/718 904/302/717 -f 904/302/717 908/303/720 909/306/721 -f 907/304/719 910/308/722 911/307/723 -f 911/307/723 908/303/720 907/304/719 -f 908/303/720 911/307/723 912/310/721 -f 912/310/721 909/309/721 908/303/720 -f 913/299/724 914/300/525 915/301/725 -f 915/301/725 916/302/726 913/299/724 -f 917/304/727 913/299/724 916/302/726 -f 916/302/726 918/303/728 917/304/727 -f 919/306/721 918/303/728 916/302/726 -f 916/302/726 915/305/725 919/306/721 -f 917/304/727 918/303/728 911/307/723 -f 911/307/723 910/308/722 917/304/727 -f 918/303/728 919/309/721 912/310/721 -f 912/310/721 911/307/723 918/303/728 -f 920/299/716 921/302/729 922/301/730 -f 922/301/730 923/300/694 920/299/716 -f 921/302/729 920/299/716 924/304/731 -f 924/304/731 925/303/720 921/302/729 -f 926/306/721 922/305/730 921/302/729 -f 921/302/729 925/303/720 926/306/721 -f 924/304/731 927/308/732 928/307/723 -f 928/307/723 925/303/720 924/304/731 -f 925/303/720 928/307/723 929/310/721 -f 929/310/721 926/309/721 925/303/720 -f 930/299/724 931/300/525 932/301/725 -f 932/301/725 933/302/726 930/299/724 -f 934/304/733 930/299/724 933/302/726 -f 933/302/726 935/303/728 934/304/733 -f 936/306/721 935/303/728 933/302/726 -f 933/302/726 932/305/725 936/306/721 -f 934/304/733 935/303/728 928/307/723 -f 928/307/723 927/308/732 934/304/733 -f 935/303/728 936/309/721 929/310/721 -f 929/310/721 928/307/723 935/303/728 -f 937/299/716 938/302/717 939/301/730 -f 939/301/730 940/300/694 937/299/716 -f 938/302/717 937/299/716 941/304/731 -f 941/304/731 942/303/720 938/302/717 -f 943/306/721 939/305/730 938/302/717 -f 938/302/717 942/303/720 943/306/721 -f 941/304/731 944/308/722 945/307/734 -f 945/307/734 942/303/720 941/304/731 -f 942/303/720 945/307/734 946/310/721 -f 946/310/721 943/309/721 942/303/720 -f 947/299/724 948/300/700 949/301/725 -f 949/301/725 950/302/726 947/299/724 -f 951/304/733 947/299/724 950/302/726 -f 950/302/726 952/303/728 951/304/733 -f 953/306/721 952/303/728 950/302/726 -f 950/302/726 949/305/725 953/306/721 -f 951/304/733 952/303/728 945/307/734 -f 945/307/734 944/308/722 951/304/733 -f 952/303/728 953/309/721 946/310/721 -f 946/310/721 945/307/734 952/303/728 -f 954/299/735 955/302/736 956/301/737 -f 956/301/737 957/300/694 954/299/735 -f 955/302/736 954/299/735 958/304/738 -f 958/304/738 959/303/739 955/302/736 -f 960/306/740 956/305/737 955/302/736 -f 955/302/736 959/303/739 960/306/740 -f 958/304/738 961/308/741 962/307/742 -f 962/307/742 959/303/739 958/304/738 -f 959/303/739 962/307/742 963/310/740 -f 963/310/740 960/309/740 959/303/739 -f 964/299/743 965/300/525 966/301/744 -f 966/301/744 967/302/745 964/299/743 -f 968/304/746 964/299/743 967/302/745 -f 967/302/745 969/303/747 968/304/746 -f 970/306/740 969/303/747 967/302/745 -f 967/302/745 966/305/744 970/306/740 -f 968/304/746 969/303/747 962/307/742 -f 962/307/742 961/308/741 968/304/746 -f 969/303/747 970/309/740 963/310/740 -f 963/310/740 962/307/742 969/303/747 -f 971/285/748 972/286/749 973/287/750 -f 973/287/750 974/288/751 971/285/748 -f 971/285/748 974/289/751 975/290/752 -f 975/290/752 976/291/753 971/285/748 -f 976/291/753 977/292/754 972/286/749 -f 972/286/749 971/285/748 976/291/753 -f 972/286/749 977/292/754 978/293/755 -f 978/293/755 973/294/750 972/286/749 -f 979/295/756 980/296/757 976/291/753 -f 976/291/753 975/290/752 979/295/756 -f 976/291/753 980/296/757 981/297/758 -f 981/297/758 977/292/754 976/291/753 -f 977/292/754 981/297/758 982/298/755 -f 982/298/755 978/293/755 977/292/754 -f 983/285/759 984/288/760 985/287/761 -f 985/287/761 986/286/762 983/285/759 -f 987/290/752 984/289/760 983/285/759 -f 983/285/759 988/291/763 987/290/752 -f 986/286/762 989/292/764 988/291/763 -f 988/291/763 983/285/759 986/286/762 -f 986/286/762 985/294/761 990/293/755 -f 990/293/755 989/292/764 986/286/762 -f 988/291/763 980/296/757 979/295/756 -f 979/295/756 987/290/752 988/291/763 -f 988/291/763 989/292/764 981/297/758 -f 981/297/758 980/296/757 988/291/763 -f 989/292/764 990/293/755 982/298/755 -f 982/298/755 981/297/758 989/292/764 -f 991/299/765 992/300/694 993/301/766 -f 993/301/766 994/302/767 991/299/765 -f 994/302/767 995/303/768 996/304/769 -f 996/304/769 991/299/765 994/302/767 -f 994/302/767 993/305/766 997/306/770 -f 997/306/770 995/303/768 994/302/767 -f 996/304/769 995/303/768 998/307/771 -f 998/307/771 999/308/772 996/304/769 -f 995/303/768 997/309/770 1000/310/770 -f 1000/310/770 998/307/771 995/303/768 -f 1001/299/773 1002/302/774 1003/301/775 -f 1003/301/775 1004/300/776 1001/299/773 -f 1005/304/777 1006/303/778 1002/302/774 -f 1002/302/774 1001/299/773 1005/304/777 -f 1002/302/774 1006/303/778 1007/306/770 -f 1007/306/770 1003/305/775 1002/302/774 -f 1005/304/777 999/308/772 998/307/771 -f 998/307/771 1006/303/778 1005/304/777 -f 1006/303/778 998/307/771 1000/310/770 -f 1000/310/770 1007/309/770 1006/303/778 -f 1008/299/779 1009/300/694 1010/301/780 -f 1010/301/780 1011/302/781 1008/299/779 -f 1011/302/781 1012/303/782 1013/304/783 -f 1013/304/783 1008/299/779 1011/302/781 -f 1011/302/781 1010/305/780 1014/306/784 -f 1014/306/784 1012/303/782 1011/302/781 -f 1013/304/783 1012/303/782 1015/307/785 -f 1015/307/785 1016/308/786 1013/304/783 -f 1012/303/782 1014/309/784 1017/310/784 -f 1017/310/784 1015/307/785 1012/303/782 -f 1018/299/787 1019/302/788 1020/301/789 -f 1020/301/789 1021/300/525 1018/299/787 -f 1022/304/790 1023/303/791 1019/302/788 -f 1019/302/788 1018/299/787 1022/304/790 -f 1019/302/788 1023/303/791 1024/306/784 -f 1024/306/784 1020/305/789 1019/302/788 -f 1022/304/790 1016/308/786 1015/307/785 -f 1015/307/785 1023/303/791 1022/304/790 -f 1023/303/791 1015/307/785 1017/310/784 -f 1017/310/784 1024/309/784 1023/303/791 -f 1025/299/792 1026/300/694 1027/301/751 -f 1027/301/751 1028/302/748 1025/299/792 -f 1028/302/748 1029/303/793 1030/304/794 -f 1030/304/794 1025/299/792 1028/302/748 -f 1028/302/748 1027/305/751 1031/306/756 -f 1031/306/756 1029/303/793 1028/302/748 -f 1030/304/794 1029/303/793 1032/307/757 -f 1032/307/757 1033/308/795 1030/304/794 -f 1029/303/793 1031/309/756 1034/310/756 -f 1034/310/756 1032/307/757 1029/303/793 -f 1035/299/796 1036/302/759 1037/301/760 -f 1037/301/760 1038/300/700 1035/299/796 -f 1039/304/797 1040/303/763 1036/302/759 -f 1036/302/759 1035/299/796 1039/304/797 -f 1036/302/759 1040/303/763 1041/306/756 -f 1041/306/756 1037/305/760 1036/302/759 -f 1039/304/797 1033/308/795 1032/307/757 -f 1032/307/757 1040/303/763 1039/304/797 -f 1040/303/763 1032/307/757 1034/310/756 -f 1034/310/756 1041/309/756 1040/303/763 -f 1042/299/792 1043/300/694 1044/301/751 -f 1044/301/751 1045/302/748 1042/299/792 -f 1045/302/748 1046/303/753 1047/304/794 -f 1047/304/794 1042/299/792 1045/302/748 -f 1045/302/748 1044/305/751 1048/306/756 -f 1048/306/756 1046/303/753 1045/302/748 -f 1047/304/794 1046/303/753 1049/307/757 -f 1049/307/757 1050/308/795 1047/304/794 -f 1046/303/753 1048/309/756 1051/310/756 -f 1051/310/756 1049/307/757 1046/303/753 -f 1052/299/796 1053/302/759 1054/301/760 -f 1054/301/760 1055/300/700 1052/299/796 -f 1056/304/797 1057/303/763 1053/302/759 -f 1053/302/759 1052/299/796 1056/304/797 -f 1053/302/759 1057/303/763 1058/306/756 -f 1058/306/756 1054/305/760 1053/302/759 -f 1056/304/797 1050/308/795 1049/307/757 -f 1049/307/757 1057/303/763 1056/304/797 -f 1057/303/763 1049/307/757 1051/310/756 -f 1051/310/756 1058/309/756 1057/303/763 -f 1059/299/765 1060/300/694 1061/301/798 -f 1061/301/798 1062/302/767 1059/299/765 -f 1062/302/767 1063/303/799 1064/304/769 -f 1064/304/769 1059/299/765 1062/302/767 -f 1062/302/767 1061/305/798 1065/306/770 -f 1065/306/770 1063/303/799 1062/302/767 -f 1064/304/769 1063/303/799 1066/307/771 -f 1066/307/771 1067/308/772 1064/304/769 -f 1063/303/799 1065/309/770 1068/310/770 -f 1068/310/770 1066/307/771 1063/303/799 -f 1069/299/773 1070/302/774 1071/301/800 -f 1071/301/800 1072/300/525 1069/299/773 -f 1073/304/777 1074/303/801 1070/302/774 -f 1070/302/774 1069/299/773 1073/304/777 -f 1070/302/774 1074/303/801 1075/306/770 -f 1075/306/770 1071/305/800 1070/302/774 -f 1073/304/777 1067/308/772 1066/307/771 -f 1066/307/771 1074/303/801 1073/304/777 -f 1074/303/801 1066/307/771 1068/310/770 -f 1068/310/770 1075/309/770 1074/303/801 -f 1076/299/802 1077/300/694 1078/301/803 -f 1078/301/803 1079/302/804 1076/299/802 -f 1079/302/804 1080/303/805 1081/304/806 -f 1081/304/806 1076/299/802 1079/302/804 -f 1079/302/804 1078/305/803 1082/306/807 -f 1082/306/807 1080/303/805 1079/302/804 -f 1081/304/806 1080/303/805 1083/307/808 -f 1083/307/808 1084/308/722 1081/304/806 -f 1080/303/805 1082/309/807 1085/310/807 -f 1085/310/807 1083/307/808 1080/303/805 -f 1086/299/809 1087/302/810 1088/301/811 -f 1088/301/811 1089/300/700 1086/299/809 -f 1090/304/812 1091/303/813 1087/302/810 -f 1087/302/810 1086/299/809 1090/304/812 -f 1087/302/810 1091/303/813 1092/306/807 -f 1092/306/807 1088/305/811 1087/302/810 -f 1090/304/812 1084/308/722 1083/307/808 -f 1083/307/808 1091/303/813 1090/304/812 -f 1091/303/813 1083/307/808 1085/310/807 -f 1085/310/807 1092/309/807 1091/303/813 -f 1093/285/748 1094/286/749 1095/287/750 -f 1095/287/750 1096/288/751 1093/285/748 -f 1093/285/748 1096/289/751 1097/290/752 -f 1097/290/752 1098/291/753 1093/285/748 -f 1098/291/753 1099/292/754 1094/286/749 -f 1094/286/749 1093/285/748 1098/291/753 -f 1094/286/749 1099/292/754 1100/293/755 -f 1100/293/755 1095/294/750 1094/286/749 -f 1101/295/756 1102/296/757 1098/291/753 -f 1098/291/753 1097/290/752 1101/295/756 -f 1098/291/753 1102/296/757 1103/297/758 -f 1103/297/758 1099/292/754 1098/291/753 -f 1099/292/754 1103/297/758 1104/298/755 -f 1104/298/755 1100/293/755 1099/292/754 -f 1105/285/759 1106/288/760 1107/287/814 -f 1107/287/814 1108/286/815 1105/285/759 -f 1109/290/752 1106/289/760 1105/285/759 -f 1105/285/759 1110/291/763 1109/290/752 -f 1108/286/815 1111/292/764 1110/291/763 -f 1110/291/763 1105/285/759 1108/286/815 -f 1108/286/815 1107/294/814 1112/293/755 -f 1112/293/755 1111/292/764 1108/286/815 -f 1110/291/763 1102/296/757 1101/295/756 -f 1101/295/756 1109/290/752 1110/291/763 -f 1110/291/763 1111/292/764 1103/297/758 -f 1103/297/758 1102/296/757 1110/291/763 -f 1111/292/764 1112/293/755 1104/298/755 -f 1104/298/755 1103/297/758 1111/292/764 -f 1113/285/748 1114/286/749 1115/287/750 -f 1115/287/750 1116/288/816 1113/285/748 -f 1113/285/748 1116/289/816 1117/290/752 -f 1117/290/752 1118/291/793 1113/285/748 -f 1118/291/793 1119/292/754 1114/286/749 -f 1114/286/749 1113/285/748 1118/291/793 -f 1114/286/749 1119/292/754 1120/293/755 -f 1120/293/755 1115/294/750 1114/286/749 -f 1121/295/756 1122/296/757 1118/291/793 -f 1118/291/793 1117/290/752 1121/295/756 -f 1118/291/793 1122/296/757 1123/297/758 -f 1123/297/758 1119/292/754 1118/291/793 -f 1119/292/754 1123/297/758 1124/298/755 -f 1124/298/755 1120/293/755 1119/292/754 -f 1125/285/759 1126/288/760 1127/287/814 -f 1127/287/814 1128/286/817 1125/285/759 -f 1129/290/752 1126/289/760 1125/285/759 -f 1125/285/759 1130/291/763 1129/290/752 -f 1128/286/817 1131/292/764 1130/291/763 -f 1130/291/763 1125/285/759 1128/286/817 -f 1128/286/817 1127/294/814 1132/293/755 -f 1132/293/755 1131/292/764 1128/286/817 -f 1130/291/763 1122/296/757 1121/295/756 -f 1121/295/756 1129/290/752 1130/291/763 -f 1130/291/763 1131/292/764 1123/297/758 -f 1123/297/758 1122/296/757 1130/291/763 -f 1131/292/764 1132/293/755 1124/298/755 -f 1124/298/755 1123/297/758 1131/292/764 -f 1133/311/424 1134/314/424 1135/313/531 -f 1135/313/531 1136/312/531 1133/311/424 -f 1136/312/531 1135/313/531 1137/316/694 -f 1137/316/694 1138/315/694 1136/312/531 -f 1139/317/424 1140/320/818 1141/319/818 -f 1141/319/818 1142/318/424 1139/317/424 -f 1140/320/818 1143/322/526 1144/321/526 -f 1144/321/526 1141/319/818 1140/320/818 -f 1145/323/424 1146/326/819 1147/325/819 -f 1147/325/819 1148/324/424 1145/323/424 -f 1146/326/819 1149/328/820 1150/327/820 -f 1150/327/820 1147/325/819 1146/326/819 -f 1151/311/424 1152/312/537 1153/313/537 -f 1153/313/537 1154/314/424 1151/311/424 -f 1152/312/537 1155/315/525 1156/316/525 -f 1156/316/525 1153/313/537 1152/312/537 -f 1157/275/821 1158/274/822 1159/273/823 -f 1159/273/823 1160/276/824 1157/275/821 -f 1161/277/825 1162/280/826 1159/279/823 -f 1159/279/823 1158/278/822 1161/277/825 -f 1163/275/827 1164/276/828 1162/273/826 -f 1162/273/826 1161/274/825 1163/275/827 -f 1163/277/827 1157/278/821 1160/279/824 -f 1160/279/824 1164/280/828 1163/277/827 -f 1157/275/821 1165/282/829 1166/281/830 -f 1166/281/830 1158/274/822 1157/275/821 -f 1166/283/830 1167/284/831 1161/277/825 -f 1161/277/825 1158/278/822 1166/283/830 -f 1167/281/831 1168/282/832 1163/275/827 -f 1163/275/827 1161/274/825 1167/281/831 -f 1163/277/827 1168/284/832 1165/283/829 -f 1165/283/829 1157/278/821 1163/277/827 -f 1169/273/833 1170/274/834 1171/275/835 -f 1171/275/835 1172/276/836 1169/273/833 -f 1173/277/837 1170/278/834 1169/279/833 -f 1169/279/833 1174/280/838 1173/277/837 -f 1175/275/839 1173/274/837 1174/273/838 -f 1174/273/838 1176/276/840 1175/275/839 -f 1172/279/836 1171/278/835 1175/277/839 -f 1175/277/839 1176/280/840 1172/279/836 -f 1177/281/841 1178/282/842 1171/275/835 -f 1171/275/835 1170/274/834 1177/281/841 -f 1177/283/841 1170/278/834 1173/277/837 -f 1173/277/837 1179/284/843 1177/283/841 -f 1179/281/843 1173/274/837 1175/275/839 -f 1175/275/839 1180/282/844 1179/281/843 -f 1178/283/842 1180/284/844 1175/277/839 -f 1175/277/839 1171/278/835 1178/283/842 -f 1181/333/845 1182/334/846 1183/335/847 -f 1183/335/847 1184/336/848 1181/333/845 -f 1182/334/846 1185/337/849 1186/338/850 -f 1186/338/850 1183/335/847 1182/334/846 -f 1183/335/847 1187/339/851 1188/340/852 -f 1188/340/852 1184/336/848 1183/335/847 -f 1183/335/847 1186/338/850 1189/341/853 -f 1189/341/853 1187/339/851 1183/335/847 -f 1190/21/854 1191/24/855 1192/23/856 -f 1192/23/856 1193/22/857 1190/21/854 -f 1194/27/858 1195/26/859 1190/25/854 -f 1190/25/854 1193/28/857 1194/27/858 -f 1196/24/860 1195/21/859 1194/22/858 -f 1194/22/858 1197/23/861 1196/24/860 -f 1191/25/855 1196/26/860 1197/27/861 -f 1197/27/861 1192/28/856 1191/25/855 -f 1198/29/862 1191/24/855 1190/21/854 -f 1190/21/854 1199/30/863 1198/29/862 -f 1199/31/863 1190/25/854 1195/26/859 -f 1195/26/859 1200/32/864 1199/31/863 -f 1200/30/864 1195/21/859 1196/24/860 -f 1196/24/860 1201/29/865 1200/30/864 -f 1198/31/862 1201/32/865 1196/26/860 -f 1196/26/860 1191/25/855 1198/31/862 -f 1202/21/21 1203/22/22 1204/23/23 -f 1204/23/23 1205/24/866 1202/21/21 -f 1202/25/21 1206/26/25 1207/27/867 -f 1207/27/867 1203/28/22 1202/25/21 -f 1208/24/27 1209/23/868 1207/22/867 -f 1207/22/867 1206/21/25 1208/24/27 -f 1205/25/866 1204/28/23 1209/27/868 -f 1209/27/868 1208/26/27 1205/25/866 -f 1210/29/869 1211/30/30 1202/21/21 -f 1202/21/21 1205/24/866 1210/29/869 -f 1211/31/30 1212/32/870 1206/26/25 -f 1206/26/25 1202/25/21 1211/31/30 -f 1212/30/870 1213/29/871 1208/24/27 -f 1208/24/27 1206/21/25 1212/30/870 -f 1208/26/27 1213/32/871 1210/31/869 -f 1210/31/869 1205/25/866 1208/26/27 -f 1214/33/872 1215/36/873 1216/35/874 -f 1216/35/874 1217/34/875 1214/33/872 -f 1218/38/876 1219/37/877 1220/40/878 -f 1220/40/878 1221/39/879 1218/38/876 -f 1222/43/880 1223/42/881 1219/41/877 -f 1219/41/877 1218/44/876 1222/43/880 -f 1224/40/882 1223/37/881 1222/38/880 -f 1222/38/880 1225/39/883 1224/40/882 -f 1220/41/878 1224/42/882 1225/43/883 -f 1225/43/883 1221/44/879 1220/41/878 -f 1217/46/875 1216/45/874 1220/40/878 -f 1220/40/878 1219/37/877 1217/46/875 -f 1214/48/872 1217/47/875 1219/41/877 -f 1219/41/877 1223/42/881 1214/48/872 -f 1214/46/872 1223/37/881 1224/40/882 -f 1224/40/882 1215/45/873 1214/46/872 -f 1215/48/873 1224/42/882 1220/41/878 -f 1220/41/878 1216/47/874 1215/48/873 -f 1226/342/884 1227/343/885 1228/344/886 -f 1228/344/886 1229/345/887 1226/342/884 -f 1230/346/888 1231/347/889 1228/344/886 -f 1228/344/886 1227/343/885 1230/346/888 -f 1232/348/890 1227/349/885 1226/350/884 -f 1226/350/884 1233/351/891 1232/348/890 -f 1232/348/890 1234/352/892 1230/353/888 -f 1230/353/888 1227/349/885 1232/348/890 -f 1235/344/893 1232/343/890 1233/342/891 -f 1233/342/891 1236/345/894 1235/344/893 -f 1235/344/893 1237/347/895 1234/346/892 -f 1234/346/892 1232/343/890 1235/344/893 -f 1229/350/887 1228/349/886 1235/348/893 -f 1235/348/893 1236/351/894 1229/350/887 -f 1231/353/889 1237/352/895 1235/348/893 -f 1235/348/893 1228/349/886 1231/353/889 -f 1238/354/896 1239/355/897 1240/356/898 -f 1240/356/898 1241/357/899 1238/354/896 -f 1242/358/900 1243/359/901 1244/360/901 -f 1244/360/901 1245/361/88 1242/358/900 -f 1246/362/902 1242/363/900 1245/364/88 -f 1245/364/88 1247/365/902 1246/362/902 -f 1248/366/92 1246/367/902 1247/368/902 -f 1247/368/902 1249/369/92 1248/366/92 -f 1243/370/901 1248/371/92 1249/372/92 -f 1249/372/92 1244/373/901 1243/370/901 -f 1250/357/903 1251/356/904 1252/374/905 -f 1252/374/905 1253/375/906 1250/357/903 -f 1254/354/907 1250/357/903 1253/375/906 -f 1253/375/906 1255/376/908 1254/354/907 -f 1256/355/909 1254/354/907 1255/376/908 -f 1255/376/908 1257/377/910 1256/355/909 -f 1251/356/904 1256/355/909 1257/377/910 -f 1257/377/910 1252/374/905 1251/356/904 -f 1253/378/906 1252/379/905 1243/359/901 -f 1243/359/901 1242/358/900 1253/378/906 -f 1255/380/908 1253/381/906 1242/363/900 -f 1242/363/900 1246/362/902 1255/380/908 -f 1257/382/910 1255/383/908 1246/367/902 -f 1246/367/902 1248/366/92 1257/382/910 -f 1252/384/905 1257/385/910 1248/371/92 -f 1248/371/92 1243/370/901 1252/384/905 -f 1251/386/904 1250/387/903 1241/388/899 -f 1241/388/899 1240/389/898 1251/386/904 -f 1256/386/909 1251/387/904 1240/388/898 -f 1240/388/898 1239/389/897 1256/386/909 -f 1254/386/907 1256/387/909 1239/388/897 -f 1239/388/897 1238/389/896 1254/386/907 -f 1250/387/903 1254/386/907 1238/389/896 -f 1238/389/896 1241/388/899 1250/387/903 -f 1258/342/884 1259/343/885 1260/344/886 -f 1260/344/886 1261/345/887 1258/342/884 -f 1262/346/888 1263/347/889 1260/344/886 -f 1260/344/886 1259/343/885 1262/346/888 -f 1264/348/890 1259/349/885 1258/350/884 -f 1258/350/884 1265/351/891 1264/348/890 -f 1264/348/890 1266/352/892 1262/353/888 -f 1262/353/888 1259/349/885 1264/348/890 -f 1267/344/893 1264/343/890 1265/342/891 -f 1265/342/891 1268/345/894 1267/344/893 -f 1267/344/893 1269/347/895 1266/346/892 -f 1266/346/892 1264/343/890 1267/344/893 -f 1261/350/887 1260/349/886 1267/348/893 -f 1267/348/893 1268/351/894 1261/350/887 -f 1263/353/889 1269/352/895 1267/348/893 -f 1267/348/893 1260/349/886 1263/353/889 -f 1270/342/884 1271/343/885 1272/344/886 -f 1272/344/886 1273/345/887 1270/342/884 -f 1274/346/888 1275/347/889 1272/344/886 -f 1272/344/886 1271/343/885 1274/346/888 -f 1276/348/890 1271/349/885 1270/350/884 -f 1270/350/884 1277/351/891 1276/348/890 -f 1276/348/890 1278/352/892 1274/353/888 -f 1274/353/888 1271/349/885 1276/348/890 -f 1279/344/893 1276/343/890 1277/342/891 -f 1277/342/891 1280/345/894 1279/344/893 -f 1279/344/893 1281/347/895 1278/346/892 -f 1278/346/892 1276/343/890 1279/344/893 -f 1273/350/887 1272/349/886 1279/348/893 -f 1279/348/893 1280/351/894 1273/350/887 -f 1275/353/889 1281/352/895 1279/348/893 -f 1279/348/893 1272/349/886 1275/353/889 -f 1282/342/884 1283/343/885 1284/344/911 -f 1284/344/911 1285/345/887 1282/342/884 -f 1286/346/888 1287/347/889 1284/344/911 -f 1284/344/911 1283/343/885 1286/346/888 -f 1288/348/912 1283/349/885 1282/350/884 -f 1282/350/884 1289/351/891 1288/348/912 -f 1288/348/912 1290/352/892 1286/353/888 -f 1286/353/888 1283/349/885 1288/348/912 -f 1291/344/893 1288/343/912 1289/342/891 -f 1289/342/891 1292/345/894 1291/344/893 -f 1291/344/893 1293/347/895 1290/346/892 -f 1290/346/892 1288/343/912 1291/344/893 -f 1285/350/887 1284/349/911 1291/348/893 -f 1291/348/893 1292/351/894 1285/350/887 -f 1287/353/889 1293/352/895 1291/348/893 -f 1291/348/893 1284/349/911 1287/353/889 -f 1294/342/884 1295/343/885 1296/344/911 -f 1296/344/911 1297/345/887 1294/342/884 -f 1298/346/888 1299/347/889 1296/344/911 -f 1296/344/911 1295/343/885 1298/346/888 -f 1300/348/912 1295/349/885 1294/350/884 -f 1294/350/884 1301/351/891 1300/348/912 -f 1300/348/912 1302/352/892 1298/353/888 -f 1298/353/888 1295/349/885 1300/348/912 -f 1303/344/893 1300/343/912 1301/342/891 -f 1301/342/891 1304/345/894 1303/344/893 -f 1303/344/893 1305/347/895 1302/346/892 -f 1302/346/892 1300/343/912 1303/344/893 -f 1297/350/887 1296/349/911 1303/348/893 -f 1303/348/893 1304/351/894 1297/350/887 -f 1299/353/889 1305/352/895 1303/348/893 -f 1303/348/893 1296/349/911 1299/353/889 -f 1306/390/913 1307/391/914 1308/392/915 -f 1308/392/915 1309/393/916 1306/390/913 -f 1310/394/917 1311/395/918 1312/396/919 -f 1312/396/919 1313/397/920 1310/394/917 -f 1314/390/921 1315/398/922 1316/399/923 -f 1316/399/923 1317/393/924 1314/390/921 -f 1318/394/925 1319/400/926 1320/401/927 -f 1320/401/927 1321/397/928 1318/394/925 -f 1321/402/928 1322/403/929 1323/404/930 -f 1323/404/930 1308/405/915 1321/402/928 -f 1317/406/924 1324/407/931 1325/408/932 -f 1325/408/932 1320/409/927 1317/406/924 -f 1313/410/920 1326/411/933 1327/412/934 -f 1327/412/934 1316/413/923 1313/410/920 -f 1309/414/916 1328/415/935 1329/416/936 -f 1329/416/936 1312/417/919 1309/414/916 -f 1306/414/913 1330/415/424 1331/404/424 -f 1331/404/424 1307/405/914 1306/414/913 -f 1310/410/917 1332/411/424 1333/416/424 -f 1333/416/424 1311/417/918 1310/410/917 -f 1314/406/921 1334/407/424 1335/412/424 -f 1335/412/424 1315/413/922 1314/406/921 -f 1318/402/925 1336/403/424 1337/408/424 -f 1337/408/424 1319/409/926 1318/402/925 -f 1320/392/927 1319/391/926 1314/390/921 -f 1314/390/921 1317/393/924 1320/392/927 -f 1308/396/915 1307/395/914 1318/394/925 -f 1318/394/925 1321/397/928 1308/396/915 -f 1325/408/932 1322/403/929 1321/402/928 -f 1321/402/928 1320/409/927 1325/408/932 -f 1327/412/934 1324/407/931 1317/406/924 -f 1317/406/924 1316/413/923 1327/412/934 -f 1329/416/936 1326/411/933 1313/410/920 -f 1313/410/920 1312/417/919 1329/416/936 -f 1337/408/424 1334/407/424 1314/406/921 -f 1314/406/921 1319/409/926 1337/408/424 -f 1331/404/424 1336/403/424 1318/402/925 -f 1318/402/925 1307/405/914 1331/404/424 -f 1312/399/919 1311/398/918 1306/390/913 -f 1306/390/913 1309/393/916 1312/399/919 -f 1316/401/923 1315/400/922 1310/394/917 -f 1310/394/917 1313/397/920 1316/401/923 -f 1323/404/930 1328/415/935 1309/414/916 -f 1309/414/916 1308/405/915 1323/404/930 -f 1333/416/424 1330/415/424 1306/414/913 -f 1306/414/913 1311/417/918 1333/416/424 -f 1335/412/424 1332/411/424 1310/410/917 -f 1310/410/917 1315/413/922 1335/412/424 -f 1338/390/913 1339/391/914 1340/392/915 -f 1340/392/915 1341/393/916 1338/390/913 -f 1342/394/917 1343/395/918 1344/396/919 -f 1344/396/919 1345/397/920 1342/394/917 -f 1346/390/921 1347/398/922 1348/399/923 -f 1348/399/923 1349/393/924 1346/390/921 -f 1350/394/925 1351/400/926 1352/401/927 -f 1352/401/927 1353/397/928 1350/394/925 -f 1353/402/928 1354/403/929 1355/404/930 -f 1355/404/930 1340/405/915 1353/402/928 -f 1349/406/924 1356/407/931 1357/408/932 -f 1357/408/932 1352/409/927 1349/406/924 -f 1345/410/920 1358/411/933 1359/412/934 -f 1359/412/934 1348/413/923 1345/410/920 -f 1341/414/916 1360/415/935 1361/416/936 -f 1361/416/936 1344/417/919 1341/414/916 -f 1338/414/913 1362/415/424 1363/404/424 -f 1363/404/424 1339/405/914 1338/414/913 -f 1342/410/917 1364/411/424 1365/416/424 -f 1365/416/424 1343/417/918 1342/410/917 -f 1346/406/921 1366/407/424 1367/412/424 -f 1367/412/424 1347/413/922 1346/406/921 -f 1350/402/925 1368/403/424 1369/408/424 -f 1369/408/424 1351/409/926 1350/402/925 -f 1352/392/927 1351/391/926 1346/390/921 -f 1346/390/921 1349/393/924 1352/392/927 -f 1340/396/915 1339/395/914 1350/394/925 -f 1350/394/925 1353/397/928 1340/396/915 -f 1357/408/932 1354/403/929 1353/402/928 -f 1353/402/928 1352/409/927 1357/408/932 -f 1359/412/934 1356/407/931 1349/406/924 -f 1349/406/924 1348/413/923 1359/412/934 -f 1361/416/936 1358/411/933 1345/410/920 -f 1345/410/920 1344/417/919 1361/416/936 -f 1369/408/424 1366/407/424 1346/406/921 -f 1346/406/921 1351/409/926 1369/408/424 -f 1363/404/424 1368/403/424 1350/402/925 -f 1350/402/925 1339/405/914 1363/404/424 -f 1344/399/919 1343/398/918 1338/390/913 -f 1338/390/913 1341/393/916 1344/399/919 -f 1348/401/923 1347/400/922 1342/394/917 -f 1342/394/917 1345/397/920 1348/401/923 -f 1355/404/930 1360/415/935 1341/414/916 -f 1341/414/916 1340/405/915 1355/404/930 -f 1365/416/424 1362/415/424 1338/414/913 -f 1338/414/913 1343/417/918 1365/416/424 -f 1367/412/424 1364/411/424 1342/410/917 -f 1342/410/917 1347/413/922 1367/412/424 -f 1370/342/937 1371/343/938 1372/344/939 -f 1372/344/939 1373/345/940 1370/342/937 -f 1374/346/941 1375/347/942 1372/344/939 -f 1372/344/939 1371/343/938 1374/346/941 -f 1376/348/943 1371/349/938 1370/350/937 -f 1370/350/937 1377/351/944 1376/348/943 -f 1376/348/943 1378/352/945 1374/353/941 -f 1374/353/941 1371/349/938 1376/348/943 -f 1379/344/946 1376/343/943 1377/342/944 -f 1377/342/944 1380/345/947 1379/344/946 -f 1379/344/946 1381/347/948 1378/346/945 -f 1378/346/945 1376/343/943 1379/344/946 -f 1373/350/940 1372/349/939 1379/348/946 -f 1379/348/946 1380/351/947 1373/350/940 -f 1375/353/942 1381/352/948 1379/348/946 -f 1379/348/946 1372/349/939 1375/353/942 -f 1382/418/949 1383/419/950 1384/420/951 -f 1383/419/950 1385/421/952 1384/420/951 -f 1385/422/952 1386/423/953 1384/420/951 -f 1386/423/953 1387/424/954 1384/420/951 -f 1387/424/954 1388/425/955 1384/420/951 -f 1388/425/955 1389/426/956 1384/420/951 -f 1389/426/956 1390/427/957 1384/420/951 -f 1390/427/957 1391/428/958 1384/420/951 -f 1391/428/958 1392/429/959 1384/420/951 -f 1392/429/959 1393/430/960 1384/420/951 -f 1393/430/960 1382/418/949 1384/420/951 -f 1394/431/961 1395/432/962 1396/433/963 -f 1396/433/963 1397/434/964 1394/431/961 -f 1398/435/965 1399/436/966 1395/432/962 -f 1395/432/962 1394/431/961 1398/435/965 -f 1400/437/967 1401/438/968 1399/436/966 -f 1399/436/966 1398/435/965 1400/437/967 -f 1402/439/969 1403/440/970 1401/438/968 -f 1401/438/968 1400/437/967 1402/439/969 -f 1404/441/971 1405/442/972 1403/443/970 -f 1403/443/970 1402/444/969 1404/441/971 -f 1406/445/973 1407/446/974 1405/442/972 -f 1405/442/972 1404/441/971 1406/445/973 -f 1408/447/975 1409/448/976 1407/446/974 -f 1407/446/974 1406/445/973 1408/447/975 -f 1410/449/977 1411/450/978 1409/448/976 -f 1409/448/976 1408/447/975 1410/449/977 -f 1412/451/979 1413/452/980 1411/450/978 -f 1411/450/978 1410/449/977 1412/451/979 -f 1414/453/981 1415/454/982 1413/452/980 -f 1413/452/980 1412/451/979 1414/453/981 -f 1397/434/964 1396/433/963 1415/454/982 -f 1415/454/982 1414/453/981 1397/434/964 -f 1416/455/983 1394/431/961 1397/434/964 -f 1397/434/964 1417/456/984 1416/455/983 -f 1418/457/985 1398/435/965 1394/431/961 -f 1394/431/961 1416/455/983 1418/457/985 -f 1419/458/986 1400/437/967 1398/435/965 -f 1398/435/965 1418/457/985 1419/458/986 -f 1420/459/987 1402/439/969 1400/437/967 -f 1400/437/967 1419/458/986 1420/459/987 -f 1421/460/988 1404/441/971 1402/444/969 -f 1402/444/969 1420/461/987 1421/460/988 -f 1422/462/989 1406/445/973 1404/441/971 -f 1404/441/971 1421/460/988 1422/462/989 -f 1423/463/990 1408/447/975 1406/445/973 -f 1406/445/973 1422/462/989 1423/463/990 -f 1424/464/991 1410/449/977 1408/447/975 -f 1408/447/975 1423/463/990 1424/464/991 -f 1425/465/992 1412/451/979 1410/449/977 -f 1410/449/977 1424/464/991 1425/465/992 -f 1426/466/993 1414/453/981 1412/451/979 -f 1412/451/979 1425/465/992 1426/466/993 -f 1417/456/984 1397/434/964 1414/453/981 -f 1414/453/981 1426/466/993 1417/456/984 -f 1427/467/994 1416/468/983 1417/469/984 -f 1417/469/984 1428/470/995 1427/467/994 -f 1429/471/996 1418/472/985 1416/468/983 -f 1416/468/983 1427/467/994 1429/471/996 -f 1430/473/997 1419/474/986 1418/472/985 -f 1418/472/985 1429/471/996 1430/473/997 -f 1431/475/998 1420/476/987 1419/474/986 -f 1419/474/986 1430/473/997 1431/475/998 -f 1432/477/999 1421/478/988 1420/479/987 -f 1420/479/987 1431/480/998 1432/477/999 -f 1433/481/1000 1422/482/989 1421/478/988 -f 1421/478/988 1432/477/999 1433/481/1000 -f 1434/483/1001 1423/484/990 1422/482/989 -f 1422/482/989 1433/481/1000 1434/483/1001 -f 1435/485/1002 1424/486/991 1423/484/990 -f 1423/484/990 1434/483/1001 1435/485/1002 -f 1436/487/1003 1425/488/992 1424/486/991 -f 1424/486/991 1435/485/1002 1436/487/1003 -f 1437/489/1004 1426/490/993 1425/488/992 -f 1425/488/992 1436/487/1003 1437/489/1004 -f 1428/470/995 1417/469/984 1426/490/993 -f 1426/490/993 1437/489/1004 1428/470/995 -f 1383/491/950 1382/492/949 1396/493/963 -f 1396/493/963 1395/494/962 1383/491/950 -f 1385/495/952 1383/491/950 1395/494/962 -f 1395/494/962 1399/496/966 1385/495/952 -f 1401/497/968 1386/498/953 1385/495/952 -f 1385/495/952 1399/496/966 1401/497/968 -f 1387/499/954 1386/498/953 1401/497/968 -f 1401/497/968 1403/500/970 1387/499/954 -f 1388/501/955 1387/502/954 1403/503/970 -f 1403/503/970 1405/504/972 1388/501/955 -f 1389/505/956 1388/501/955 1405/504/972 -f 1405/504/972 1407/506/974 1389/505/956 -f 1390/507/957 1389/505/956 1407/506/974 -f 1407/506/974 1409/508/976 1390/507/957 -f 1391/509/958 1390/507/957 1409/508/976 -f 1409/508/976 1411/510/978 1391/509/958 -f 1392/511/959 1391/509/958 1411/510/978 -f 1411/510/978 1413/512/980 1392/511/959 -f 1393/513/960 1392/511/959 1413/512/980 -f 1413/512/980 1415/514/982 1393/513/960 -f 1382/492/949 1393/513/960 1415/514/982 -f 1415/514/982 1396/493/963 1382/492/949 -f 1438/515/1005 1439/516/1006 1440/517/1007 -f 1440/517/1007 1441/518/1008 1438/515/1005 -f 1442/519/1009 1443/520/1010 1444/521/1011 -f 1444/521/1011 1445/522/1012 1442/519/1009 -f 1446/520/1013 1442/519/1009 1445/522/1012 -f 1445/522/1012 1447/521/1014 1446/520/1013 -f 1448/520/1015 1446/519/1013 1447/522/1014 -f 1447/522/1014 1449/521/1016 1448/520/1015 -f 1443/519/1010 1448/520/1015 1449/521/1016 -f 1449/521/1016 1444/522/1011 1443/519/1010 -f 1440/523/1007 1443/520/1010 1442/519/1009 -f 1442/519/1009 1441/524/1008 1440/523/1007 -f 1441/524/1008 1442/519/1009 1446/520/1013 -f 1446/520/1013 1438/523/1005 1441/524/1008 -f 1438/524/1005 1446/519/1013 1448/520/1015 -f 1448/520/1015 1439/523/1006 1438/524/1005 -f 1439/523/1006 1448/520/1015 1443/519/1010 -f 1443/519/1010 1440/524/1007 1439/523/1006 -f 1450/515/1005 1451/516/1006 1452/517/1007 -f 1452/517/1007 1453/518/1008 1450/515/1005 -f 1454/519/1009 1455/520/1010 1456/521/1011 -f 1456/521/1011 1457/522/1012 1454/519/1009 -f 1458/520/1013 1454/519/1009 1457/522/1012 -f 1457/522/1012 1459/521/1014 1458/520/1013 -f 1460/520/1015 1458/519/1013 1459/522/1014 -f 1459/522/1014 1461/521/1016 1460/520/1015 -f 1455/519/1010 1460/520/1015 1461/521/1016 -f 1461/521/1016 1456/522/1011 1455/519/1010 -f 1452/523/1007 1455/520/1010 1454/519/1009 -f 1454/519/1009 1453/524/1008 1452/523/1007 -f 1453/524/1008 1454/519/1009 1458/520/1013 -f 1458/520/1013 1450/523/1005 1453/524/1008 -f 1450/524/1005 1458/519/1013 1460/520/1015 -f 1460/520/1015 1451/523/1006 1450/524/1005 -f 1451/523/1006 1460/520/1015 1455/519/1010 -f 1455/519/1010 1452/524/1007 1451/523/1006 -f 1462/515/1005 1463/516/1006 1464/517/1007 -f 1464/517/1007 1465/518/1008 1462/515/1005 -f 1466/519/1009 1467/520/1010 1468/521/1011 -f 1468/521/1011 1469/522/1012 1466/519/1009 -f 1470/520/1013 1466/519/1009 1469/522/1012 -f 1469/522/1012 1471/521/1014 1470/520/1013 -f 1472/520/1015 1470/519/1013 1471/522/1014 -f 1471/522/1014 1473/521/1016 1472/520/1015 -f 1467/519/1010 1472/520/1015 1473/521/1016 -f 1473/521/1016 1468/522/1011 1467/519/1010 -f 1464/523/1007 1467/520/1010 1466/519/1009 -f 1466/519/1009 1465/524/1008 1464/523/1007 -f 1465/524/1008 1466/519/1009 1470/520/1013 -f 1470/520/1013 1462/523/1005 1465/524/1008 -f 1462/524/1005 1470/519/1013 1472/520/1015 -f 1472/520/1015 1463/523/1006 1462/524/1005 -f 1463/523/1006 1472/520/1015 1467/519/1010 -f 1467/519/1010 1464/524/1007 1463/523/1006 -f 1474/515/1017 1475/516/1018 1476/517/1019 -f 1476/517/1019 1477/518/1020 1474/515/1017 -f 1478/519/1021 1479/520/1022 1480/521/1023 -f 1480/521/1023 1481/522/1012 1478/519/1021 -f 1482/520/1013 1478/519/1021 1481/522/1012 -f 1481/522/1012 1483/521/1024 1482/520/1013 -f 1484/520/1025 1482/519/1013 1483/522/1024 -f 1483/522/1024 1485/521/1016 1484/520/1025 -f 1479/519/1022 1484/520/1025 1485/521/1016 -f 1485/521/1016 1480/522/1023 1479/519/1022 -f 1476/523/1019 1479/520/1022 1478/519/1021 -f 1478/519/1021 1477/524/1020 1476/523/1019 -f 1477/524/1020 1478/519/1021 1482/520/1013 -f 1482/520/1013 1474/523/1017 1477/524/1020 -f 1474/524/1017 1482/519/1013 1484/520/1025 -f 1484/520/1025 1475/523/1018 1474/524/1017 -f 1475/523/1018 1484/520/1025 1479/519/1022 -f 1479/519/1022 1476/524/1019 1475/523/1018 -f 1486/525/1026 1487/526/1027 1488/527/1022 -f 1488/527/1022 1489/528/1026 1486/525/1026 -f 1490/529/1028 1491/530/1029 1492/531/1030 -f 1492/531/1030 1493/532/1031 1490/529/1028 -f 1494/533/1032 1495/534/1032 1496/535/1027 -f 1496/535/1027 1497/536/1033 1494/533/1032 -f 1498/537/1032 1487/526/1027 1499/538/1034 -f 1499/538/1034 1500/539/1035 1498/537/1032 -f 1501/540/1036 1502/541/1037 1503/542/1038 -f 1503/542/1038 1499/538/1034 1501/540/1036 -f 1504/543/1039 1505/544/1040 1506/545/1041 -f 1506/545/1041 1507/546/1042 1504/543/1039 -f 1508/547/1043 1509/548/1044 1510/549/1045 -f 1510/549/1045 1511/550/1046 1508/547/1043 -f 1512/551/1047 1503/542/1038 1513/552/1048 -f 1513/552/1048 1514/553/1049 1512/551/1047 -f 1511/550/1046 1501/540/1036 1486/525/1026 -f 1486/525/1026 1496/535/1027 1511/550/1046 -f 1504/543/1039 1491/530/1029 1515/554/1050 -f 1515/554/1050 1516/555/1051 1504/543/1039 -f 1508/547/1043 1495/534/1032 1492/531/1030 -f 1492/531/1030 1507/546/1042 1508/547/1043 -f 1517/556/1032 1518/557/1032 1498/537/1032 -f 1498/537/1032 1519/558/1032 1517/556/1032 -f 1520/559/1052 1502/541/1037 1510/549/1045 -f 1510/549/1045 1521/560/1053 1520/559/1052 -f 1522/561/1054 1505/544/1040 1523/562/1055 -f 1523/562/1055 1524/563/1056 1522/561/1054 -f 1525/564/1057 1509/548/1044 1506/545/1041 -f 1506/545/1041 1526/565/1058 1525/564/1057 -f 1527/566/1059 1500/539/1035 1512/551/1047 -f 1512/551/1047 1528/567/1060 1527/566/1059 -f 1496/535/1027 1486/525/1026 1489/528/1026 -f 1489/528/1026 1497/536/1033 1496/535/1027 -f 1529/568/1061 1515/554/1050 1491/530/1029 -f 1491/530/1029 1490/529/1028 1529/568/1061 -f 1493/532/1031 1492/531/1030 1495/534/1032 -f 1495/534/1032 1494/533/1032 1493/532/1031 -f 1519/558/1032 1498/537/1032 1500/539/1035 -f 1500/539/1035 1527/566/1059 1519/558/1032 -f 1511/550/1046 1510/549/1045 1502/541/1037 -f 1502/541/1037 1501/540/1036 1511/550/1046 -f 1516/555/1051 1523/562/1055 1505/544/1040 -f 1505/544/1040 1504/543/1039 1516/555/1051 -f 1507/546/1042 1506/545/1041 1509/548/1044 -f 1509/548/1044 1508/547/1043 1507/546/1042 -f 1528/567/1060 1512/551/1047 1514/553/1049 -f 1514/553/1049 1530/569/1062 1528/567/1060 -f 1487/526/1027 1486/525/1026 1501/540/1036 -f 1501/540/1036 1499/538/1034 1487/526/1027 -f 1507/546/1042 1492/531/1030 1491/530/1029 -f 1491/530/1029 1504/543/1039 1507/546/1042 -f 1511/550/1046 1496/535/1027 1495/534/1032 -f 1495/534/1032 1508/547/1043 1511/550/1046 -f 1487/526/1027 1498/537/1032 1518/557/1032 -f 1518/557/1032 1488/527/1022 1487/526/1027 -f 1513/552/1048 1503/542/1038 1502/541/1037 -f 1502/541/1037 1520/559/1052 1513/552/1048 -f 1526/565/1058 1506/545/1041 1505/544/1040 -f 1505/544/1040 1522/561/1054 1526/565/1058 -f 1521/560/1053 1510/549/1045 1509/548/1044 -f 1509/548/1044 1525/564/1057 1521/560/1053 -f 1503/542/1038 1512/551/1047 1500/539/1035 -f 1500/539/1035 1499/538/1034 1503/542/1038 -f 1531/570/1063 1524/571/1064 1532/572/1065 -f 1532/572/1065 1533/573/1066 1531/570/1063 -f 1534/574/1067 1531/570/1063 1533/573/1066 -f 1533/573/1066 1535/575/1068 1534/574/1067 -f 1536/576/1069 1534/577/1067 1535/578/1068 -f 1535/578/1068 1537/579/1070 1536/576/1069 -f 1538/580/1071 1536/576/1069 1537/579/1070 -f 1537/579/1070 1539/581/1072 1538/580/1071 -f 1524/571/1064 1538/580/1071 1539/581/1072 -f 1539/581/1072 1532/572/1065 1524/571/1064 -f 1534/582/1067 1536/583/1069 1538/584/1071 -f 1531/585/1063 1534/582/1067 1538/584/1071 -f 1524/586/1064 1531/585/1063 1538/584/1071 -f 1540/587/1073 1541/588/1074 1542/589/1075 -f 1542/589/1075 1543/590/1076 1540/587/1073 -f 1544/591/1077 1540/587/1073 1543/590/1076 -f 1543/590/1076 1545/592/1078 1544/591/1077 -f 1546/593/1079 1544/591/1077 1545/592/1078 -f 1545/592/1078 1547/594/1080 1546/593/1079 -f 1548/595/1081 1546/593/1079 1547/594/1080 -f 1547/594/1080 1549/596/1082 1548/595/1081 -f 1541/588/1074 1548/597/1081 1549/598/1082 -f 1549/598/1082 1542/589/1075 1541/588/1074 -f 1550/599/1083 1551/600/1084 1552/601/1085 -f 1553/602/1086 1550/599/1083 1552/601/1085 -f 1554/603/1087 1553/602/1086 1552/601/1085 -f 1555/604/1088 1541/588/1074 1540/587/1073 -f 1540/587/1073 1556/605/1089 1555/604/1088 -f 1556/605/1089 1540/587/1073 1544/591/1077 -f 1544/591/1077 1557/606/1090 1556/605/1089 -f 1557/606/1090 1544/591/1077 1546/593/1079 -f 1546/593/1079 1558/607/1091 1557/606/1090 -f 1558/607/1091 1546/593/1079 1548/595/1081 -f 1548/595/1081 1559/608/1092 1558/607/1091 -f 1559/609/1092 1548/597/1081 1541/588/1074 -f 1541/588/1074 1555/604/1088 1559/609/1092 -f 1554/610/1087 1555/604/1088 1556/605/1089 -f 1556/605/1089 1553/611/1086 1554/610/1087 -f 1553/611/1086 1556/605/1089 1557/606/1090 -f 1557/606/1090 1550/612/1083 1553/611/1086 -f 1550/612/1083 1557/606/1090 1558/607/1091 -f 1558/607/1091 1551/613/1084 1550/612/1083 -f 1551/613/1084 1558/607/1091 1559/608/1092 -f 1559/608/1092 1552/614/1085 1551/613/1084 -f 1552/615/1085 1559/609/1092 1555/604/1088 -f 1555/604/1088 1554/610/1087 1552/615/1085 -f 1560/616/1093 1561/617/1094 1562/618/1095 -f 1562/618/1095 1563/619/1096 1560/616/1093 -f 1564/620/1097 1560/621/1093 1563/622/1096 -f 1563/622/1096 1565/623/1098 1564/620/1097 -f 1566/624/1099 1564/620/1097 1565/623/1098 -f 1565/623/1098 1567/625/1100 1566/624/1099 -f 1568/626/1101 1566/624/1099 1567/625/1100 -f 1567/625/1100 1569/627/1102 1568/626/1101 -f 1561/617/1094 1568/626/1101 1569/627/1102 -f 1569/627/1102 1562/618/1095 1561/617/1094 -f 1570/587/1103 1571/588/1104 1572/589/1105 -f 1572/589/1105 1573/590/1106 1570/587/1103 -f 1574/591/1107 1570/587/1103 1573/590/1106 -f 1573/590/1106 1575/592/1108 1574/591/1107 -f 1576/593/1109 1574/591/1107 1575/592/1108 -f 1575/592/1108 1577/594/1110 1576/593/1109 -f 1578/595/1111 1576/593/1109 1577/594/1110 -f 1577/594/1110 1579/596/1112 1578/595/1111 -f 1571/588/1104 1578/597/1111 1579/598/1112 -f 1579/598/1112 1572/589/1105 1571/588/1104 -f 1580/599/1113 1581/600/1084 1582/601/1085 -f 1583/602/1086 1580/599/1113 1582/601/1085 -f 1584/603/1087 1583/602/1086 1582/601/1085 -f 1585/604/1088 1571/588/1104 1570/587/1103 -f 1570/587/1103 1586/605/1089 1585/604/1088 -f 1586/605/1089 1570/587/1103 1574/591/1107 -f 1574/591/1107 1587/606/1090 1586/605/1089 -f 1587/606/1090 1574/591/1107 1576/593/1109 -f 1576/593/1109 1588/607/1114 1587/606/1090 -f 1588/607/1114 1576/593/1109 1578/595/1111 -f 1578/595/1111 1589/608/1092 1588/607/1114 -f 1589/609/1092 1578/597/1111 1571/588/1104 -f 1571/588/1104 1585/604/1088 1589/609/1092 -f 1584/610/1087 1585/604/1088 1586/605/1089 -f 1586/605/1089 1583/611/1086 1584/610/1087 -f 1583/611/1086 1586/605/1089 1587/606/1090 -f 1587/606/1090 1580/612/1113 1583/611/1086 -f 1580/612/1113 1587/606/1090 1588/607/1114 -f 1588/607/1114 1581/613/1084 1580/612/1113 -f 1581/613/1084 1588/607/1114 1589/608/1092 -f 1589/608/1092 1582/614/1085 1581/613/1084 -f 1582/615/1085 1589/609/1092 1585/604/1088 -f 1585/604/1088 1584/610/1087 1582/615/1085 -f 1590/616/1093 1591/617/1094 1592/618/1095 -f 1592/618/1095 1593/619/1096 1590/616/1093 -f 1594/620/1097 1590/621/1093 1593/622/1096 -f 1593/622/1096 1595/623/1098 1594/620/1097 -f 1596/624/1099 1594/620/1097 1595/623/1098 -f 1595/623/1098 1597/625/1115 1596/624/1099 -f 1598/626/1116 1596/624/1099 1597/625/1115 -f 1597/625/1115 1599/627/1102 1598/626/1116 -f 1591/617/1094 1598/626/1116 1599/627/1102 -f 1599/627/1102 1592/618/1095 1591/617/1094 -f 1600/628/1117 1601/629/1118 1602/630/1119 -f 1602/630/1119 1603/631/1120 1600/628/1117 -f 1604/632/1121 1601/629/1118 1600/628/1117 -f 1600/628/1117 1605/633/1122 1604/632/1121 -f 1606/634/1123 1607/635/1124 1602/636/1119 -f 1602/636/1119 1601/637/1118 1606/634/1123 -f 1604/638/1121 1608/639/1125 1606/634/1123 -f 1606/634/1123 1601/637/1118 1604/638/1121 -f 1609/628/1126 1610/631/1127 1607/630/1124 -f 1607/630/1124 1606/629/1123 1609/628/1126 -f 1608/632/1125 1611/633/1128 1609/628/1126 -f 1609/628/1126 1606/629/1123 1608/632/1125 -f 1609/634/1126 1600/637/1117 1603/636/1120 -f 1603/636/1120 1610/635/1127 1609/634/1126 -f 1605/638/1122 1600/637/1117 1609/634/1126 -f 1609/634/1126 1611/639/1128 1605/638/1122 -f 1612/616/1093 1613/617/1094 1614/618/1095 -f 1614/618/1095 1615/619/1096 1612/616/1093 -f 1616/620/1097 1612/621/1093 1615/622/1096 -f 1615/622/1096 1617/623/1098 1616/620/1097 -f 1618/624/1099 1616/620/1097 1617/623/1098 -f 1617/623/1098 1619/625/1115 1618/624/1099 -f 1620/626/1116 1618/624/1099 1619/625/1115 -f 1619/625/1115 1621/627/1129 1620/626/1116 -f 1613/617/1094 1620/626/1116 1621/627/1129 -f 1621/627/1129 1614/618/1095 1613/617/1094 -f 1622/616/1093 1623/617/1094 1624/618/1095 -f 1624/618/1095 1625/619/1096 1622/616/1093 -f 1626/620/1097 1622/621/1093 1625/622/1096 -f 1625/622/1096 1627/623/1098 1626/620/1097 -f 1628/624/1099 1626/620/1097 1627/623/1098 -f 1627/623/1098 1629/625/1115 1628/624/1099 -f 1630/626/1101 1628/624/1099 1629/625/1115 -f 1629/625/1115 1631/627/1129 1630/626/1101 -f 1623/617/1094 1630/626/1101 1631/627/1129 -f 1631/627/1129 1624/618/1095 1623/617/1094 -f 1632/616/1093 1633/617/1094 1634/618/1095 -f 1634/618/1095 1635/619/1096 1632/616/1093 -f 1636/620/1097 1632/621/1093 1635/622/1096 -f 1635/622/1096 1637/623/1098 1636/620/1097 -f 1638/624/1130 1636/620/1097 1637/623/1098 -f 1637/623/1098 1639/625/1100 1638/624/1130 -f 1640/626/1101 1638/624/1130 1639/625/1100 -f 1639/625/1100 1641/627/1102 1640/626/1101 -f 1633/617/1094 1640/626/1101 1641/627/1102 -f 1641/627/1102 1634/618/1095 1633/617/1094 -f 1642/616/1093 1643/617/1094 1644/618/1095 -f 1644/618/1095 1645/619/1096 1642/616/1093 -f 1646/620/1097 1642/621/1093 1645/622/1096 -f 1645/622/1096 1647/623/1098 1646/620/1097 -f 1648/624/1099 1646/620/1097 1647/623/1098 -f 1647/623/1098 1649/625/1115 1648/624/1099 -f 1650/626/1116 1648/624/1099 1649/625/1115 -f 1649/625/1115 1651/627/1102 1650/626/1116 -f 1643/617/1094 1650/626/1116 1651/627/1102 -f 1651/627/1102 1644/618/1095 1643/617/1094 -f 1652/616/1093 1653/617/1094 1654/618/1095 -f 1654/618/1095 1655/619/1096 1652/616/1093 -f 1656/620/1097 1652/621/1093 1655/622/1096 -f 1655/622/1096 1657/623/1098 1656/620/1097 -f 1658/624/1099 1656/620/1097 1657/623/1098 -f 1657/623/1098 1659/625/1115 1658/624/1099 -f 1660/626/1101 1658/624/1099 1659/625/1115 -f 1659/625/1115 1661/627/1102 1660/626/1101 -f 1653/617/1094 1660/626/1101 1661/627/1102 -f 1661/627/1102 1654/618/1095 1653/617/1094 -f 1662/616/1093 1663/617/1094 1664/618/1095 -f 1664/618/1095 1665/619/1096 1662/616/1093 -f 1666/620/1097 1662/621/1093 1665/622/1096 -f 1665/622/1096 1667/623/1098 1666/620/1097 -f 1668/624/1099 1666/620/1097 1667/623/1098 -f 1667/623/1098 1669/625/1100 1668/624/1099 -f 1670/626/1101 1668/624/1099 1669/625/1100 -f 1669/625/1100 1671/627/1102 1670/626/1101 -f 1663/617/1094 1670/626/1101 1671/627/1102 -f 1671/627/1102 1664/618/1095 1663/617/1094 -f 1672/616/1093 1673/617/1094 1674/618/1095 -f 1674/618/1095 1675/619/1096 1672/616/1093 -f 1676/620/1097 1672/621/1093 1675/622/1096 -f 1675/622/1096 1677/623/1131 1676/620/1097 -f 1678/624/1099 1676/620/1097 1677/623/1131 -f 1677/623/1131 1679/625/1100 1678/624/1099 -f 1680/626/1132 1678/624/1099 1679/625/1100 -f 1679/625/1100 1681/627/1102 1680/626/1132 -f 1673/617/1094 1680/626/1132 1681/627/1102 -f 1681/627/1102 1674/618/1095 1673/617/1094 -f 1682/616/1093 1683/617/1094 1684/618/1095 -f 1684/618/1095 1685/619/1096 1682/616/1093 -f 1686/620/1097 1682/621/1093 1685/622/1096 -f 1685/622/1096 1687/623/1098 1686/620/1097 -f 1688/624/1099 1686/620/1097 1687/623/1098 -f 1687/623/1098 1689/625/1115 1688/624/1099 -f 1690/626/1116 1688/624/1099 1689/625/1115 -f 1689/625/1115 1691/627/1102 1690/626/1116 -f 1683/617/1094 1690/626/1116 1691/627/1102 -f 1691/627/1102 1684/618/1095 1683/617/1094 -f 1692/616/1093 1693/617/1094 1694/618/1095 -f 1694/618/1095 1695/619/1096 1692/616/1093 -f 1696/620/1097 1692/621/1093 1695/622/1096 -f 1695/622/1096 1697/623/1098 1696/620/1097 -f 1698/624/1130 1696/620/1097 1697/623/1098 -f 1697/623/1098 1699/625/1100 1698/624/1130 -f 1700/626/1133 1698/624/1130 1699/625/1100 -f 1699/625/1100 1701/627/1102 1700/626/1133 -f 1693/617/1094 1700/626/1133 1701/627/1102 -f 1701/627/1102 1694/618/1095 1693/617/1094 -f 1702/616/1093 1703/617/1094 1704/618/1095 -f 1704/618/1095 1705/619/1096 1702/616/1093 -f 1706/620/1097 1702/621/1093 1705/622/1096 -f 1705/622/1096 1707/623/1131 1706/620/1097 -f 1708/624/1099 1706/620/1097 1707/623/1131 -f 1707/623/1131 1709/625/1100 1708/624/1099 -f 1710/626/1101 1708/624/1099 1709/625/1100 -f 1709/625/1100 1711/627/1102 1710/626/1101 -f 1703/617/1094 1710/626/1101 1711/627/1102 -f 1711/627/1102 1704/618/1095 1703/617/1094 -f 1712/616/1093 1713/617/1094 1714/618/1095 -f 1714/618/1095 1715/619/1096 1712/616/1093 -f 1716/620/1097 1712/621/1093 1715/622/1096 -f 1715/622/1096 1717/623/1098 1716/620/1097 -f 1718/624/1130 1716/620/1097 1717/623/1098 -f 1717/623/1098 1719/625/1100 1718/624/1130 -f 1720/626/1101 1718/624/1130 1719/625/1100 -f 1719/625/1100 1721/627/1102 1720/626/1101 -f 1713/617/1094 1720/626/1101 1721/627/1102 -f 1721/627/1102 1714/618/1095 1713/617/1094 -f 1722/616/1093 1723/617/1094 1724/618/1095 -f 1724/618/1095 1725/619/1096 1722/616/1093 -f 1726/620/1097 1722/621/1093 1725/622/1096 -f 1725/622/1096 1727/623/1098 1726/620/1097 -f 1728/624/1130 1726/620/1097 1727/623/1098 -f 1727/623/1098 1729/625/1100 1728/624/1130 -f 1730/626/1101 1728/624/1130 1729/625/1100 -f 1729/625/1100 1731/627/1102 1730/626/1101 -f 1723/617/1094 1730/626/1101 1731/627/1102 -f 1731/627/1102 1724/618/1095 1723/617/1094 -f 1732/616/1093 1733/617/1094 1734/618/1095 -f 1734/618/1095 1735/619/1134 1732/616/1093 -f 1736/620/1097 1732/621/1093 1735/622/1134 -f 1735/622/1134 1737/623/1098 1736/620/1097 -f 1738/624/1130 1736/620/1097 1737/623/1098 -f 1737/623/1098 1739/625/1100 1738/624/1130 -f 1740/626/1101 1738/624/1130 1739/625/1100 -f 1739/625/1100 1741/627/1102 1740/626/1101 -f 1733/617/1094 1740/626/1101 1741/627/1102 -f 1741/627/1102 1734/618/1095 1733/617/1094 -f 1742/616/1093 1743/617/1094 1744/618/1095 -f 1744/618/1095 1745/619/1134 1742/616/1093 -f 1746/620/1097 1742/621/1093 1745/622/1134 -f 1745/622/1134 1747/623/1098 1746/620/1097 -f 1748/624/1130 1746/620/1097 1747/623/1098 -f 1747/623/1098 1749/625/1100 1748/624/1130 -f 1750/626/1101 1748/624/1130 1749/625/1100 -f 1749/625/1100 1751/627/1102 1750/626/1101 -f 1743/617/1094 1750/626/1101 1751/627/1102 -f 1751/627/1102 1744/618/1095 1743/617/1094 -f 1752/255/1135 1753/256/1136 1754/257/1137 -f 1754/257/1137 1755/258/1138 1752/255/1135 -f 1756/259/1139 1757/260/1140 1752/255/1135 -f 1752/255/1135 1755/258/1138 1756/259/1139 -f 1752/261/1135 1758/262/1141 1759/263/1142 -f 1759/263/1142 1753/264/1136 1752/261/1135 -f 1757/265/1140 1760/266/1143 1758/262/1141 -f 1758/262/1141 1752/261/1135 1757/265/1140 -f 1758/267/1141 1761/268/1144 1762/269/1145 -f 1762/269/1145 1759/270/1142 1758/267/1141 -f 1763/271/1146 1761/268/1144 1758/267/1141 -f 1758/267/1141 1760/272/1143 1763/271/1146 -f 1755/261/1138 1754/264/1137 1762/263/1145 -f 1762/263/1145 1761/262/1144 1755/261/1138 -f 1756/265/1139 1755/261/1138 1761/262/1144 -f 1761/262/1144 1763/266/1146 1756/265/1139 -f 1764/616/1093 1765/617/1094 1766/618/1095 -f 1766/618/1095 1767/619/1096 1764/616/1093 -f 1768/620/1097 1764/621/1093 1767/622/1096 -f 1767/622/1096 1769/623/1098 1768/620/1097 -f 1770/624/1099 1768/620/1097 1769/623/1098 -f 1769/623/1098 1771/625/1115 1770/624/1099 -f 1772/626/1116 1770/624/1099 1771/625/1115 -f 1771/625/1115 1773/627/1129 1772/626/1116 -f 1765/617/1094 1772/626/1116 1773/627/1129 -f 1773/627/1129 1766/618/1095 1765/617/1094 -f 1774/640/1147 1775/641/1148 1776/642/1149 -f 1776/642/1149 1777/643/1150 1774/640/1147 -f 1778/644/1151 1775/645/1148 1774/646/1147 -f 1774/646/1147 1779/647/295 1778/644/1151 -f 1780/648/1152 1781/649/1153 1782/650/1154 -f 1782/650/1154 1783/651/1155 1780/648/1152 -f 1784/652/1156 1785/653/1157 1780/648/1152 -f 1780/648/1152 1783/651/1155 1784/652/1156 -f 1775/641/1148 1783/654/1155 1782/655/1154 -f 1782/655/1154 1776/642/1149 1775/641/1148 -f 1784/656/1156 1783/657/1155 1775/645/1148 -f 1775/645/1148 1778/644/1151 1784/656/1156 -f 1786/658/1158 1781/659/1153 1787/660/1159 -f 1787/660/1159 1788/661/1160 1786/658/1158 -f 1781/662/1153 1780/663/1152 1789/664/1161 -f 1789/664/1161 1787/665/1159 1781/662/1153 -f 1790/666/1162 1791/667/1163 1792/668/1164 -f 1792/668/1164 1793/669/1165 1790/666/1162 -f 1794/670/1166 1795/671/1167 1796/672/93 -f 1796/672/93 1797/673/93 1794/670/1166 -f 1786/674/1158 1798/675/1168 1799/676/1169 -f 1799/676/1169 1800/677/1170 1786/674/1158 -f 1800/678/1170 1799/679/1169 1795/671/1167 -f 1795/671/1167 1794/670/1166 1800/678/1170 -f 1785/680/1157 1801/681/1171 1802/682/1172 -f 1802/682/1172 1803/683/1173 1785/680/1157 -f 1804/684/1151 1778/644/1151 1779/647/295 -f 1779/647/295 1805/685/295 1804/684/1151 -f 1801/686/1171 1785/653/1157 1784/652/1156 -f 1784/652/1156 1806/687/1174 1801/686/1171 -f 1806/688/1174 1784/656/1156 1778/644/1151 -f 1778/644/1151 1804/684/1151 1806/688/1174 -f 1798/689/1168 1786/658/1158 1788/661/1160 -f 1788/661/1160 1807/690/1175 1798/689/1168 -f 1808/666/1176 1809/667/1177 1810/668/1178 -f 1810/668/1178 1811/669/1179 1808/666/1176 -f 1777/691/1150 1776/692/1149 1794/670/1166 -f 1794/670/1166 1797/673/93 1777/691/1150 -f 1781/649/1153 1786/674/1158 1800/677/1170 -f 1800/677/1170 1782/650/1154 1781/649/1153 -f 1776/692/1149 1782/693/1154 1800/678/1170 -f 1800/678/1170 1794/670/1166 1776/692/1149 -f 1789/694/1161 1780/695/1152 1785/680/1157 -f 1785/680/1157 1803/683/1173 1789/694/1161 -f 1812/696/1180 1813/697/1181 1807/698/1175 -f 1807/698/1175 1788/699/1160 1812/696/1180 -f 1807/698/1175 1813/697/1181 1814/700/1182 -f 1815/701/1183 1816/702/1184 1787/703/1159 -f 1787/703/1159 1789/704/1161 1815/701/1183 -f 1817/705/1185 1815/701/1183 1789/704/1161 -f 1789/704/1161 1803/706/1173 1817/705/1185 -f 1788/699/1160 1818/707/1186 1819/708/1187 -f 1790/709/1162 1793/710/1165 1813/711/1181 -f 1813/711/1181 1812/712/1180 1790/709/1162 -f 1820/713/1188 1791/714/1163 1790/709/1162 -f 1790/709/1162 1812/712/1180 1820/713/1188 -f 1821/715/1189 1792/716/1164 1791/714/1163 -f 1791/714/1163 1820/713/1188 1821/715/1189 -f 1793/717/1165 1792/716/1164 1821/715/1189 -f 1821/715/1189 1813/718/1181 1793/717/1165 -f 1808/713/1176 1811/715/1179 1818/716/1186 -f 1818/716/1186 1816/714/1184 1808/713/1176 -f 1815/709/1183 1809/712/1177 1808/713/1176 -f 1808/713/1176 1816/714/1184 1815/709/1183 -f 1817/710/1185 1810/711/1178 1809/712/1177 -f 1809/712/1177 1815/709/1183 1817/710/1185 -f 1811/715/1179 1810/718/1178 1817/717/1185 -f 1817/717/1185 1818/716/1186 1811/715/1179 -f 1822/719/1190 1819/708/1187 1818/707/1186 -f 1818/707/1186 1817/705/1185 1822/719/1190 -f 1820/720/1188 1812/696/1180 1819/708/1187 -f 1819/708/1187 1822/719/1190 1820/720/1188 -f 1821/721/1189 1802/722/1172 1814/700/1182 -f 1814/700/1182 1813/697/1181 1821/721/1189 -f 1803/706/1173 1820/720/1188 1822/719/1190 -f 1816/702/1184 1818/707/1186 1788/699/1160 -f 1788/699/1160 1787/703/1159 1816/702/1184 -f 1819/708/1187 1812/696/1180 1788/699/1160 -f 1821/721/1189 1820/720/1188 1803/706/1173 -f 1803/706/1173 1802/722/1172 1821/721/1189 -f 1822/719/1190 1817/705/1185 1803/706/1173 -f 1823/642/1191 1824/641/1192 1825/640/1193 -f 1825/640/1193 1826/643/1194 1823/642/1191 -f 1827/644/1151 1828/647/295 1825/646/1193 -f 1825/646/1193 1824/645/1192 1827/644/1151 -f 1829/648/1195 1830/651/1196 1831/650/1197 -f 1831/650/1197 1832/649/1198 1829/648/1195 -f 1829/648/1195 1833/653/1199 1834/652/1200 -f 1834/652/1200 1830/651/1196 1829/648/1195 -f 1831/655/1197 1830/654/1196 1824/641/1192 -f 1824/641/1192 1823/642/1191 1831/655/1197 -f 1834/656/1200 1827/644/1151 1824/645/1192 -f 1824/645/1192 1830/657/1196 1834/656/1200 -f 1835/658/1201 1836/661/1202 1837/660/1203 -f 1837/660/1203 1832/659/1198 1835/658/1201 -f 1832/662/1198 1837/665/1203 1838/664/1204 -f 1838/664/1204 1829/663/1195 1832/662/1198 -f 1839/668/1205 1840/667/1206 1841/666/1207 -f 1841/666/1207 1842/669/1208 1839/668/1205 -f 1843/670/1166 1844/673/93 1796/672/93 -f 1796/672/93 1795/671/1167 1843/670/1166 -f 1835/674/1201 1845/677/1209 1799/676/1210 -f 1799/676/1210 1798/675/1211 1835/674/1201 -f 1845/678/1209 1843/670/1166 1795/671/1167 -f 1795/671/1167 1799/679/1210 1845/678/1209 -f 1833/680/1199 1846/683/1212 1802/682/1213 -f 1802/682/1213 1801/681/1214 1833/680/1199 -f 1804/684/1151 1805/685/295 1828/647/295 -f 1828/647/295 1827/644/1151 1804/684/1151 -f 1801/686/1214 1806/687/1215 1834/652/1200 -f 1834/652/1200 1833/653/1199 1801/686/1214 -f 1806/688/1215 1804/684/1151 1827/644/1151 -f 1827/644/1151 1834/656/1200 1806/688/1215 -f 1798/689/1211 1807/690/1216 1836/661/1202 -f 1836/661/1202 1835/658/1201 1798/689/1211 -f 1847/668/1217 1848/667/1218 1849/666/1219 -f 1849/666/1219 1850/669/1220 1847/668/1217 -f 1843/670/1166 1823/692/1191 1826/691/1194 -f 1826/691/1194 1844/673/93 1843/670/1166 -f 1832/649/1198 1831/650/1197 1845/677/1209 -f 1845/677/1209 1835/674/1201 1832/649/1198 -f 1845/678/1209 1831/693/1197 1823/692/1191 -f 1823/692/1191 1843/670/1166 1845/678/1209 -f 1833/680/1199 1829/695/1195 1838/694/1204 -f 1838/694/1204 1846/683/1212 1833/680/1199 -f 1851/696/1221 1836/699/1202 1807/698/1216 -f 1807/698/1216 1852/697/1222 1851/696/1221 -f 1852/697/1222 1807/698/1216 1814/700/1223 -f 1853/701/1224 1838/704/1204 1837/703/1203 -f 1837/703/1203 1854/702/1225 1853/701/1224 -f 1855/705/1226 1846/706/1212 1838/704/1204 -f 1838/704/1204 1853/701/1224 1855/705/1226 -f 1856/707/1227 1836/699/1202 1857/708/1228 -f 1841/709/1207 1851/712/1221 1852/711/1222 -f 1852/711/1222 1842/710/1208 1841/709/1207 -f 1841/709/1207 1840/714/1206 1858/713/1229 -f 1858/713/1229 1851/712/1221 1841/709/1207 -f 1840/714/1206 1839/716/1205 1859/715/1230 -f 1859/715/1230 1858/713/1229 1840/714/1206 -f 1842/717/1208 1852/718/1222 1859/715/1230 -f 1859/715/1230 1839/716/1205 1842/717/1208 -f 1849/713/1219 1854/714/1225 1856/716/1227 -f 1856/716/1227 1850/715/1220 1849/713/1219 -f 1849/713/1219 1848/712/1218 1853/709/1224 -f 1853/709/1224 1854/714/1225 1849/713/1219 -f 1848/712/1218 1847/711/1217 1855/710/1226 -f 1855/710/1226 1853/709/1224 1848/712/1218 -f 1850/715/1220 1856/716/1227 1855/717/1226 -f 1855/717/1226 1847/718/1217 1850/715/1220 -f 1860/719/1231 1855/705/1226 1856/707/1227 -f 1856/707/1227 1857/708/1228 1860/719/1231 -f 1858/720/1229 1860/719/1231 1857/708/1228 -f 1857/708/1228 1851/696/1221 1858/720/1229 -f 1814/700/1223 1802/722/1213 1859/721/1230 -f 1859/721/1230 1852/697/1222 1814/700/1223 -f 1858/720/1229 1846/706/1212 1860/719/1231 -f 1854/702/1225 1837/703/1203 1836/699/1202 -f 1836/699/1202 1856/707/1227 1854/702/1225 -f 1851/696/1221 1857/708/1228 1836/699/1202 -f 1859/721/1230 1802/722/1213 1846/706/1212 -f 1846/706/1212 1858/720/1229 1859/721/1230 -f 1855/705/1226 1860/719/1231 1846/706/1212 -f 1861/723/1232 1862/724/1233 1863/725/1234 -f 1862/726/1233 1864/727/1235 1863/728/1234 -f 1864/727/1235 1865/729/1236 1863/728/1234 -f 1865/729/1236 1866/730/1237 1863/728/1234 -f 1866/730/1237 1867/731/1238 1863/728/1234 -f 1867/732/1238 1868/733/1239 1863/725/1234 -f 1868/733/1239 1869/734/1240 1863/725/1234 -f 1869/734/1240 1861/723/1232 1863/725/1234 -f 1870/735/1241 1862/724/1233 1861/723/1232 -f 1861/723/1232 1871/736/1242 1870/735/1241 -f 1872/737/1243 1865/729/1236 1864/727/1235 -f 1864/727/1235 1873/738/1244 1872/737/1243 -f 1874/739/1245 1866/730/1237 1865/729/1236 -f 1865/729/1236 1872/737/1243 1874/739/1245 -f 1875/740/1246 1867/731/1238 1866/730/1237 -f 1866/730/1237 1874/739/1245 1875/740/1246 -f 1876/741/424 1868/733/1239 1867/732/1238 -f 1867/732/1238 1875/742/1246 1876/741/424 -f 1877/743/1247 1869/734/1240 1868/733/1239 -f 1868/733/1239 1876/741/424 1877/743/1247 -f 1871/736/1242 1861/723/1232 1869/734/1240 -f 1869/734/1240 1877/743/1247 1871/736/1242 -f 1878/744/1248 1870/735/1241 1871/736/1242 -f 1871/736/1242 1879/745/1249 1878/744/1248 -f 1880/746/1250 1872/737/1243 1873/738/1244 -f 1873/738/1244 1881/747/1251 1880/746/1250 -f 1882/748/1252 1874/739/1245 1872/737/1243 -f 1872/737/1243 1880/746/1250 1882/748/1252 -f 1883/749/1253 1875/740/1246 1874/739/1245 -f 1874/739/1245 1882/748/1252 1883/749/1253 -f 1884/750/1254 1876/741/424 1875/742/1246 -f 1875/742/1246 1883/751/1253 1884/750/1254 -f 1885/752/1255 1877/743/1247 1876/741/424 -f 1876/741/424 1884/750/1254 1885/752/1255 -f 1879/745/1249 1871/736/1242 1877/743/1247 -f 1877/743/1247 1885/752/1255 1879/745/1249 -f 1878/744/1248 1879/745/1249 1886/753/1256 -f 1881/747/1251 1878/754/1248 1886/755/1256 -f 1880/746/1250 1881/747/1251 1886/755/1256 -f 1882/748/1252 1880/746/1250 1886/755/1256 -f 1883/749/1253 1882/748/1252 1886/755/1256 -f 1884/750/1254 1883/751/1253 1886/753/1256 -f 1885/752/1255 1884/750/1254 1886/753/1256 -f 1879/745/1249 1885/752/1255 1886/753/1256 -f 1887/723/1232 1888/724/1233 1889/725/1234 -f 1888/726/1233 1890/727/1235 1889/728/1234 -f 1890/727/1235 1891/729/1236 1889/728/1234 -f 1891/729/1236 1892/730/1237 1889/728/1234 -f 1892/730/1237 1893/731/1238 1889/728/1234 -f 1893/732/1238 1894/733/1239 1889/725/1234 -f 1894/733/1239 1895/734/1240 1889/725/1234 -f 1895/734/1240 1887/723/1232 1889/725/1234 -f 1896/735/1241 1888/724/1233 1887/723/1232 -f 1887/723/1232 1897/736/1242 1896/735/1241 -f 1898/737/1243 1891/729/1236 1890/727/1235 -f 1890/727/1235 1899/738/1244 1898/737/1243 -f 1900/739/1245 1892/730/1237 1891/729/1236 -f 1891/729/1236 1898/737/1243 1900/739/1245 -f 1901/740/1246 1893/731/1238 1892/730/1237 -f 1892/730/1237 1900/739/1245 1901/740/1246 -f 1902/741/424 1894/733/1239 1893/732/1238 -f 1893/732/1238 1901/742/1246 1902/741/424 -f 1903/743/1247 1895/734/1240 1894/733/1239 -f 1894/733/1239 1902/741/424 1903/743/1247 -f 1897/736/1242 1887/723/1232 1895/734/1240 -f 1895/734/1240 1903/743/1247 1897/736/1242 -f 1904/744/1248 1896/735/1241 1897/736/1242 -f 1897/736/1242 1905/745/1249 1904/744/1248 -f 1906/746/1250 1898/737/1243 1899/738/1244 -f 1899/738/1244 1907/747/1251 1906/746/1250 -f 1908/748/1252 1900/739/1245 1898/737/1243 -f 1898/737/1243 1906/746/1250 1908/748/1252 -f 1909/749/1253 1901/740/1246 1900/739/1245 -f 1900/739/1245 1908/748/1252 1909/749/1253 -f 1910/750/1254 1902/741/424 1901/742/1246 -f 1901/742/1246 1909/751/1253 1910/750/1254 -f 1911/752/1255 1903/743/1247 1902/741/424 -f 1902/741/424 1910/750/1254 1911/752/1255 -f 1905/745/1249 1897/736/1242 1903/743/1247 -f 1903/743/1247 1911/752/1255 1905/745/1249 -f 1904/744/1248 1905/745/1249 1912/753/1256 -f 1907/747/1251 1904/754/1248 1912/755/1256 -f 1906/746/1250 1907/747/1251 1912/755/1256 -f 1908/748/1252 1906/746/1250 1912/755/1256 -f 1909/749/1253 1908/748/1252 1912/755/1256 -f 1910/750/1254 1909/751/1253 1912/753/1256 -f 1911/752/1255 1910/750/1254 1912/753/1256 -f 1905/745/1249 1911/752/1255 1912/753/1256 -f 1913/723/1232 1914/724/1233 1915/725/1234 -f 1914/726/1233 1916/727/1235 1915/728/1234 -f 1916/727/1235 1917/729/1236 1915/728/1234 -f 1917/729/1236 1918/730/1237 1915/728/1234 -f 1918/730/1237 1919/731/1238 1915/728/1234 -f 1919/732/1238 1920/733/1239 1915/725/1234 -f 1920/733/1239 1921/734/1240 1915/725/1234 -f 1921/734/1240 1913/723/1232 1915/725/1234 -f 1922/735/1241 1914/724/1233 1913/723/1232 -f 1913/723/1232 1923/736/1242 1922/735/1241 -f 1924/737/1243 1917/729/1236 1916/727/1235 -f 1916/727/1235 1925/738/1244 1924/737/1243 -f 1926/739/1245 1918/730/1237 1917/729/1236 -f 1917/729/1236 1924/737/1243 1926/739/1245 -f 1927/740/1246 1919/731/1238 1918/730/1237 -f 1918/730/1237 1926/739/1245 1927/740/1246 -f 1928/741/424 1920/733/1239 1919/732/1238 -f 1919/732/1238 1927/742/1246 1928/741/424 -f 1929/743/1247 1921/734/1240 1920/733/1239 -f 1920/733/1239 1928/741/424 1929/743/1247 -f 1923/736/1242 1913/723/1232 1921/734/1240 -f 1921/734/1240 1929/743/1247 1923/736/1242 -f 1930/744/1248 1922/735/1241 1923/736/1242 -f 1923/736/1242 1931/745/1249 1930/744/1248 -f 1932/746/1250 1924/737/1243 1925/738/1244 -f 1925/738/1244 1933/747/1251 1932/746/1250 -f 1934/748/1252 1926/739/1245 1924/737/1243 -f 1924/737/1243 1932/746/1250 1934/748/1252 -f 1935/749/1253 1927/740/1246 1926/739/1245 -f 1926/739/1245 1934/748/1252 1935/749/1253 -f 1936/750/1254 1928/741/424 1927/742/1246 -f 1927/742/1246 1935/751/1253 1936/750/1254 -f 1937/752/1255 1929/743/1247 1928/741/424 -f 1928/741/424 1936/750/1254 1937/752/1255 -f 1931/745/1249 1923/736/1242 1929/743/1247 -f 1929/743/1247 1937/752/1255 1931/745/1249 -f 1930/744/1248 1931/745/1249 1938/753/1256 -f 1933/747/1251 1930/754/1248 1938/755/1256 -f 1932/746/1250 1933/747/1251 1938/755/1256 -f 1934/748/1252 1932/746/1250 1938/755/1256 -f 1935/749/1253 1934/748/1252 1938/755/1256 -f 1936/750/1254 1935/751/1253 1938/753/1256 -f 1937/752/1255 1936/750/1254 1938/753/1256 -f 1931/745/1249 1937/752/1255 1938/753/1256 -f 1939/756/1257 1940/757/1258 1941/758/1259 -f 1940/757/1258 1942/759/1260 1941/758/1259 -f 1942/759/1260 1943/760/1261 1941/758/1259 -f 1943/760/1261 1944/761/1262 1941/758/1259 -f 1944/761/1262 1945/762/1263 1941/758/1259 -f 1945/762/1263 1946/763/1264 1941/758/1259 -f 1946/763/1264 1947/764/1265 1941/758/1259 -f 1947/764/1265 1939/756/1257 1941/758/1259 -f 1948/765/1266 1940/766/1258 1939/767/1257 -f 1939/767/1257 1949/768/1267 1948/765/1266 -f 1950/769/1268 1942/770/1260 1940/766/1258 -f 1940/766/1258 1948/765/1266 1950/769/1268 -f 1951/771/1269 1943/772/1261 1942/770/1260 -f 1942/770/1260 1950/769/1268 1951/771/1269 -f 1952/773/1270 1944/774/1262 1943/772/1261 -f 1943/772/1261 1951/771/1269 1952/773/1270 -f 1953/775/1271 1945/776/1263 1944/774/1262 -f 1944/774/1262 1952/773/1270 1953/775/1271 -f 1954/777/1272 1946/778/1264 1945/779/1263 -f 1945/779/1263 1953/780/1271 1954/777/1272 -f 1955/781/1273 1947/782/1265 1946/778/1264 -f 1946/778/1264 1954/777/1272 1955/781/1273 -f 1949/768/1267 1939/767/1257 1947/782/1265 -f 1947/782/1265 1955/781/1273 1949/768/1267 -f 1950/783/1268 1948/784/1266 1951/785/1269 -f 1954/786/1272 1953/787/1271 1955/788/1273 -f 1953/787/1271 1952/789/1270 1949/790/1267 -f 1949/790/1267 1955/788/1273 1953/787/1271 -f 1952/789/1270 1951/785/1269 1948/784/1266 -f 1948/784/1266 1949/790/1267 1952/789/1270 -f 1956/791/1274 1957/792/1275 1958/793/1276 -f 1958/793/1276 1959/794/1277 1956/791/1274 -f 1960/795/1278 1961/796/1279 1956/791/1274 -f 1956/791/1274 1959/794/1277 1960/795/1278 -f 1962/797/1280 1963/798/1281 1961/796/1279 -f 1961/796/1279 1960/795/1278 1962/797/1280 -f 1957/792/1275 1963/799/1281 1962/800/1280 -f 1962/800/1280 1958/793/1276 1957/792/1275 -f 1964/801/1282 1957/792/1275 1956/791/1274 -f 1956/791/1274 1965/802/1283 1964/801/1282 -f 1966/803/1284 1965/802/1283 1956/791/1274 -f 1956/791/1274 1961/796/1279 1966/803/1284 -f 1967/804/1285 1966/803/1284 1961/796/1279 -f 1961/796/1279 1963/798/1281 1967/804/1285 -f 1967/805/1285 1963/799/1281 1957/792/1275 -f 1957/792/1275 1964/801/1282 1967/805/1285 -f 1968/806/1286 1969/807/1287 1970/808/1288 -f 1970/808/1288 1971/809/1289 1968/806/1286 -f 1972/810/1290 1973/811/1291 1968/806/1286 -f 1968/806/1286 1971/809/1289 1972/810/1290 -f 1974/812/1292 1975/813/1293 1973/814/1291 -f 1973/814/1291 1972/815/1290 1974/812/1292 -f 1969/807/1287 1975/813/1293 1974/812/1292 -f 1974/812/1292 1970/808/1288 1969/807/1287 -f 1976/816/1294 1969/807/1287 1968/806/1286 -f 1968/806/1286 1977/817/1295 1976/816/1294 -f 1978/818/1296 1977/817/1295 1968/806/1286 -f 1968/806/1286 1973/811/1291 1978/818/1296 -f 1979/819/1297 1978/820/1296 1973/814/1291 -f 1973/814/1291 1975/813/1293 1979/819/1297 -f 1979/819/1297 1975/813/1293 1969/807/1287 -f 1969/807/1287 1976/816/1294 1979/819/1297 -f 1980/791/1298 1981/794/1299 1982/793/1300 -f 1982/793/1300 1983/792/1301 1980/791/1298 -f 1980/791/1298 1984/796/1302 1985/795/1303 -f 1985/795/1303 1981/794/1299 1980/791/1298 -f 1984/796/1302 1986/798/1304 1987/797/1305 -f 1987/797/1305 1985/795/1303 1984/796/1302 -f 1983/792/1301 1982/793/1300 1987/800/1305 -f 1987/800/1305 1986/799/1304 1983/792/1301 -f 1988/801/1306 1989/802/1307 1980/791/1298 -f 1980/791/1298 1983/792/1301 1988/801/1306 -f 1980/791/1298 1989/802/1307 1990/803/1308 -f 1990/803/1308 1984/796/1302 1980/791/1298 -f 1984/796/1302 1990/803/1308 1991/804/1309 -f 1991/804/1309 1986/798/1304 1984/796/1302 -f 1991/805/1309 1988/801/1306 1983/792/1301 -f 1983/792/1301 1986/799/1304 1991/805/1309 -f 1992/640/1310 1993/641/1311 1994/642/1312 -f 1994/642/1312 1995/643/1313 1992/640/1310 -f 1996/644/1314 1993/645/1311 1992/646/1310 -f 1992/646/1310 1997/647/1315 1996/644/1314 -f 1998/648/1316 1999/649/1317 2000/650/1318 -f 2000/650/1318 2001/651/1319 1998/648/1316 -f 2002/652/1320 2003/653/1321 1998/648/1316 -f 1998/648/1316 2001/651/1319 2002/652/1320 -f 1993/641/1311 2001/654/1319 2000/655/1318 -f 2000/655/1318 1994/642/1312 1993/641/1311 -f 2002/656/1320 2001/657/1319 1993/645/1311 -f 1993/645/1311 1996/644/1314 2002/656/1320 -f 2004/658/1322 1999/659/1317 2005/660/1323 -f 2005/660/1323 2006/661/1324 2004/658/1322 -f 1999/662/1317 1998/663/1316 2007/664/1325 -f 2007/664/1325 2005/665/1323 1999/662/1317 -f 2008/666/1326 2009/667/1327 2010/668/1328 -f 2010/668/1328 2011/669/1329 2008/666/1326 -f 2012/670/1330 2013/671/1331 2014/672/1332 -f 2014/672/1332 2015/673/431 2012/670/1330 -f 2004/674/1322 2016/675/1333 2017/676/1334 -f 2017/676/1334 2018/677/1335 2004/674/1322 -f 2018/678/1335 2017/679/1334 2013/671/1331 -f 2013/671/1331 2012/670/1330 2018/678/1335 -f 2003/680/1321 2019/681/1336 2020/682/1337 -f 2020/682/1337 2021/683/1338 2003/680/1321 -f 2022/684/1339 1996/644/1314 1997/647/1315 -f 1997/647/1315 2023/685/1315 2022/684/1339 -f 2019/686/1336 2003/653/1321 2002/652/1320 -f 2002/652/1320 2024/687/1340 2019/686/1336 -f 2024/688/1340 2002/656/1320 1996/644/1314 -f 1996/644/1314 2022/684/1339 2024/688/1340 -f 2016/689/1333 2004/658/1322 2006/661/1324 -f 2006/661/1324 2025/690/1341 2016/689/1333 -f 2026/666/1342 2027/667/1343 2028/668/1344 -f 2028/668/1344 2029/669/1345 2026/666/1342 -f 1995/691/1313 1994/692/1312 2012/670/1330 -f 2012/670/1330 2015/673/431 1995/691/1313 -f 1999/649/1317 2004/674/1322 2018/677/1335 -f 2018/677/1335 2000/650/1318 1999/649/1317 -f 1994/692/1312 2000/693/1318 2018/678/1335 -f 2018/678/1335 2012/670/1330 1994/692/1312 -f 2007/694/1325 1998/695/1316 2003/680/1321 -f 2003/680/1321 2021/683/1338 2007/694/1325 -f 2030/696/1346 2031/697/1347 2025/698/1341 -f 2025/698/1341 2006/699/1324 2030/696/1346 -f 2025/698/1341 2031/697/1347 2032/700/1348 -f 2033/701/1349 2034/702/1350 2005/703/1323 -f 2005/703/1323 2007/704/1325 2033/701/1349 -f 2035/705/1351 2033/701/1349 2007/704/1325 -f 2007/704/1325 2021/706/1338 2035/705/1351 -f 2006/699/1324 2036/707/1352 2037/708/1353 -f 2008/709/1326 2011/710/1329 2031/711/1347 -f 2031/711/1347 2030/712/1346 2008/709/1326 -f 2038/713/1354 2009/714/1327 2008/709/1326 -f 2008/709/1326 2030/712/1346 2038/713/1354 -f 2039/715/1355 2010/716/1328 2009/714/1327 -f 2009/714/1327 2038/713/1354 2039/715/1355 -f 2011/717/1329 2010/716/1328 2039/715/1355 -f 2039/715/1355 2031/718/1347 2011/717/1329 -f 2026/713/1342 2029/715/1345 2036/716/1352 -f 2036/716/1352 2034/714/1350 2026/713/1342 -f 2033/709/1349 2027/712/1343 2026/713/1342 -f 2026/713/1342 2034/714/1350 2033/709/1349 -f 2035/710/1351 2028/711/1344 2027/712/1343 -f 2027/712/1343 2033/709/1349 2035/710/1351 -f 2029/715/1345 2028/718/1344 2035/717/1351 -f 2035/717/1351 2036/716/1352 2029/715/1345 -f 2040/719/1356 2037/708/1353 2036/707/1352 -f 2036/707/1352 2035/705/1351 2040/719/1356 -f 2038/720/1354 2030/696/1346 2037/708/1353 -f 2037/708/1353 2040/719/1356 2038/720/1354 -f 2039/721/1355 2020/722/1337 2032/700/1348 -f 2032/700/1348 2031/697/1347 2039/721/1355 -f 2021/706/1338 2038/720/1354 2040/719/1356 -f 2034/702/1350 2036/707/1352 2006/699/1324 -f 2006/699/1324 2005/703/1323 2034/702/1350 -f 2037/708/1353 2030/696/1346 2006/699/1324 -f 2039/721/1355 2038/720/1354 2021/706/1338 -f 2021/706/1338 2020/722/1337 2039/721/1355 -f 2040/719/1356 2035/705/1351 2021/706/1338 -f 2041/642/1357 2042/641/1358 2043/640/1359 -f 2043/640/1359 2044/643/1360 2041/642/1357 -f 2045/644/1361 2046/647/1315 2043/646/1359 -f 2043/646/1359 2042/645/1358 2045/644/1361 -f 2047/648/1362 2048/651/1363 2049/650/1364 -f 2049/650/1364 2050/649/1365 2047/648/1362 -f 2047/648/1362 2051/653/1366 2052/652/1367 -f 2052/652/1367 2048/651/1363 2047/648/1362 -f 2049/655/1364 2048/654/1363 2042/641/1358 -f 2042/641/1358 2041/642/1357 2049/655/1364 -f 2052/656/1367 2045/644/1361 2042/645/1358 -f 2042/645/1358 2048/657/1363 2052/656/1367 -f 2053/658/1368 2054/661/1369 2055/660/1370 -f 2055/660/1370 2050/659/1365 2053/658/1368 -f 2050/662/1365 2055/665/1370 2056/664/1371 -f 2056/664/1371 2047/663/1362 2050/662/1365 -f 2057/668/1372 2058/667/1373 2059/666/1374 -f 2059/666/1374 2060/669/1375 2057/668/1372 -f 2061/670/1376 2062/673/431 2014/672/431 -f 2014/672/431 2013/671/1377 2061/670/1376 -f 2053/674/1368 2063/677/1378 2017/676/1379 -f 2017/676/1379 2016/675/1380 2053/674/1368 -f 2063/678/1378 2061/670/1376 2013/671/1377 -f 2013/671/1377 2017/679/1379 2063/678/1378 -f 2051/680/1366 2064/683/1381 2020/682/1382 -f 2020/682/1382 2019/681/1383 2051/680/1366 -f 2022/684/1384 2023/685/1315 2046/647/1315 -f 2046/647/1315 2045/644/1361 2022/684/1384 -f 2019/686/1383 2024/687/1385 2052/652/1367 -f 2052/652/1367 2051/653/1366 2019/686/1383 -f 2024/688/1385 2022/684/1384 2045/644/1361 -f 2045/644/1361 2052/656/1367 2024/688/1385 -f 2016/689/1380 2025/690/1386 2054/661/1369 -f 2054/661/1369 2053/658/1368 2016/689/1380 -f 2065/668/1387 2066/667/1388 2067/666/1389 -f 2067/666/1389 2068/669/1390 2065/668/1387 -f 2061/670/1376 2041/692/1357 2044/691/1360 -f 2044/691/1360 2062/673/431 2061/670/1376 -f 2050/649/1365 2049/650/1364 2063/677/1378 -f 2063/677/1378 2053/674/1368 2050/649/1365 -f 2063/678/1378 2049/693/1364 2041/692/1357 -f 2041/692/1357 2061/670/1376 2063/678/1378 -f 2051/680/1366 2047/695/1362 2056/694/1371 -f 2056/694/1371 2064/683/1381 2051/680/1366 -f 2069/696/1391 2054/699/1369 2025/698/1386 -f 2025/698/1386 2070/697/1392 2069/696/1391 -f 2070/697/1392 2025/698/1386 2032/700/1393 -f 2071/701/1394 2056/704/1371 2055/703/1370 -f 2055/703/1370 2072/702/1395 2071/701/1394 -f 2073/705/1396 2064/706/1381 2056/704/1371 -f 2056/704/1371 2071/701/1394 2073/705/1396 -f 2074/707/1397 2054/699/1369 2075/708/1398 -f 2059/709/1374 2069/712/1391 2070/711/1392 -f 2070/711/1392 2060/710/1375 2059/709/1374 -f 2059/709/1374 2058/714/1373 2076/713/1399 -f 2076/713/1399 2069/712/1391 2059/709/1374 -f 2058/714/1373 2057/716/1372 2077/715/1400 -f 2077/715/1400 2076/713/1399 2058/714/1373 -f 2060/717/1375 2070/718/1392 2077/715/1400 -f 2077/715/1400 2057/716/1372 2060/717/1375 -f 2067/713/1389 2072/714/1395 2074/716/1397 -f 2074/716/1397 2068/715/1390 2067/713/1389 -f 2067/713/1389 2066/712/1388 2071/709/1394 -f 2071/709/1394 2072/714/1395 2067/713/1389 -f 2066/712/1388 2065/711/1387 2073/710/1396 -f 2073/710/1396 2071/709/1394 2066/712/1388 -f 2068/715/1390 2074/716/1397 2073/717/1396 -f 2073/717/1396 2065/718/1387 2068/715/1390 -f 2078/719/1401 2073/705/1396 2074/707/1397 -f 2074/707/1397 2075/708/1398 2078/719/1401 -f 2076/720/1399 2078/719/1401 2075/708/1398 -f 2075/708/1398 2069/696/1391 2076/720/1399 -f 2032/700/1393 2020/722/1382 2077/721/1400 -f 2077/721/1400 2070/697/1392 2032/700/1393 -f 2076/720/1399 2064/706/1381 2078/719/1401 -f 2072/702/1395 2055/703/1370 2054/699/1369 -f 2054/699/1369 2074/707/1397 2072/702/1395 -f 2069/696/1391 2075/708/1398 2054/699/1369 -f 2077/721/1400 2020/722/1382 2064/706/1381 -f 2064/706/1381 2076/720/1399 2077/721/1400 -f 2073/705/1396 2078/719/1401 2064/706/1381 -f 2079/791/1402 2080/792/1403 2081/793/1404 -f 2081/793/1404 2082/794/1405 2079/791/1402 -f 2083/795/1406 2084/796/1407 2079/791/1402 -f 2079/791/1402 2082/794/1405 2083/795/1406 -f 2085/797/1408 2086/798/1409 2084/796/1407 -f 2084/796/1407 2083/795/1406 2085/797/1408 -f 2080/792/1403 2086/799/1409 2085/800/1408 -f 2085/800/1408 2081/793/1404 2080/792/1403 -f 2087/801/1410 2080/792/1403 2079/791/1402 -f 2079/791/1402 2088/802/1411 2087/801/1410 -f 2089/803/1412 2088/802/1411 2079/791/1402 -f 2079/791/1402 2084/796/1407 2089/803/1412 -f 2090/804/1413 2089/803/1412 2084/796/1407 -f 2084/796/1407 2086/798/1409 2090/804/1413 -f 2090/805/1413 2086/799/1409 2080/792/1403 -f 2080/792/1403 2087/801/1410 2090/805/1413 -f 2091/791/1414 2092/794/1415 2093/793/1416 -f 2093/793/1416 2094/792/1279 2091/791/1414 -f 2091/791/1414 2095/796/1417 2096/795/1418 -f 2096/795/1418 2092/794/1415 2091/791/1414 -f 2095/796/1417 2097/798/1419 2098/797/1420 -f 2098/797/1420 2096/795/1418 2095/796/1417 -f 2094/792/1279 2093/793/1416 2098/800/1420 -f 2098/800/1420 2097/799/1419 2094/792/1279 -f 2099/801/1421 2100/802/1422 2091/791/1414 -f 2091/791/1414 2094/792/1279 2099/801/1421 -f 2091/791/1414 2100/802/1422 2101/803/1423 -f 2101/803/1423 2095/796/1417 2091/791/1414 -f 2095/796/1417 2101/803/1423 2102/804/1424 -f 2102/804/1424 2097/798/1419 2095/796/1417 -f 2102/805/1424 2099/801/1421 2094/792/1279 -f 2094/792/1279 2097/799/1419 2102/805/1424 -f 2103/806/1425 2104/807/1426 2105/808/1427 -f 2105/808/1427 2106/809/1428 2103/806/1425 -f 2107/810/1429 2108/811/1430 2103/806/1425 -f 2103/806/1425 2106/809/1428 2107/810/1429 -f 2109/812/1431 2110/813/1432 2108/814/1430 -f 2108/814/1430 2107/815/1429 2109/812/1431 -f 2104/807/1426 2110/813/1432 2109/812/1431 -f 2109/812/1431 2105/808/1427 2104/807/1426 -f 2111/816/1433 2104/807/1426 2103/806/1425 -f 2103/806/1425 2112/817/1434 2111/816/1433 -f 2113/818/1435 2112/817/1434 2103/806/1425 -f 2103/806/1425 2108/811/1430 2113/818/1435 -f 2114/819/1436 2113/820/1435 2108/814/1430 -f 2108/814/1430 2110/813/1432 2114/819/1436 -f 2114/819/1436 2110/813/1432 2104/807/1426 -f 2104/807/1426 2111/816/1433 2114/819/1436 -# 2914 faces - diff --git a/examples/web/models/resources/models/market_diffuse.png b/examples/web/models/resources/models/market_diffuse.png Binary files differdeleted file mode 100644 index 3ad3046..0000000 --- a/examples/web/models/resources/models/market_diffuse.png +++ /dev/null diff --git a/examples/web/models/resources/models/turret.obj b/examples/web/models/resources/models/turret.obj deleted file mode 100644 index bf7caac..0000000 --- a/examples/web/models/resources/models/turret.obj +++ /dev/null @@ -1,1888 +0,0 @@ -# (c) 2018 Medieval Assets Pack by Alberto Cano -# Licensed as Creative Commons Attribution-NonCommercial 4.0 - -# -# object turret -# - -v 0.0000 13.3010 3.5973 -v 0.0000 12.1596 2.3386 -v 2.5639 12.1596 2.3386 -v 3.4913 13.3010 3.5973 -v 3.5203 14.0462 3.0738 -v 3.9444 14.0450 3.1421 -v 3.9444 14.0369 -0.0000 -v 3.4351 14.0369 -0.0000 -v 3.4352 14.0462 2.9719 -v 3.3643 13.3303 2.9127 -v 0.0000 13.3303 2.9127 -v 0.0000 13.3010 2.9740 -v 3.4352 13.3010 2.9740 -v 0.0000 14.0462 2.9719 -v 3.9444 13.2918 -0.0000 -v 3.9444 13.2998 3.1441 -v 3.4913 14.0462 3.5952 -v 3.3643 13.3303 -0.0000 -v 0.0000 13.3303 -0.0000 -v 0.0000 14.0462 3.5952 -v 2.5639 12.1504 -0.0000 -v 3.4352 13.2918 -0.0000 -v 3.5237 14.9316 3.0740 -v 3.9478 14.9305 3.1422 -v 3.4947 14.9316 3.5953 -v 3.5271 16.4764 1.4274 -v 3.9512 16.4752 1.4274 -v 3.9512 15.9080 2.0774 -v 3.5271 15.9092 2.0092 -v 1.8327 16.4815 3.5953 -v 1.8617 16.4815 3.0742 -v 2.5117 15.9086 3.0742 -v 2.4725 15.9086 3.5953 -v 3.9512 16.4757 3.1424 -v 3.4981 16.4769 3.5955 -v 3.5271 16.4769 3.0742 -v 2.5639 12.1596 -2.3386 -v 0.0000 12.1596 -2.3386 -v 0.0000 13.3010 -3.5973 -v 3.4913 13.3010 -3.5973 -v 3.5203 14.0462 -3.0738 -v 3.4351 14.0462 -2.9720 -v 3.9444 14.0450 -3.1421 -v 0.0000 13.3010 -2.9740 -v 0.0000 13.3303 -2.9127 -v 3.3643 13.3303 -2.9127 -v 3.4352 13.3010 -2.9740 -v 0.0000 14.0462 -2.9719 -v 3.9444 13.2998 -3.1441 -v 3.4913 14.0462 -3.5952 -v 0.0000 14.0462 -3.5952 -v 3.9478 14.9305 -3.1422 -v 3.5237 14.9316 -3.0740 -v 3.4947 14.9316 -3.5953 -v 3.9512 15.9080 -2.0774 -v 3.9512 16.4752 -1.4274 -v 3.5271 16.4764 -1.4274 -v 3.5271 15.9092 -2.0092 -v 2.5117 15.9086 -3.0742 -v 1.8617 16.4815 -3.0742 -v 1.8327 16.4815 -3.5954 -v 2.4725 15.9086 -3.5953 -v 3.4981 16.4769 -3.5955 -v 3.9512 16.4757 -3.1424 -v 3.5271 16.4769 -3.0742 -v -2.5639 12.1596 2.3386 -v -3.4913 13.3010 3.5973 -v -3.5203 14.0462 3.0738 -v -3.4351 14.0462 2.9720 -v -3.4351 14.0369 0.0000 -v -3.9444 14.0369 0.0000 -v -3.9444 14.0450 3.1421 -v -3.3643 13.3303 2.9127 -v -3.4351 13.3010 2.9740 -v -3.9444 13.2918 0.0000 -v -3.9444 13.2998 3.1441 -v -3.4913 14.0462 3.5952 -v -3.3643 13.3303 0.0000 -v -2.5639 12.1504 0.0000 -v -3.4351 13.2918 0.0000 -v -3.9478 14.9305 3.1422 -v -3.5237 14.9316 3.0740 -v -3.4947 14.9316 3.5954 -v -3.9512 15.9080 2.0774 -v -3.9512 16.4752 1.4274 -v -3.5271 16.4764 1.4274 -v -3.5271 15.9092 2.0092 -v -2.5117 15.9086 3.0742 -v -1.8617 16.4815 3.0742 -v -1.8327 16.4815 3.5954 -v -2.4725 15.9086 3.5953 -v -3.4981 16.4769 3.5955 -v -3.9512 16.4757 3.1424 -v -3.5271 16.4769 3.0742 -v -2.5639 12.1596 -2.3386 -v -3.4913 13.3010 -3.5972 -v -3.5203 14.0462 -3.0738 -v -3.9444 14.0450 -3.1421 -v -3.4351 14.0462 -2.9719 -v -3.3643 13.3303 -2.9127 -v -3.4351 13.3010 -2.9740 -v -3.9444 13.2998 -3.1441 -v -3.4913 14.0462 -3.5952 -v -3.5237 14.9316 -3.0740 -v -3.9478 14.9305 -3.1422 -v -3.4947 14.9316 -3.5953 -v -3.5271 16.4764 -1.4274 -v -3.9512 16.4752 -1.4274 -v -3.9512 15.9080 -2.0774 -v -3.5271 15.9092 -2.0092 -v -1.8327 16.4815 -3.5953 -v -1.8617 16.4815 -3.0742 -v -2.5117 15.9086 -3.0742 -v -2.4725 15.9086 -3.5953 -v -3.9512 16.4757 -3.1424 -v -3.4981 16.4769 -3.5955 -v -3.5271 16.4769 -3.0742 -v 0.1550 14.0277 -3.1544 -v 0.1550 14.0277 -3.5335 -v 0.1550 16.9018 -3.5335 -v 0.1550 16.9018 -3.1544 -v -0.5341 14.0277 -3.5335 -v -0.5341 16.9018 -3.5335 -v -0.5341 14.0277 -3.1544 -v -0.5341 16.9018 -3.1544 -v -3.5170 14.0277 -0.3456 -v -3.8961 14.0277 -0.3456 -v -3.8961 16.9018 -0.3456 -v -3.5170 16.9018 -0.3456 -v -3.8961 14.0277 0.3435 -v -3.8961 16.9018 0.3435 -v -3.5170 14.0277 0.3435 -v -3.5170 16.9018 0.3435 -v -0.3446 14.0277 3.1662 -v -0.3446 14.0277 3.5453 -v -0.3446 16.9018 3.5453 -v -0.3446 16.9018 3.1662 -v 0.3445 14.0277 3.5453 -v 0.3445 16.9018 3.5453 -v 0.3445 14.0277 3.1662 -v 0.3445 16.9018 3.1662 -v 3.5160 14.0277 0.3435 -v 3.8951 14.0277 0.3435 -v 3.8951 16.9018 0.3435 -v 3.5160 16.9018 0.3435 -v 3.8951 14.0277 -0.3456 -v 3.8951 16.9018 -0.3456 -v 3.5160 14.0277 -0.3456 -v 3.5160 16.9018 -0.3456 -v 0.0000 8.6187 2.3766 -v 0.4715 8.6467 2.3766 -v 0.4598 9.7167 2.3896 -v -0.0117 10.0591 2.3896 -v 0.8403 8.5183 2.4160 -v 0.8403 8.5183 2.3077 -v 0.8403 8.6724 2.3077 -v 0.8403 8.6724 2.4160 -v 0.7068 9.8138 2.4290 -v 0.7068 9.8138 2.3207 -v -0.0117 10.3117 2.3207 -v -0.0117 10.3117 2.4290 -v -0.8403 8.6724 2.4160 -v -0.8403 8.6724 2.3077 -v -0.8403 8.5183 2.3077 -v -0.8403 8.5183 2.4160 -v -0.7186 8.5183 2.4160 -v -0.7186 8.5183 2.3077 -v -0.0000 8.4646 2.3077 -v -0.0000 8.4646 2.4160 -v 0.7185 8.5183 2.5347 -v 0.7185 8.6724 2.5347 -v 0.4715 8.6467 2.5347 -v 0.4598 9.7167 2.4290 -v -0.0117 10.0591 2.4290 -v -0.7186 8.6724 2.5347 -v -0.7186 8.5183 2.5347 -v -0.4715 8.6567 2.5347 -v -0.0000 8.4646 2.5347 -v -0.0000 8.6187 2.5347 -v -0.4833 9.7167 2.3896 -v -0.4715 8.6567 2.3766 -v -0.7303 9.8138 2.3207 -v -0.7302 9.8138 2.4290 -v 0.7185 8.5183 2.3077 -v 0.7185 8.5183 2.4160 -v -0.4832 9.7167 2.4290 -v 0.4715 8.6467 2.4160 -v -0.4716 8.6567 2.4160 -v -0.0000 8.6187 2.4160 -v -0.7186 8.6724 2.4160 -v -0.7186 8.6724 2.3077 -v 0.7185 8.6724 2.4160 -v 0.7185 8.6724 2.3077 -v 0.8403 8.5183 2.5347 -v 0.8403 8.6724 2.5347 -v -0.8403 8.6724 2.5347 -v -0.8403 8.5183 2.5347 -v 2.6080 8.6187 -0.0010 -v 2.6080 8.6467 -0.4725 -v 2.6210 9.7167 -0.4608 -v 2.6210 10.0591 0.0107 -v 2.6474 8.5183 -0.8413 -v 2.5392 8.5183 -0.8413 -v 2.5392 8.6724 -0.8413 -v 2.6474 8.6724 -0.8413 -v 2.6604 9.8138 -0.7079 -v 2.5522 9.8138 -0.7078 -v 2.5522 10.3117 0.0107 -v 2.6604 10.3117 0.0107 -v 2.6474 8.6724 0.8393 -v 2.5392 8.6724 0.8393 -v 2.5392 8.5183 0.8393 -v 2.6474 8.5183 0.8393 -v 2.6474 8.5183 0.7175 -v 2.5392 8.5183 0.7175 -v 2.5392 8.4646 -0.0010 -v 2.6474 8.4646 -0.0010 -v 2.7661 8.5183 -0.7195 -v 2.7661 8.6724 -0.7195 -v 2.7661 8.6467 -0.4725 -v 2.6604 9.7167 -0.4609 -v 2.6604 10.0591 0.0107 -v 2.7661 8.6724 0.7175 -v 2.7661 8.5183 0.7175 -v 2.7661 8.6567 0.4705 -v 2.7661 8.4646 -0.0010 -v 2.7661 8.6187 -0.0010 -v 2.6210 9.7167 0.4822 -v 2.6080 8.6567 0.4705 -v 2.5522 9.8138 0.7292 -v 2.6604 9.8138 0.7292 -v 2.5392 8.5183 -0.7196 -v 2.6474 8.5183 -0.7195 -v 2.6604 9.7167 0.4822 -v 2.6474 8.6467 -0.4725 -v 2.6474 8.6567 0.4705 -v 2.6474 8.6187 -0.0010 -v 2.6474 8.6724 0.7175 -v 2.5392 8.6724 0.7175 -v 2.6474 8.6724 -0.7195 -v 2.5392 8.6724 -0.7196 -v 2.7661 8.5183 -0.8413 -v 2.7661 8.6724 -0.8413 -v 2.7661 8.6724 0.8393 -v 2.7661 8.5183 0.8393 -v -2.6159 8.6187 -0.0010 -v -2.6159 8.6467 0.4705 -v -2.6289 9.7167 0.4588 -v -2.6289 10.0591 -0.0127 -v -2.6553 8.5183 0.8393 -v -2.5470 8.5183 0.8393 -v -2.5470 8.6724 0.8393 -v -2.6553 8.6724 0.8393 -v -2.6683 9.8138 0.7058 -v -2.5600 9.8138 0.7058 -v -2.5600 10.3117 -0.0127 -v -2.6683 10.3117 -0.0127 -v -2.6553 8.6724 -0.8413 -v -2.5470 8.6724 -0.8413 -v -2.5470 8.5183 -0.8413 -v -2.6553 8.5183 -0.8413 -v -2.6553 8.5183 -0.7195 -v -2.5470 8.5183 -0.7195 -v -2.5470 8.4646 -0.0010 -v -2.6553 8.4646 -0.0010 -v -2.7740 8.5183 0.7175 -v -2.7740 8.6724 0.7175 -v -2.7740 8.6467 0.4705 -v -2.6683 9.7167 0.4589 -v -2.6683 10.0591 -0.0127 -v -2.7740 8.6724 -0.7195 -v -2.7740 8.5183 -0.7195 -v -2.7740 8.6567 -0.4725 -v -2.7740 8.4646 -0.0010 -v -2.7740 8.6187 -0.0010 -v -2.6289 9.7167 -0.4843 -v -2.6159 8.6567 -0.4725 -v -2.5600 9.8138 -0.7312 -v -2.6683 9.8138 -0.7312 -v -2.5470 8.5183 0.7175 -v -2.6553 8.5183 0.7175 -v -2.6683 9.7167 -0.4842 -v -2.6553 8.6467 0.4705 -v -2.6553 8.6567 -0.4725 -v -2.6553 8.6187 -0.0010 -v -2.6553 8.6724 -0.7195 -v -2.5470 8.6724 -0.7195 -v -2.6553 8.6724 0.7175 -v -2.5470 8.6724 0.7175 -v -2.7740 8.5183 0.8393 -v -2.7740 8.6724 0.8393 -v -2.7740 8.6724 -0.8413 -v -2.7740 8.5183 -0.8413 -v -2.5639 0.0000 -2.3386 -v -2.5639 0.0000 2.3365 -v -2.5639 12.1411 2.3365 -v 2.5639 -0.0000 2.3365 -v 2.5639 12.1411 2.3365 -v 2.5639 -0.0000 -2.3386 -v -3.3222 12.8680 -0.0010 -v -3.3222 12.8680 -2.9994 -v -3.3222 11.9932 -2.9994 -v -3.3222 11.8321 -0.0010 -v -0.0000 12.8680 2.9974 -v -3.3222 12.8680 2.9974 -v -3.3222 11.9932 2.9974 -v -0.0000 11.8320 2.9974 -v 3.3221 12.8680 -0.0010 -v 3.3221 12.8680 2.9974 -v 3.3221 11.9932 2.9974 -v 3.3221 11.8320 -0.0010 -v -0.0000 12.8680 -2.9994 -v 3.3221 12.8680 -2.9994 -v 3.3221 11.9932 -2.9994 -v -0.0000 11.8320 -2.9994 -v -2.5639 11.9932 -2.3386 -v -0.0000 11.8320 -2.3386 -v 2.5639 11.9932 -2.3386 -v 2.5639 11.8321 -0.0010 -v 2.5639 11.9932 2.3365 -v -0.0000 11.8321 2.3365 -v -2.5639 11.9932 2.3365 -v -2.5639 11.8321 -0.0010 -v -2.5639 12.8680 -2.3386 -v -2.5639 12.8680 -0.0010 -v -2.5639 12.8680 2.3365 -v -0.0000 12.8680 2.3365 -v 2.5639 12.8680 2.3365 -v 2.5639 12.8680 -0.0010 -v 2.5639 12.8680 -2.3386 -v -0.0000 12.8680 -2.3386 -v -3.3222 6.6605 -0.0010 -v -3.3222 6.6605 -2.9994 -v -3.3222 5.7858 -2.9994 -v -3.3222 5.6246 -0.0010 -v -0.0000 6.6605 2.9974 -v -3.3222 6.6605 2.9974 -v -3.3222 5.7858 2.9974 -v -0.0000 5.6246 2.9974 -v 3.3221 6.6605 -0.0010 -v 3.3221 6.6605 2.9974 -v 3.3221 5.7858 2.9974 -v 3.3221 5.6246 -0.0010 -v -0.0000 6.6605 -2.9994 -v 3.3221 6.6605 -2.9994 -v 3.3221 5.7858 -2.9994 -v -0.0000 5.6246 -2.9994 -v -2.5639 5.7858 -2.3386 -v -0.0000 5.6246 -2.3386 -v 2.5639 5.7858 -2.3386 -v 2.5639 5.6246 -0.0010 -v 2.5639 5.7858 2.3365 -v -0.0000 5.6246 2.3365 -v -2.5639 5.7858 2.3365 -v -2.5639 5.6246 -0.0010 -v -2.5639 6.6605 -2.3386 -v -2.5639 6.6605 -0.0010 -v -2.5639 6.6605 2.3365 -v -0.0000 6.6605 2.3365 -v 2.5639 6.6605 2.3365 -v 2.5639 6.6605 -0.0010 -v 2.5639 6.6605 -2.3386 -v -0.0000 6.6605 -2.3386 -v -2.6103 9.3882 2.4561 -v -2.6767 9.3882 1.9558 -v -2.9138 6.4859 1.8341 -v -2.9138 6.4859 2.7406 -v -2.9138 12.2904 1.8341 -v -2.9138 12.2904 2.7406 -v -1.9967 6.4859 2.7406 -v -2.0923 9.3882 2.4561 -v -1.9967 11.6821 2.7406 -v -1.9967 6.4859 1.8341 -v -2.1587 9.3882 1.9558 -v -1.9967 11.6821 1.8341 -v -2.6103 9.4353 -2.4582 -v -2.9138 6.5331 -2.7426 -v -2.9138 6.5331 -1.8362 -v -2.6767 9.4353 -1.9578 -v -2.9138 12.3375 -1.8362 -v -2.9138 12.3375 -2.7426 -v -2.0923 9.4353 -2.4581 -v -1.9967 6.5331 -2.7426 -v -1.9967 11.7293 -2.7426 -v -2.1587 9.4353 -1.9578 -v -1.9967 6.5331 -1.8362 -v -1.9967 11.7293 -1.8362 -v -2.6103 2.9022 -2.4582 -v -2.9138 0.0000 -2.7426 -v -2.9138 0.0000 -1.8362 -v -2.6767 2.9022 -1.9578 -v -2.9138 5.8044 -1.8362 -v -2.9138 5.8044 -2.7426 -v -2.0923 2.9022 -2.4581 -v -1.9967 0.0000 -2.7426 -v -1.9967 6.4231 -2.7426 -v -2.1587 2.9022 -1.9578 -v -1.9967 0.0000 -1.8362 -v -1.9967 6.4231 -1.8362 -v 2.6103 9.4517 2.4561 -v 2.9138 6.5495 2.7406 -v 2.9138 6.5495 1.8341 -v 2.6767 9.4517 1.9558 -v 2.9138 12.3539 1.8341 -v 2.9138 12.3539 2.7406 -v 2.0923 9.4517 2.4561 -v 1.9967 6.5495 2.7406 -v 1.9967 11.7456 2.7406 -v 2.1587 9.4517 1.9558 -v 1.9967 6.5495 1.8341 -v 1.9967 11.7456 1.8341 -v 2.6103 2.9022 -2.4581 -v 2.6767 2.9022 -1.9578 -v 2.9138 -0.0000 -1.8362 -v 2.9138 -0.0000 -2.7426 -v 2.9138 5.8044 -1.8362 -v 2.9138 5.8044 -2.7426 -v 1.9967 -0.0000 -2.7426 -v 2.0923 2.9022 -2.4581 -v 1.9967 6.4231 -2.7426 -v 1.9967 -0.0000 -1.8362 -v 2.1587 2.9022 -1.9578 -v 1.9967 6.4231 -1.8362 -v 2.6103 9.4353 -2.4582 -v 2.6767 9.4353 -1.9578 -v 2.9138 6.5331 -1.8362 -v 2.9138 6.5331 -2.7427 -v 2.9138 12.3375 -1.8362 -v 2.9138 12.3375 -2.7427 -v 1.9967 6.5331 -2.7427 -v 2.0923 9.4353 -2.4581 -v 1.9967 11.7293 -2.7427 -v 1.9967 6.5331 -1.8362 -v 2.1587 9.4353 -1.9578 -v 1.9967 11.7293 -1.8362 -v 2.6103 2.9022 2.4561 -v 2.9138 -0.0000 2.7406 -v 2.9138 -0.0000 1.8341 -v 2.6767 2.9022 1.9558 -v 2.9138 5.8044 1.8341 -v 2.9138 5.8044 2.7406 -v 2.0923 2.9022 2.4561 -v 1.9967 -0.0000 2.7406 -v 1.9967 6.4231 2.7406 -v 2.1587 2.9022 1.9558 -v 1.9967 -0.0000 1.8341 -v 1.9967 6.4231 1.8341 -v -2.6103 2.9022 2.4561 -v -2.6767 2.9022 1.9558 -v -2.9138 0.0000 1.8341 -v -2.9138 0.0000 2.7406 -v -2.9138 5.8044 1.8341 -v -2.9138 5.8044 2.7406 -v -1.9967 0.0000 2.7406 -v -2.0923 2.9022 2.4561 -v -1.9967 6.4231 2.7406 -v -1.9967 0.0000 1.8341 -v -2.1587 2.9022 1.9558 -v -1.9967 6.4231 1.8341 -v -1.5453 5.6703 -3.5469 -v -1.5453 7.5835 -3.4309 -v -0.7727 7.5835 -3.4309 -v -0.7727 4.7854 -3.5469 -v -1.5453 9.4968 -3.2987 -v -0.7727 9.4968 -3.2987 -v -1.5453 11.4101 -3.3804 -v -0.7727 11.4101 -3.3804 -v -1.5453 13.3234 -3.5469 -v -0.7727 13.3234 -3.5469 -v -0.0000 7.5835 -3.4309 -v -0.0000 4.2830 -3.5469 -v -0.0000 9.4968 -3.2987 -v -0.0000 11.4101 -3.3804 -v -0.0000 13.3234 -3.5469 -v 0.7726 7.5835 -3.4309 -v 0.7726 4.7854 -3.5469 -v 0.7726 9.4968 -3.2987 -v 0.7726 11.4101 -3.3804 -v 0.7726 13.3234 -3.5469 -v 1.5453 7.5835 -3.4309 -v 1.5453 5.6702 -3.5469 -v 1.5453 9.4968 -3.2987 -v 1.5453 11.4101 -3.3804 -v 1.5453 13.3234 -3.5469 -v 0.0000 23.5750 -0.0000 -v -4.1897 16.4768 -3.9339 -v -4.1897 16.4768 3.9339 -v 4.1897 16.4768 3.9339 -v 4.1897 16.4768 -3.9339 -v -1.2971 3.7738 -2.1572 -v -1.2971 3.7738 -2.6666 -v -1.7173 3.6544 -2.6666 -v -1.7173 3.6544 -2.1572 -v -1.2971 -0.0000 -2.6666 -v -1.2971 3.3171 -2.6666 -v -1.2971 3.3171 -2.4156 -v -1.2971 -0.0000 -2.4156 -v -1.7173 -0.0000 -2.6666 -v -1.7173 3.3171 -2.6666 -v -1.7173 -0.0000 -2.1572 -v -1.7173 3.3171 -2.1572 -v 1.2970 3.7738 -2.6666 -v 1.2970 3.7738 -2.1572 -v 1.7173 3.6544 -2.1572 -v 1.7173 3.6544 -2.6666 -v 1.2970 -0.0000 -2.4156 -v 1.2970 3.3171 -2.4156 -v 1.2970 3.3171 -2.6666 -v 1.2970 -0.0000 -2.6666 -v 1.7173 -0.0000 -2.6666 -v 1.7173 3.3171 -2.6666 -v 1.7173 3.3171 -2.1572 -v 1.7173 -0.0000 -2.1572 -v -0.0000 4.3176 -2.6666 -v -0.0000 4.3176 -2.1572 -v -0.0000 3.7437 -2.6666 -v -0.0000 3.7437 -2.4156 -v -0.0000 -0.0000 -2.4156 -# 518 vertices - -vn 0.0000 -0.7408 0.6718 -vn 0.0016 1.0000 -0.0028 -vn -0.0000 0.9024 0.4309 -vn 0.0000 -0.0028 -1.0000 -vn 1.0000 0.0000 -0.0000 -vn 0.4189 -0.8046 0.4210 -vn 0.7071 0.0020 0.7071 -vn -0.0000 1.0000 -0.0000 -vn 0.0000 0.0028 1.0000 -vn 0.6366 -0.7712 0.0024 -vn 0.4322 0.9018 -0.0014 -vn -1.0000 -0.0000 0.0000 -vn 0.1589 -0.0004 -0.9873 -vn -0.9985 0.0039 -0.0555 -vn 0.7071 -0.0029 0.7071 -vn 0.0524 -0.7346 -0.6765 -vn -0.6635 -0.7469 -0.0434 -vn 0.7071 -0.0016 0.7071 -vn -1.0000 0.0014 -0.0007 -vn 1.0000 -0.0014 0.0007 -vn 0.1062 -0.7327 -0.6723 -vn -0.0001 -0.0001 1.0000 -vn -0.0000 0.0001 -1.0000 -vn -0.6920 -0.7204 -0.0452 -vn 0.0000 -0.7408 -0.6718 -vn 0.0016 1.0000 0.0028 -vn -0.0000 0.9024 -0.4309 -vn 0.0000 -0.0028 1.0000 -vn 0.4189 -0.8046 -0.4210 -vn 0.7071 0.0020 -0.7071 -vn -0.0000 1.0000 0.0000 -vn -0.0000 0.0028 -1.0000 -vn 0.6366 -0.7712 -0.0024 -vn 0.4322 0.9018 0.0014 -vn 0.1589 -0.0004 0.9873 -vn -0.9985 0.0039 0.0555 -vn 0.7071 -0.0029 -0.7071 -vn 0.0524 -0.7346 0.6765 -vn -0.6635 -0.7469 0.0434 -vn 0.7071 -0.0016 -0.7071 -vn -1.0000 0.0014 0.0007 -vn 1.0000 -0.0014 -0.0007 -vn 0.1062 -0.7327 0.6723 -vn -0.0001 -0.0001 -1.0000 -vn -0.0000 0.0001 1.0000 -vn -0.6920 -0.7204 0.0452 -vn -0.0000 -0.7408 0.6718 -vn -0.0016 1.0000 -0.0028 -vn 0.0000 0.9024 0.4309 -vn -0.0000 -0.0028 -1.0000 -vn -1.0000 0.0000 0.0000 -vn -0.4189 -0.8046 0.4210 -vn -0.7071 0.0020 0.7071 -vn 0.0000 1.0000 -0.0000 -vn -0.6366 -0.7712 0.0024 -vn -0.4322 0.9018 -0.0014 -vn -0.4321 0.9018 -0.0014 -vn 1.0000 -0.0000 -0.0000 -vn -0.1589 -0.0004 -0.9873 -vn 0.9985 0.0039 -0.0555 -vn -0.7071 -0.0029 0.7071 -vn -0.0524 -0.7346 -0.6765 -vn 0.6635 -0.7469 -0.0434 -vn -0.7071 -0.0016 0.7071 -vn 1.0000 0.0014 -0.0007 -vn -1.0000 -0.0014 0.0007 -vn -0.1062 -0.7327 -0.6723 -vn 0.0001 -0.0001 1.0000 -vn 0.0000 0.0001 -1.0000 -vn 0.6920 -0.7204 -0.0452 -vn -0.0000 -0.7408 -0.6718 -vn -0.0016 1.0000 0.0028 -vn 0.0000 0.9024 -0.4309 -vn -0.0000 -0.0028 1.0000 -vn -0.4189 -0.8046 -0.4210 -vn -0.7071 0.0020 -0.7071 -vn 0.0000 1.0000 0.0000 -vn -0.6366 -0.7712 -0.0024 -vn -0.4321 0.9018 0.0014 -vn -0.4322 0.9018 0.0014 -vn -0.1589 -0.0004 0.9873 -vn 0.9985 0.0039 0.0555 -vn -0.7071 -0.0029 -0.7071 -vn -0.0524 -0.7346 0.6765 -vn 0.6635 -0.7469 0.0434 -vn -0.7071 -0.0016 -0.7071 -vn 1.0000 0.0014 0.0007 -vn -1.0000 -0.0014 -0.0007 -vn -0.1062 -0.7327 0.6723 -vn 0.0001 -0.0001 -1.0000 -vn 0.0000 0.0001 1.0000 -vn 0.6920 -0.7204 0.0452 -vn -0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn -0.0035 -0.0104 0.9999 -vn 1.0000 -0.0000 -0.0002 -vn 0.5696 0.8219 -0.0001 -vn -0.0745 -0.9972 0.0000 -vn -0.0000 -0.0000 1.0000 -vn -0.0000 0.0000 1.0000 -vn 0.0033 -0.0104 0.9999 -vn -0.5696 0.8219 0.0001 -vn 0.0745 -0.9972 0.0000 -vn 0.0000 -0.0000 1.0000 -vn -0.9999 -0.0109 0.0008 -vn -0.5875 -0.8092 0.0009 -vn 0.5875 -0.8092 -0.0008 -vn 0.9999 0.0111 -0.0004 -vn 0.0803 0.9968 0.0001 -vn -0.0593 0.9982 -0.0000 -vn -0.0027 -0.0118 0.9999 -vn -0.9999 -0.0102 0.0001 -vn 0.9999 0.0103 -0.0002 -vn 0.0029 -0.0117 0.9999 -vn 1.0000 -0.0000 0.0001 -vn -0.1034 0.9946 0.0000 -vn -0.0593 0.9982 0.0000 -vn 0.0803 0.9968 -0.0000 -vn 0.0634 0.9980 -0.0000 -vn -1.0000 0.0000 0.0001 -vn -0.0000 -1.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 -1.0000 -0.0000 -vn -0.0001 0.0000 1.0000 -vn 0.9999 -0.0104 0.0035 -vn -0.0001 0.0000 -1.0000 -vn -0.0001 0.8219 -0.5696 -vn -0.0000 -0.9972 0.0745 -vn 1.0000 -0.0000 0.0000 -vn 0.9999 -0.0104 -0.0034 -vn 0.0001 0.8219 0.5696 -vn 0.0000 -0.9972 -0.0745 -vn 0.0008 -0.0109 0.9999 -vn 0.0008 -0.8092 0.5875 -vn -0.0008 -0.8092 -0.5875 -vn -0.0004 0.0111 -0.9999 -vn 0.0000 0.9968 -0.0803 -vn -0.0000 0.9982 0.0593 -vn 0.9999 -0.0118 0.0027 -vn 0.0001 -0.0102 0.9999 -vn -0.0002 0.0103 -0.9999 -vn 0.9999 -0.0117 -0.0029 -vn 0.0001 -0.0000 -1.0000 -vn 0.0000 0.9946 0.1034 -vn 0.0000 0.9982 0.0593 -vn 0.0000 0.9968 -0.0804 -vn 0.0000 0.9980 -0.0634 -vn 0.0001 -0.0000 1.0000 -vn -0.0000 -0.9972 -0.0745 -vn -0.0000 -1.0000 -0.0000 -vn -0.9999 -0.0104 -0.0035 -vn 0.0002 -0.0000 1.0000 -vn -1.0000 0.0000 -0.0000 -vn -0.9999 -0.0104 0.0033 -vn -0.0008 -0.0109 -0.9999 -vn -0.0009 -0.8092 -0.5875 -vn 0.0007 -0.8092 0.5875 -vn 0.0004 0.0111 0.9999 -vn -0.0001 0.9968 0.0803 -vn 0.0000 0.9982 -0.0593 -vn -0.9999 -0.0118 -0.0027 -vn -0.0001 -0.0102 -0.9999 -vn 0.0002 0.0103 0.9999 -vn -0.9999 -0.0117 0.0029 -vn -0.0001 -0.0000 1.0000 -vn 0.0000 0.9946 -0.1034 -vn 0.0000 0.9968 0.0803 -vn 0.0000 0.9980 0.0634 -vn -1.0000 0.0000 -0.0001 -vn 0.0000 -0.0000 -1.0000 -vn -0.0547 -0.9980 0.0314 -vn -0.0263 -0.9978 -0.0603 -vn 0.0547 -0.9980 -0.0314 -vn 0.0263 -0.9978 0.0603 -vn 0.0547 -0.9980 0.0314 -vn -0.0263 -0.9978 0.0603 -vn -0.0547 -0.9980 -0.0314 -vn 0.0263 -0.9978 -0.0603 -vn -0.9945 0.0939 0.0469 -vn -0.9945 -0.0939 0.0469 -vn 0.0000 0.0976 0.9952 -vn -0.0469 -0.1106 0.9928 -vn 0.9980 0.0430 -0.0471 -vn 0.9974 -0.0543 -0.0471 -vn -0.0000 0.0419 -0.9991 -vn -0.0199 -0.0471 -0.9987 -vn -0.9945 0.0939 -0.0469 -vn -0.9945 -0.0939 -0.0469 -vn 0.0000 0.0976 -0.9952 -vn -0.0469 -0.1106 -0.9928 -vn 0.9980 0.0430 0.0471 -vn 0.9974 -0.0543 0.0471 -vn 0.0000 0.0419 0.9991 -vn -0.0199 -0.0471 0.9987 -vn 0.0375 -0.0870 -0.9955 -vn 0.9983 -0.0354 0.0471 -vn 0.0162 -0.0377 0.9992 -vn 0.9945 0.0939 0.0469 -vn 0.9945 -0.0939 0.0469 -vn -0.0000 0.0976 0.9952 -vn 0.0469 -0.1106 0.9928 -vn -0.9980 0.0430 -0.0471 -vn -0.9974 -0.0543 -0.0471 -vn 0.0199 -0.0471 -0.9987 -vn 0.9945 0.0939 -0.0469 -vn 0.9945 -0.0939 -0.0469 -vn -0.0000 0.0976 -0.9952 -vn -0.0375 -0.0870 -0.9955 -vn -0.9980 0.0430 0.0471 -vn -0.9983 -0.0354 0.0471 -vn -0.0162 -0.0377 0.9992 -vn 0.0469 -0.1106 -0.9928 -vn -0.9974 -0.0543 0.0471 -vn 0.0199 -0.0471 0.9987 -vn -0.0375 -0.0870 0.9955 -vn -0.9983 -0.0354 -0.0471 -vn -0.0162 -0.0377 -0.9992 -vn 0.0375 -0.0870 0.9955 -vn 0.9983 -0.0354 -0.0471 -vn 0.0162 -0.0377 -0.9992 -vn 0.0281 0.0492 -0.9984 -vn 0.0141 0.0591 -0.9982 -vn 0.0101 0.0563 -0.9984 -vn 0.0163 0.0408 -0.9990 -vn -0.0000 0.0132 -0.9999 -vn -0.0000 -0.0647 -0.9979 -vn -0.0000 -0.0867 -0.9962 -vn -0.0000 0.0535 -0.9986 -vn -0.0000 0.0380 -0.9993 -vn -0.0101 0.0563 -0.9984 -vn -0.0163 0.0408 -0.9990 -vn -0.0141 0.0591 -0.9982 -vn -0.0281 0.0492 -0.9984 -vn -0.8612 0.5083 0.0000 -vn 0.0000 0.4847 0.8747 -vn 0.8612 0.5083 -0.0000 -vn -0.0000 0.4847 -0.8747 -vn -0.2731 0.9620 0.0000 -vn 0.2731 0.9620 0.0000 -vn 0.3867 0.9222 0.0000 -vn -0.0000 -0.0000 -1.0000 -vn 0.3124 -0.9499 -0.0000 -vn -0.3867 0.9222 0.0000 -vn -0.3124 -0.9499 0.0000 -# 244 vertex normals - -vt 0.4672 0.7287 0.0000 -vt 0.4672 0.6812 0.0000 -vt 0.5381 0.6812 0.0000 -vt 0.5637 0.7287 0.0000 -vt 0.4511 0.6743 0.0000 -vt 0.4498 0.6669 0.0000 -vt 0.5101 0.6669 0.0000 -vt 0.5101 0.6758 0.0000 -vt 0.4531 0.6758 0.0000 -vt 0.6996 0.8663 0.0000 -vt 0.6083 0.8663 0.0000 -vt 0.6083 0.8881 0.0000 -vt 0.6996 0.8881 0.0000 -vt 0.6083 0.9203 0.0000 -vt 0.6996 0.9203 0.0000 -vt 0.6348 0.6259 0.0000 -vt 0.6348 0.6557 0.0000 -vt 0.5033 0.6557 0.0000 -vt 0.5033 0.6259 0.0000 -vt 0.4860 0.7374 0.0000 -vt 0.4587 0.8045 0.0000 -vt 0.4433 0.8046 0.0000 -vt 0.7663 0.6259 0.0000 -vt 0.7905 0.6258 0.0000 -vt 0.7905 0.6557 0.0000 -vt 0.7664 0.6557 0.0000 -vt 0.5578 0.5104 0.0000 -vt 0.6319 0.5104 0.0000 -vt 0.6319 0.6024 0.0000 -vt 0.5578 0.6024 0.0000 -vt 0.4411 0.6748 0.0000 -vt 0.4531 0.7357 0.0000 -vt 0.4411 0.7357 0.0000 -vt 0.5654 0.8042 0.0000 -vt 0.5654 0.7371 0.0000 -vt 0.5169 0.8663 0.0000 -vt 0.5169 0.8881 0.0000 -vt 0.5169 0.9203 0.0000 -vt 0.7344 0.2540 0.0000 -vt 0.7344 0.2807 0.0000 -vt 0.7215 0.2807 0.0000 -vt 0.7215 0.2540 0.0000 -vt 0.7532 0.2524 0.0000 -vt 0.7532 0.2800 0.0000 -vt 0.7370 0.2800 0.0000 -vt 0.7370 0.2524 0.0000 -vt 0.8440 0.5063 0.0000 -vt 0.8440 0.5248 0.0000 -vt 0.8307 0.5248 0.0000 -vt 0.8307 0.5063 0.0000 -vt 0.7344 0.3486 0.0000 -vt 0.7215 0.3486 0.0000 -vt 0.7215 0.3237 0.0000 -vt 0.7344 0.3237 0.0000 -vt 0.7532 0.3506 0.0000 -vt 0.7370 0.3506 0.0000 -vt 0.7370 0.3238 0.0000 -vt 0.7532 0.3238 0.0000 -vt 0.8440 0.5570 0.0000 -vt 0.8307 0.5570 0.0000 -vt 0.8364 0.5997 0.0000 -vt 0.7950 0.5997 0.0000 -vt 0.8096 0.5854 0.0000 -vt 0.8364 0.5608 0.0000 -vt 0.8663 0.5452 0.0000 -vt 0.8798 0.5570 0.0000 -vt 0.8093 0.5451 0.0000 -vt 0.7959 0.5570 0.0000 -vt 0.8620 0.5854 0.0000 -vt 0.8784 0.5997 0.0000 -vt 0.6756 0.2660 0.0000 -vt 0.6505 0.2660 0.0000 -vt 0.6505 0.4622 0.0000 -vt 0.6756 0.4622 0.0000 -vt 0.6058 0.3002 0.0000 -vt 0.6440 0.3002 0.0000 -vt 0.6440 0.4741 0.0000 -vt 0.6058 0.4741 0.0000 -vt 0.6280 0.0055 0.0000 -vt 0.6545 0.0069 0.0000 -vt 0.6548 0.0671 0.0000 -vt 0.6284 0.0865 0.0000 -vt 0.6000 0.2239 0.0000 -vt 0.6163 0.2239 0.0000 -vt 0.6163 0.2472 0.0000 -vt 0.6000 0.2472 0.0000 -vt 0.6822 0.1033 0.0000 -vt 0.6903 0.1033 0.0000 -vt 0.6903 0.1767 0.0000 -vt 0.6822 0.1767 0.0000 -vt 0.5852 0.2472 0.0000 -vt 0.5852 0.2239 0.0000 -vt 0.6098 0.1405 0.0000 -vt 0.6145 0.1405 0.0000 -vt 0.6140 0.1724 0.0000 -vt 0.6093 0.1724 0.0000 -vt 0.6552 0.1246 0.0000 -vt 0.6681 0.1246 0.0000 -vt 0.6659 0.1454 0.0000 -vt 0.6571 0.0825 0.0000 -vt 0.6723 0.0885 0.0000 -vt 0.6279 0.1193 0.0000 -vt 0.6279 0.1037 0.0000 -vt 0.6681 0.2453 0.0000 -vt 0.6552 0.2453 0.0000 -vt 0.6668 0.2246 0.0000 -vt 0.6507 0.1850 0.0000 -vt 0.6636 0.1850 0.0000 -vt 0.6018 0.0674 0.0000 -vt 0.6015 0.0077 0.0000 -vt 0.6903 0.2501 0.0000 -vt 0.6822 0.2501 0.0000 -vt 0.6135 0.2044 0.0000 -vt 0.6089 0.2043 0.0000 -vt 0.5834 0.0885 0.0000 -vt 0.5987 0.0825 0.0000 -vt 0.6955 0.1208 0.0000 -vt 0.6955 0.0105 0.0000 -vt 0.7028 0.0105 0.0000 -vt 0.7028 0.1208 0.0000 -vt 0.7028 0.1808 0.0000 -vt 0.6955 0.1808 0.0000 -vt 0.7028 0.2409 0.0000 -vt 0.6955 0.2409 0.0000 -vt 0.7028 0.3501 0.0000 -vt 0.6955 0.3501 0.0000 -vt 0.6375 0.2580 0.0000 -vt 0.6331 0.2581 0.0000 -vt 0.6322 0.2120 0.0000 -vt 0.6366 0.2119 0.0000 -vt 0.6312 0.1659 0.0000 -vt 0.6356 0.1658 0.0000 -vt 0.5834 0.0179 0.0000 -vt 0.5987 0.0169 0.0000 -vt 0.6903 0.3459 0.0000 -vt 0.6822 0.3459 0.0000 -vt 0.6822 0.0075 0.0000 -vt 0.6903 0.0075 0.0000 -vt 0.6571 0.0163 0.0000 -vt 0.6723 0.0179 0.0000 -vt 0.6242 0.1418 0.0000 -vt 0.6307 0.1417 0.0000 -vt 0.6247 0.1661 0.0000 -vt 0.6256 0.2121 0.0000 -vt 0.6265 0.2583 0.0000 -vt 0.6335 0.2823 0.0000 -vt 0.6270 0.2824 0.0000 -vt 0.6047 0.1405 0.0000 -vt 0.6042 0.1724 0.0000 -vt 0.6038 0.2043 0.0000 -vt 0.6365 0.1297 0.0000 -vt 0.6367 0.1416 0.0000 -vt 0.6305 0.1298 0.0000 -vt 0.6240 0.1300 0.0000 -vt 0.6681 0.1144 0.0000 -vt 0.6552 0.1144 0.0000 -vt 0.6037 0.2097 0.0000 -vt 0.6088 0.2097 0.0000 -vt 0.6135 0.2098 0.0000 -vt 0.6145 0.1351 0.0000 -vt 0.6099 0.1351 0.0000 -vt 0.6048 0.1351 0.0000 -vt 0.6552 0.2555 0.0000 -vt 0.6681 0.2555 0.0000 -vt 0.6272 0.2943 0.0000 -vt 0.6337 0.2942 0.0000 -vt 0.6395 0.2822 0.0000 -vt 0.6397 0.2940 0.0000 -vt 0.1601 0.2593 0.0000 -vt 0.1601 0.0045 0.0000 -vt 0.2454 0.0045 0.0000 -vt 0.2454 0.2590 0.0000 -vt 0.2838 0.5470 0.0000 -vt 0.2838 0.2690 0.0000 -vt 0.1765 0.2690 0.0000 -vt 0.1765 0.5470 0.0000 -vt 0.1150 0.3564 0.0000 -vt 0.1150 0.0538 0.0000 -vt 0.0116 0.0538 0.0000 -vt 0.0116 0.3569 0.0000 -vt 0.0100 0.6667 0.0000 -vt 0.0100 0.3673 0.0000 -vt 0.1291 0.3673 0.0000 -vt 0.1291 0.6667 0.0000 -vt 0.9942 0.1083 0.0000 -vt 0.9942 0.2099 0.0000 -vt 0.9659 0.2099 0.0000 -vt 0.9607 0.1083 0.0000 -vt 0.9942 0.0068 0.0000 -vt 0.9659 0.0068 0.0000 -vt 0.3004 0.5798 0.0000 -vt 0.2911 0.5701 0.0000 -vt 0.2911 0.6124 0.0000 -vt 0.3004 0.6124 0.0000 -vt 0.3004 0.6450 0.0000 -vt 0.2911 0.6547 0.0000 -vt 0.3334 0.6547 0.0000 -vt 0.3334 0.6450 0.0000 -vt 0.3663 0.6450 0.0000 -vt 0.3757 0.6547 0.0000 -vt 0.3757 0.6124 0.0000 -vt 0.3663 0.6124 0.0000 -vt 0.3663 0.5798 0.0000 -vt 0.3757 0.5701 0.0000 -vt 0.3334 0.5701 0.0000 -vt 0.3334 0.5798 0.0000 -vt 0.2876 0.5671 0.0000 -vt 0.2747 0.5537 0.0000 -vt 0.3334 0.5537 0.0000 -vt 0.3334 0.5671 0.0000 -vt 0.3793 0.5671 0.0000 -vt 0.3922 0.5537 0.0000 -vt 0.3922 0.6125 0.0000 -vt 0.3793 0.6125 0.0000 -vt 0.3793 0.6578 0.0000 -vt 0.3922 0.6712 0.0000 -vt 0.3334 0.6712 0.0000 -vt 0.3334 0.6578 0.0000 -vt 0.2876 0.6578 0.0000 -vt 0.2747 0.6712 0.0000 -vt 0.2747 0.6125 0.0000 -vt 0.2876 0.6125 0.0000 -vt 0.9513 0.1060 0.0000 -vt 0.9513 0.0044 0.0000 -vt 0.9230 0.0044 0.0000 -vt 0.9178 0.1060 0.0000 -vt 0.9097 0.1060 0.0000 -vt 0.9097 0.0044 0.0000 -vt 0.8814 0.0044 0.0000 -vt 0.8762 0.1060 0.0000 -vt 0.8814 0.2076 0.0000 -vt 0.9097 0.2076 0.0000 -vt 0.9230 0.2075 0.0000 -vt 0.9513 0.2075 0.0000 -vt 0.8658 0.1132 0.0000 -vt 0.8487 0.1132 0.0000 -vt 0.8445 0.0044 0.0000 -vt 0.8755 0.0044 0.0000 -vt 0.8445 0.2221 0.0000 -vt 0.8755 0.2221 0.0000 -vt 0.7801 0.1104 0.0000 -vt 0.7912 0.0058 0.0000 -vt 0.7576 0.0058 0.0000 -vt 0.7611 0.1104 0.0000 -vt 0.7912 0.2151 0.0000 -vt 0.7576 0.2374 0.0000 -vt 0.7362 0.1124 0.0000 -vt 0.7464 0.0064 0.0000 -vt 0.7139 0.0064 0.0000 -vt 0.7182 0.1124 0.0000 -vt 0.7139 0.2409 0.0000 -vt 0.7464 0.2409 0.0000 -vt 0.8231 0.1080 0.0000 -vt 0.8044 0.1080 0.0000 -vt 0.7986 0.0056 0.0000 -vt 0.8316 0.0056 0.0000 -vt 0.8316 0.2103 0.0000 -vt 0.7986 0.2321 0.0000 -vt 0.3996 0.1076 0.0000 -vt 0.3999 0.1680 0.0000 -vt 0.3755 0.1681 0.0000 -vt 0.3751 0.0799 0.0000 -vt 0.4002 0.2285 0.0000 -vt 0.3758 0.2286 0.0000 -vt 0.4005 0.2888 0.0000 -vt 0.3761 0.2890 0.0000 -vt 0.4008 0.3494 0.0000 -vt 0.3764 0.3495 0.0000 -vt 0.3512 0.1683 0.0000 -vt 0.3507 0.0641 0.0000 -vt 0.3515 0.2287 0.0000 -vt 0.3518 0.2891 0.0000 -vt 0.3521 0.3496 0.0000 -vt 0.3268 0.1684 0.0000 -vt 0.3264 0.0801 0.0000 -vt 0.3271 0.2288 0.0000 -vt 0.3274 0.2892 0.0000 -vt 0.3277 0.3497 0.0000 -vt 0.3025 0.1685 0.0000 -vt 0.3022 0.1081 0.0000 -vt 0.3028 0.2289 0.0000 -vt 0.3031 0.2893 0.0000 -vt 0.3033 0.3498 0.0000 -vt 0.1505 0.9738 0.0000 -vt 0.0042 0.6813 0.0000 -vt 0.2968 0.6813 0.0000 -vt 0.9446 0.3902 0.0000 -vt 0.9268 0.3902 0.0000 -vt 0.9268 0.3744 0.0000 -vt 0.9446 0.3744 0.0000 -vt 0.8974 0.3747 0.0000 -vt 0.8974 0.4922 0.0000 -vt 0.9065 0.4922 0.0000 -vt 0.9065 0.3747 0.0000 -vt 0.9924 0.3882 0.0000 -vt 0.9924 0.5080 0.0000 -vt 0.9766 0.5080 0.0000 -vt 0.9766 0.3882 0.0000 -vt 0.9160 0.3747 0.0000 -vt 0.9160 0.4922 0.0000 -vt 0.9924 0.5202 0.0000 -vt 0.9766 0.5245 0.0000 -vt 0.9160 0.5041 0.0000 -vt 0.8974 0.5041 0.0000 -vt 0.9268 0.4879 0.0000 -vt 0.9446 0.4879 0.0000 -vt 0.9446 0.5038 0.0000 -vt 0.9268 0.5038 0.0000 -vt 0.8789 0.3882 0.0000 -vt 0.8789 0.5080 0.0000 -vt 0.8630 0.5080 0.0000 -vt 0.8630 0.3882 0.0000 -vt 0.8789 0.5245 0.0000 -vt 0.8630 0.5202 0.0000 -vt 0.9268 0.4391 0.0000 -vt 0.9446 0.4391 0.0000 -vt 0.9277 0.5235 0.0000 -vt 0.9277 0.5442 0.0000 -vt 0.9356 0.4391 0.0000 -vt 0.9356 0.3902 0.0000 -vt 0.9356 0.4879 0.0000 -vt 0.4150 0.4926 0.0000 -vt 0.3619 0.5102 0.0000 -vt 0.3617 0.3568 0.0000 -vt 0.4148 0.3567 0.0000 -vt 0.3087 0.4928 0.0000 -vt 0.3085 0.3569 0.0000 -# 327 texture coords - -o turret -g turret -f 1/1/1 2/2/1 3/3/1 -f 3/3/1 4/4/1 1/1/1 -f 5/5/2 6/6/2 7/7/2 -f 5/5/2 7/7/2 8/8/2 -f 5/5/2 8/8/2 9/9/2 -f 10/10/3 11/11/3 12/12/3 -f 12/12/3 13/13/3 10/10/3 -f 12/12/4 14/14/4 9/15/4 -f 9/15/4 13/13/4 12/12/4 -f 15/16/5 7/17/5 6/18/5 -f 6/18/5 16/19/5 15/16/5 -f 3/20/6 16/21/6 4/22/6 -f 4/23/7 16/24/7 6/25/7 -f 6/25/7 17/26/7 4/23/7 -f 10/27/8 18/28/8 19/29/8 -f 19/29/8 11/30/8 10/27/8 -f 17/31/8 5/5/8 9/9/8 -f 17/31/8 9/9/8 14/32/8 -f 17/31/8 14/32/8 20/33/8 -f 4/23/9 17/26/9 20/17/9 -f 20/17/9 1/16/9 4/23/9 -f 15/34/10 16/21/10 3/20/10 -f 3/20/10 21/35/10 15/34/10 -f 10/36/11 13/37/11 22/12/11 -f 22/12/11 18/11/11 10/36/11 -f 13/37/12 9/38/12 8/14/12 -f 8/14/12 22/12/12 13/37/12 -f 5/39/13 23/40/13 24/41/13 -f 24/41/13 6/42/13 5/39/13 -f 17/43/14 25/44/14 23/45/14 -f 23/45/14 5/46/14 17/43/14 -f 6/47/15 24/48/15 25/49/15 -f 25/49/15 17/50/15 6/47/15 -f 26/51/16 27/52/16 28/53/16 -f 28/53/16 29/54/16 26/51/16 -f 30/55/17 31/56/17 32/57/17 -f 32/57/17 33/58/17 30/55/17 -f 34/59/18 35/60/18 25/49/18 -f 25/49/18 24/48/18 34/59/18 -f 36/61/19 26/62/19 29/63/19 -f 29/63/19 23/64/19 36/61/19 -f 28/65/20 27/66/20 34/59/20 -f 34/59/20 24/48/20 28/65/20 -f 24/41/21 23/40/21 29/54/21 -f 29/54/21 28/53/21 24/41/21 -f 33/67/22 25/49/22 35/60/22 -f 35/60/22 30/68/22 33/67/22 -f 32/69/23 31/70/23 36/61/23 -f 36/61/23 23/64/23 32/69/23 -f 23/45/24 25/44/24 33/58/24 -f 33/58/24 32/57/24 23/45/24 -f 37/3/25 38/2/25 39/1/25 -f 39/1/25 40/4/25 37/3/25 -f 41/5/26 42/9/26 8/8/26 -f 41/5/26 8/8/26 7/7/26 -f 41/5/26 7/7/26 43/6/26 -f 44/12/27 45/11/27 46/10/27 -f 46/10/27 47/13/27 44/12/27 -f 42/15/28 48/14/28 44/12/28 -f 44/12/28 47/13/28 42/15/28 -f 43/18/5 7/17/5 15/16/5 -f 15/16/5 49/19/5 43/18/5 -f 37/20/29 40/22/29 49/21/29 -f 40/23/30 50/26/30 43/25/30 -f 43/25/30 49/24/30 40/23/30 -f 19/29/31 18/28/31 46/27/31 -f 46/27/31 45/30/31 19/29/31 -f 50/31/31 51/33/31 48/32/31 -f 50/31/31 48/32/31 42/9/31 -f 50/31/31 42/9/31 41/5/31 -f 51/17/32 50/26/32 40/23/32 -f 40/23/32 39/16/32 51/17/32 -f 15/34/33 21/35/33 37/20/33 -f 37/20/33 49/21/33 15/34/33 -f 22/12/34 47/37/34 46/36/34 -f 46/36/34 18/11/34 22/12/34 -f 8/14/12 42/38/12 47/37/12 -f 47/37/12 22/12/12 8/14/12 -f 52/41/35 53/40/35 41/39/35 -f 41/39/35 43/42/35 52/41/35 -f 53/45/36 54/44/36 50/43/36 -f 50/43/36 41/46/36 53/45/36 -f 54/49/37 52/48/37 43/47/37 -f 43/47/37 50/50/37 54/49/37 -f 55/53/38 56/52/38 57/51/38 -f 57/51/38 58/54/38 55/53/38 -f 59/57/39 60/56/39 61/55/39 -f 61/55/39 62/58/39 59/57/39 -f 54/49/40 63/60/40 64/59/40 -f 64/59/40 52/48/40 54/49/40 -f 58/63/41 57/62/41 65/61/41 -f 65/61/41 53/64/41 58/63/41 -f 55/65/42 52/48/42 64/59/42 -f 64/59/42 56/66/42 55/65/42 -f 52/41/43 55/53/43 58/54/43 -f 58/54/43 53/40/43 52/41/43 -f 63/60/44 54/49/44 62/67/44 -f 62/67/44 61/68/44 63/60/44 -f 59/69/45 53/64/45 65/61/45 -f 65/61/45 60/70/45 59/69/45 -f 53/45/46 59/57/46 62/58/46 -f 62/58/46 54/44/46 53/45/46 -f 66/3/47 2/2/47 1/1/47 -f 1/1/47 67/4/47 66/3/47 -f 68/5/48 69/9/48 70/8/48 -f 68/5/48 70/8/48 71/7/48 -f 68/5/48 71/7/48 72/6/48 -f 12/12/49 11/11/49 73/10/49 -f 73/10/49 74/13/49 12/12/49 -f 69/15/50 14/14/50 12/12/50 -f 12/12/50 74/13/50 69/15/50 -f 72/18/51 71/17/51 75/16/51 -f 75/16/51 76/19/51 72/18/51 -f 66/20/52 67/22/52 76/21/52 -f 67/23/53 77/26/53 72/25/53 -f 72/25/53 76/24/53 67/23/53 -f 19/29/54 78/28/54 73/27/54 -f 73/27/54 11/30/54 19/29/54 -f 77/31/54 20/33/54 14/32/54 -f 77/31/54 14/32/54 69/9/54 -f 77/31/54 69/9/54 68/5/54 -f 20/17/9 77/26/9 67/23/9 -f 67/23/9 1/16/9 20/17/9 -f 75/34/55 79/35/55 66/20/55 -f 66/20/55 76/21/55 75/34/55 -f 80/12/56 74/37/57 73/36/57 -f 73/36/57 78/11/56 80/12/56 -f 70/14/58 69/38/58 74/37/58 -f 74/37/58 80/12/58 70/14/58 -f 81/41/59 82/40/59 68/39/59 -f 68/39/59 72/42/59 81/41/59 -f 82/45/60 83/44/60 77/43/60 -f 77/43/60 68/46/60 82/45/60 -f 83/49/61 81/48/61 72/47/61 -f 72/47/61 77/50/61 83/49/61 -f 84/53/62 85/52/62 86/51/62 -f 86/51/62 87/54/62 84/53/62 -f 88/57/63 89/56/63 90/55/63 -f 90/55/63 91/58/63 88/57/63 -f 83/49/64 92/60/64 93/59/64 -f 93/59/64 81/48/64 83/49/64 -f 87/63/65 86/62/65 94/61/65 -f 94/61/65 82/64/65 87/63/65 -f 84/65/66 81/48/66 93/59/66 -f 93/59/66 85/66/66 84/65/66 -f 81/41/67 84/53/67 87/54/67 -f 87/54/67 82/40/67 81/41/67 -f 92/60/68 83/49/68 91/67/68 -f 91/67/68 90/68/68 92/60/68 -f 88/69/69 82/64/69 94/61/69 -f 94/61/69 89/70/69 88/69/69 -f 82/45/70 88/57/70 91/58/70 -f 91/58/70 83/44/70 82/45/70 -f 39/1/71 38/2/71 95/3/71 -f 95/3/71 96/4/71 39/1/71 -f 97/5/72 98/6/72 71/7/72 -f 97/5/72 71/7/72 70/8/72 -f 97/5/72 70/8/72 99/9/72 -f 100/10/73 45/11/73 44/12/73 -f 44/12/73 101/13/73 100/10/73 -f 44/12/74 48/14/74 99/15/74 -f 99/15/74 101/13/74 44/12/74 -f 75/16/51 71/17/51 98/18/51 -f 98/18/51 102/19/51 75/16/51 -f 95/20/75 102/21/75 96/22/75 -f 96/23/76 102/24/76 98/25/76 -f 98/25/76 103/26/76 96/23/76 -f 100/27/77 78/28/77 19/29/77 -f 19/29/77 45/30/77 100/27/77 -f 103/31/77 97/5/77 99/9/77 -f 103/31/77 99/9/77 48/32/77 -f 103/31/77 48/32/77 51/33/77 -f 96/23/32 103/26/32 51/17/32 -f 51/17/32 39/16/32 96/23/32 -f 75/34/78 102/21/78 95/20/78 -f 95/20/78 79/35/78 75/34/78 -f 100/36/79 101/37/79 80/12/80 -f 80/12/80 78/11/80 100/36/79 -f 101/37/58 99/38/58 70/14/58 -f 70/14/58 80/12/58 101/37/58 -f 97/39/81 104/40/81 105/41/81 -f 105/41/81 98/42/81 97/39/81 -f 103/43/82 106/44/82 104/45/82 -f 104/45/82 97/46/82 103/43/82 -f 98/47/83 105/48/83 106/49/83 -f 106/49/83 103/50/83 98/47/83 -f 107/51/84 108/52/84 109/53/84 -f 109/53/84 110/54/84 107/51/84 -f 111/55/85 112/56/85 113/57/85 -f 113/57/85 114/58/85 111/55/85 -f 115/59/86 116/60/86 106/49/86 -f 106/49/86 105/48/86 115/59/86 -f 117/61/87 107/62/87 110/63/87 -f 110/63/87 104/64/87 117/61/87 -f 109/65/88 108/66/88 115/59/88 -f 115/59/88 105/48/88 109/65/88 -f 105/41/89 104/40/89 110/54/89 -f 110/54/89 109/53/89 105/41/89 -f 114/67/90 106/49/90 116/60/90 -f 116/60/90 111/68/90 114/67/90 -f 113/69/91 112/70/91 117/61/91 -f 117/61/91 104/64/91 113/69/91 -f 104/45/92 106/44/92 114/58/92 -f 114/58/92 113/57/92 104/45/92 -f 118/71/58 119/72/58 120/73/58 -f 120/73/58 121/74/58 118/71/58 -f 119/75/93 122/76/93 123/77/93 -f 123/77/93 120/78/93 119/75/93 -f 122/72/51 124/71/51 125/74/51 -f 125/74/51 123/73/51 122/72/51 -f 126/71/93 127/72/93 128/73/93 -f 128/73/93 129/74/93 126/71/93 -f 127/75/51 130/76/51 131/77/51 -f 131/77/51 128/78/51 127/75/51 -f 130/72/94 132/71/94 133/74/94 -f 133/74/94 131/73/94 130/72/94 -f 134/71/51 135/72/51 136/73/51 -f 136/73/51 137/74/51 134/71/51 -f 135/75/94 138/76/94 139/77/94 -f 139/77/94 136/78/94 135/75/94 -f 138/72/58 140/71/58 141/74/58 -f 141/74/58 139/73/58 138/72/58 -f 142/71/94 143/72/94 144/73/94 -f 144/73/94 145/74/94 142/71/94 -f 143/75/58 146/76/58 147/77/58 -f 147/77/58 144/78/58 143/75/58 -f 146/72/93 148/71/93 149/74/93 -f 149/74/93 147/73/93 146/72/93 -f 150/79/95 151/80/95 152/81/95 -f 152/81/95 153/82/95 150/79/95 -f 154/83/96 155/84/96 156/85/96 -f 156/85/96 157/86/96 154/83/96 -f 158/87/97 159/88/97 160/89/97 -f 160/89/97 161/90/97 158/87/97 -f 162/86/51 163/91/51 164/92/51 -f 164/92/51 165/83/51 162/86/51 -f 166/93/98 167/94/98 168/95/98 -f 168/95/98 169/96/98 166/93/98 -f 170/97/99 171/98/99 172/99/99 -f 173/100/99 158/101/99 161/102/99 -f 161/102/99 174/103/99 173/100/99 -f 175/104/100 176/105/100 177/106/100 -f 177/106/99 176/105/99 178/107/99 -f 178/107/99 179/108/99 177/106/99 -f 150/79/101 153/82/101 180/109/101 -f 180/109/101 181/110/101 150/79/101 -f 161/90/102 160/89/102 182/111/102 -f 182/111/102 183/112/102 161/90/102 -f 169/96/103 168/95/103 184/113/103 -f 184/113/103 185/114/103 169/96/103 -f 174/103/100 161/102/100 183/115/100 -f 183/115/100 186/116/100 174/103/100 -f 172/99/104 179/108/104 178/107/104 -f 178/107/104 170/97/104 172/99/104 -f 152/117/105 151/118/105 187/119/105 -f 187/119/105 173/120/105 152/117/105 -f 152/117/106 173/120/106 174/121/106 -f 174/121/106 153/122/106 152/117/106 -f 153/122/107 174/121/107 186/123/107 -f 186/123/107 180/124/107 153/122/107 -f 180/124/108 186/123/108 188/125/108 -f 188/125/108 181/126/108 180/124/108 -f 181/127/109 188/128/109 189/129/109 -f 189/129/109 150/130/109 181/127/109 -f 150/130/110 189/129/110 187/131/110 -f 187/131/110 151/132/110 150/130/110 -f 190/133/111 188/134/111 186/116/111 -f 186/116/111 183/115/111 190/133/111 -f 182/111/112 191/135/112 190/136/112 -f 190/136/112 183/112/112 182/111/112 -f 192/137/113 193/138/113 159/88/113 -f 159/88/113 158/87/113 192/137/113 -f 173/100/114 187/139/114 192/140/114 -f 192/140/114 158/101/114 173/100/114 -f 194/92/115 154/83/115 157/86/115 -f 157/86/115 195/91/115 194/92/115 -f 171/141/116 192/142/116 187/131/116 -f 187/131/116 172/143/116 171/141/116 -f 172/143/117 187/131/117 189/129/117 -f 189/129/117 179/144/117 172/143/117 -f 179/144/118 189/129/118 188/128/118 -f 188/128/118 177/145/118 179/144/118 -f 177/145/119 188/128/119 190/146/119 -f 190/146/119 175/147/119 177/145/119 -f 196/85/120 162/86/120 165/83/120 -f 165/83/120 197/84/120 196/85/120 -f 176/148/98 166/93/98 169/96/98 -f 169/96/98 178/149/98 176/148/98 -f 178/149/103 169/96/103 185/114/103 -f 185/114/103 170/150/103 178/149/103 -f 156/151/54 193/152/54 192/142/54 -f 192/142/54 157/153/54 156/151/54 -f 157/153/8 192/142/8 171/141/8 -f 171/141/8 195/154/8 157/153/8 -f 195/155/104 171/98/104 170/97/104 -f 170/97/104 194/156/104 195/155/104 -f 194/157/121 170/150/121 185/114/121 -f 185/114/121 154/158/121 194/157/121 -f 154/158/121 185/114/121 184/113/121 -f 184/113/121 155/159/121 154/158/121 -f 164/160/122 167/94/122 166/93/122 -f 166/93/122 165/161/122 164/160/122 -f 165/161/123 166/93/123 176/148/123 -f 176/148/123 197/162/123 165/161/123 -f 197/163/124 176/105/124 175/104/124 -f 175/104/124 196/164/124 197/163/124 -f 196/165/54 175/147/54 190/146/54 -f 190/146/54 162/166/54 196/165/54 -f 162/166/54 190/146/54 191/167/54 -f 191/167/54 163/168/54 162/166/54 -f 198/79/125 199/80/125 200/81/125 -f 200/81/125 201/82/125 198/79/125 -f 202/83/126 203/84/126 204/85/126 -f 204/85/126 205/86/126 202/83/126 -f 206/87/127 207/88/127 208/89/127 -f 208/89/127 209/90/127 206/87/127 -f 210/86/104 211/91/104 212/92/104 -f 212/92/104 213/83/104 210/86/104 -f 214/93/128 215/94/128 216/95/128 -f 216/95/128 217/96/128 214/93/128 -f 218/97/58 219/98/58 220/99/58 -f 221/100/129 206/101/129 209/102/129 -f 209/102/129 222/103/129 221/100/129 -f 223/104/129 224/105/129 225/106/129 -f 225/106/58 224/105/58 226/107/58 -f 226/107/58 227/108/58 225/106/58 -f 198/79/130 201/82/130 228/109/130 -f 228/109/130 229/110/130 198/79/130 -f 209/90/131 208/89/131 230/111/131 -f 230/111/131 231/112/131 209/90/131 -f 217/96/132 216/95/132 232/113/132 -f 232/113/132 233/114/132 217/96/132 -f 222/103/58 209/102/58 231/115/58 -f 231/115/58 234/116/58 222/103/58 -f 220/99/5 227/108/5 226/107/5 -f 226/107/5 218/97/5 220/99/5 -f 200/117/133 199/118/133 235/119/133 -f 235/119/133 221/120/133 200/117/133 -f 200/117/134 221/120/134 222/121/134 -f 222/121/134 201/122/134 200/117/134 -f 201/122/135 222/121/135 234/123/135 -f 234/123/135 228/124/135 201/122/135 -f 228/124/136 234/123/136 236/125/136 -f 236/125/136 229/126/136 228/124/136 -f 229/127/137 236/128/137 237/129/137 -f 237/129/137 198/130/137 229/127/137 -f 198/130/138 237/129/138 235/131/138 -f 235/131/138 199/132/138 198/130/138 -f 238/133/139 236/134/139 234/116/139 -f 234/116/139 231/115/139 238/133/139 -f 230/111/140 239/135/140 238/136/140 -f 238/136/140 231/112/140 230/111/140 -f 240/137/141 241/138/141 207/88/141 -f 207/88/141 206/87/141 240/137/141 -f 221/100/142 235/139/142 240/140/142 -f 240/140/142 206/101/142 221/100/142 -f 242/92/143 202/83/143 205/86/143 -f 205/86/143 243/91/143 242/92/143 -f 219/141/144 240/142/144 235/131/144 -f 235/131/144 220/143/144 219/141/144 -f 220/143/145 235/131/145 237/129/145 -f 237/129/145 227/144/145 220/143/145 -f 227/144/146 237/129/146 236/128/146 -f 236/128/146 225/145/146 227/144/146 -f 225/145/147 236/128/147 238/146/147 -f 238/146/147 223/147/147 225/145/147 -f 244/85/148 210/86/148 213/83/148 -f 213/83/148 245/84/148 244/85/148 -f 224/148/128 214/93/128 217/96/128 -f 217/96/128 226/149/128 224/148/128 -f 226/149/149 217/96/149 233/114/149 -f 233/114/149 218/150/149 226/149/149 -f 204/151/8 241/152/8 240/142/8 -f 240/142/8 205/153/8 204/151/8 -f 205/153/8 240/142/8 219/141/8 -f 219/141/8 243/154/8 205/153/8 -f 243/155/58 219/98/58 218/97/58 -f 218/97/58 242/156/58 243/155/58 -f 242/157/121 218/150/121 233/114/121 -f 233/114/121 202/158/121 242/157/121 -f 202/158/122 233/114/122 232/113/122 -f 232/113/122 203/159/122 202/158/122 -f 212/160/121 215/94/121 214/93/121 -f 214/93/121 213/161/121 212/160/121 -f 213/161/150 214/93/150 224/148/150 -f 224/148/150 245/162/150 213/161/150 -f 245/163/115 224/105/115 223/104/115 -f 223/104/115 244/164/115 245/163/115 -f 244/165/54 223/147/54 238/146/54 -f 238/146/54 210/166/54 244/165/54 -f 210/166/54 238/146/54 239/167/54 -f 239/167/54 211/168/54 210/166/54 -f 246/79/151 247/80/151 248/81/151 -f 248/81/151 249/82/151 246/79/151 -f 250/83/152 251/84/152 252/85/152 -f 252/85/152 253/86/152 250/83/152 -f 254/87/131 255/88/131 256/89/131 -f 256/89/131 257/90/131 254/87/131 -f 258/86/93 259/91/93 260/92/93 -f 260/92/93 261/83/93 258/86/93 -f 262/93/149 263/94/149 264/95/149 -f 264/95/149 265/96/149 262/93/149 -f 266/97/51 267/98/51 268/99/51 -f 269/100/12 254/101/12 257/102/12 -f 257/102/12 270/103/12 269/100/12 -f 271/104/153 272/105/153 273/106/153 -f 273/106/12 272/105/12 274/107/12 -f 274/107/12 275/108/12 273/106/12 -f 246/79/154 249/82/154 276/109/154 -f 276/109/154 277/110/154 246/79/154 -f 257/90/127 256/89/127 278/111/127 -f 278/111/127 279/112/127 257/90/127 -f 265/96/128 264/95/128 280/113/128 -f 280/113/128 281/114/128 265/96/128 -f 270/103/12 257/102/12 279/115/12 -f 279/115/12 282/116/12 270/103/12 -f 268/99/51 275/108/51 274/107/51 -f 274/107/51 266/97/51 268/99/51 -f 248/117/155 247/118/155 283/119/155 -f 283/119/155 269/120/155 248/117/155 -f 248/117/156 269/120/156 270/121/156 -f 270/121/156 249/122/156 248/117/156 -f 249/122/157 270/121/157 282/123/157 -f 282/123/157 276/124/157 249/122/157 -f 276/124/158 282/123/158 284/125/158 -f 284/125/158 277/126/158 276/124/158 -f 277/127/159 284/128/159 285/129/159 -f 285/129/159 246/130/159 277/127/159 -f 246/130/160 285/129/160 283/131/160 -f 283/131/160 247/132/160 246/130/160 -f 286/133/161 284/134/161 282/116/161 -f 282/116/161 279/115/161 286/133/161 -f 278/111/162 287/135/162 286/136/162 -f 286/136/162 279/112/162 278/111/162 -f 288/137/163 289/138/163 255/88/163 -f 255/88/163 254/87/163 288/137/163 -f 269/100/164 283/139/164 288/140/164 -f 288/140/164 254/101/164 269/100/164 -f 290/92/165 250/83/165 253/86/165 -f 253/86/165 291/91/165 290/92/165 -f 267/141/166 288/142/166 283/131/166 -f 283/131/166 268/143/166 267/141/166 -f 268/143/160 283/131/160 285/129/160 -f 285/129/160 275/144/160 268/143/160 -f 275/144/167 285/129/167 284/128/167 -f 284/128/167 273/145/167 275/144/167 -f 273/145/168 284/128/168 286/146/168 -f 286/146/168 271/147/168 273/145/168 -f 292/85/126 258/86/126 261/83/126 -f 261/83/126 293/84/126 292/85/126 -f 272/148/149 262/93/149 265/96/149 -f 265/96/149 274/149/149 272/148/149 -f 274/149/128 265/96/128 281/114/128 -f 281/114/128 266/150/128 274/149/128 -f 252/151/54 289/152/54 288/142/54 -f 288/142/54 253/153/54 252/151/54 -f 253/153/54 288/142/54 267/141/54 -f 267/141/54 291/154/54 253/153/54 -f 291/155/51 267/98/51 266/97/51 -f 266/97/51 290/156/51 291/155/51 -f 290/157/123 266/150/123 281/114/123 -f 281/114/123 250/158/123 290/157/123 -f 250/158/121 281/114/121 280/113/121 -f 280/113/121 251/159/121 250/158/121 -f 260/160/121 263/94/121 262/93/121 -f 262/93/121 261/161/121 260/160/121 -f 261/161/121 262/93/121 272/148/121 -f 272/148/121 293/162/121 261/161/121 -f 293/163/169 272/105/169 271/104/169 -f 271/104/169 292/164/169 293/163/169 -f 292/165/54 271/147/54 286/146/54 -f 286/146/54 258/166/54 292/165/54 -f 258/166/54 286/146/54 287/167/54 -f 287/167/54 259/168/54 258/166/54 -f 95/169/51 294/170/51 295/171/51 -f 295/171/51 296/172/51 95/169/51 -f 296/173/94 295/174/94 297/175/94 -f 297/175/94 298/176/94 296/173/94 -f 298/177/58 297/178/58 299/179/58 -f 299/179/58 37/180/58 298/177/58 -f 37/181/170 299/182/170 294/183/170 -f 294/183/170 95/184/170 37/181/170 -f 300/185/51 301/186/51 302/187/51 -f 302/187/51 303/188/51 300/185/51 -f 304/185/100 305/189/100 306/190/100 -f 306/190/100 307/188/100 304/185/100 -f 308/185/58 309/189/58 310/190/58 -f 310/190/58 311/188/58 308/185/58 -f 312/185/93 313/186/93 314/187/93 -f 314/187/93 315/188/93 312/185/93 -f 316/191/171 302/192/171 315/193/171 -f 315/193/171 317/194/171 316/191/171 -f 318/195/172 314/196/172 311/197/172 -f 311/197/172 319/198/172 318/195/172 -f 320/199/173 310/200/173 307/201/173 -f 307/201/173 321/202/173 320/199/173 -f 322/203/174 306/204/174 303/205/174 -f 303/205/174 323/206/174 322/203/174 -f 324/207/54 301/208/54 300/209/54 -f 300/209/54 325/210/54 324/207/54 -f 326/211/8 305/212/8 304/213/8 -f 304/213/8 327/214/8 326/211/8 -f 328/215/77 309/216/77 308/217/77 -f 308/217/77 329/218/77 328/215/77 -f 330/219/77 313/220/77 312/221/77 -f 312/221/77 331/222/77 330/219/77 -f 308/185/58 311/188/58 314/187/58 -f 314/187/58 313/186/58 308/185/58 -f 312/185/93 315/188/93 302/190/93 -f 302/190/93 301/189/93 312/185/93 -f 318/195/175 317/194/175 315/193/175 -f 315/193/175 314/196/175 318/195/175 -f 320/199/176 319/198/176 311/197/176 -f 311/197/176 310/200/176 320/199/176 -f 322/203/177 321/202/177 307/201/177 -f 307/201/177 306/204/177 322/203/177 -f 330/219/54 329/218/54 308/217/54 -f 308/217/54 313/220/54 330/219/54 -f 324/207/31 331/222/31 312/221/31 -f 312/221/31 301/208/31 324/207/31 -f 300/185/51 303/188/51 306/190/51 -f 306/190/51 305/189/51 300/185/51 -f 304/185/94 307/188/94 310/187/94 -f 310/187/94 309/186/94 304/185/94 -f 316/191/178 323/206/178 303/205/178 -f 303/205/178 302/192/178 316/191/178 -f 326/211/77 325/210/77 300/209/77 -f 300/209/77 305/212/77 326/211/77 -f 328/215/77 327/214/77 304/213/77 -f 304/213/77 309/216/77 328/215/77 -f 332/185/51 333/186/51 334/187/51 -f 334/187/51 335/188/51 332/185/51 -f 336/223/94 337/224/94 338/225/94 -f 338/225/94 339/226/94 336/223/94 -f 340/227/58 341/228/58 342/229/58 -f 342/229/58 343/230/58 340/227/58 -f 344/185/93 345/186/93 346/187/93 -f 346/187/93 347/188/93 344/185/93 -f 348/191/171 334/192/171 347/193/171 -f 347/193/171 349/194/171 348/191/171 -f 350/195/172 346/196/172 343/197/172 -f 343/197/172 351/198/172 350/195/172 -f 352/199/173 342/200/173 339/201/173 -f 339/201/173 353/202/173 352/199/173 -f 354/203/174 338/204/174 335/205/174 -f 335/205/174 355/206/174 354/203/174 -f 356/207/54 333/208/54 332/209/54 -f 332/209/54 357/210/54 356/207/54 -f 358/211/8 337/212/8 336/213/8 -f 336/213/8 359/214/8 358/211/8 -f 360/215/54 341/216/54 340/217/54 -f 340/217/54 361/218/54 360/215/54 -f 362/219/77 345/220/77 344/221/77 -f 344/221/77 363/222/77 362/219/77 -f 340/227/58 343/230/58 346/231/58 -f 346/231/58 345/232/58 340/227/58 -f 344/185/93 347/188/93 334/190/93 -f 334/190/93 333/189/93 344/185/93 -f 350/195/175 349/194/175 347/193/175 -f 347/193/175 346/196/175 350/195/175 -f 352/199/176 351/198/176 343/197/176 -f 343/197/176 342/200/176 352/199/176 -f 354/203/177 353/202/177 339/201/177 -f 339/201/177 338/204/177 354/203/177 -f 362/219/54 361/218/54 340/217/54 -f 340/217/54 345/220/54 362/219/54 -f 356/207/31 363/222/31 344/221/31 -f 344/221/31 333/208/31 356/207/31 -f 332/185/51 335/188/51 338/190/51 -f 338/190/51 337/189/51 332/185/51 -f 336/223/94 339/226/94 342/233/94 -f 342/233/94 341/234/94 336/223/94 -f 348/191/178 355/206/178 335/205/178 -f 335/205/178 334/192/178 348/191/178 -f 358/211/77 357/210/77 332/209/77 -f 332/209/77 337/212/77 358/211/77 -f 360/215/54 359/214/54 336/213/54 -f 336/213/54 341/216/54 360/215/54 -f 364/235/179 365/236/179 366/237/179 -f 366/237/179 367/238/179 364/235/179 -f 368/239/180 365/236/180 364/235/180 -f 364/235/180 369/240/180 368/239/180 -f 364/241/181 367/242/181 370/243/181 -f 370/243/181 371/244/181 364/241/181 -f 369/245/182 364/241/182 371/244/182 -f 371/244/182 372/246/182 369/245/182 -f 371/247/183 370/248/183 373/249/183 -f 373/249/183 374/250/183 371/247/183 -f 375/251/184 372/252/184 371/247/184 -f 371/247/184 374/250/184 375/251/184 -f 365/253/185 374/254/185 373/255/185 -f 373/255/185 366/256/185 365/253/185 -f 368/257/186 375/258/186 374/254/186 -f 374/254/186 365/253/186 368/257/186 -f 376/235/187 377/238/187 378/237/187 -f 378/237/187 379/236/187 376/235/187 -f 380/239/188 381/240/188 376/235/188 -f 376/235/188 379/236/188 380/239/188 -f 376/241/189 382/244/189 383/243/189 -f 383/243/189 377/242/189 376/241/189 -f 381/245/190 384/246/190 382/244/190 -f 382/244/190 376/241/190 381/245/190 -f 382/247/191 385/250/191 386/249/191 -f 386/249/191 383/248/191 382/247/191 -f 387/251/192 385/250/192 382/247/192 -f 382/247/192 384/252/192 387/251/192 -f 379/253/193 378/256/193 386/255/193 -f 386/255/193 385/254/193 379/253/193 -f 380/257/194 379/253/194 385/254/194 -f 385/254/194 387/258/194 380/257/194 -f 388/235/187 389/238/187 390/237/187 -f 390/237/187 391/236/187 388/235/187 -f 392/239/188 393/240/188 388/235/188 -f 388/235/188 391/236/188 392/239/188 -f 388/241/189 394/244/189 395/243/189 -f 395/243/189 389/242/189 388/241/189 -f 393/245/195 396/246/195 394/244/195 -f 394/244/195 388/241/195 393/245/195 -f 394/247/191 397/250/191 398/249/191 -f 398/249/191 395/248/191 394/247/191 -f 399/251/196 397/250/196 394/247/196 -f 394/247/196 396/252/196 399/251/196 -f 391/253/193 390/256/193 398/255/193 -f 398/255/193 397/254/193 391/253/193 -f 392/257/197 391/253/197 397/254/197 -f 397/254/197 399/258/197 392/257/197 -f 400/235/198 401/238/198 402/237/198 -f 402/237/198 403/236/198 400/235/198 -f 404/239/199 405/240/199 400/235/199 -f 400/235/199 403/236/199 404/239/199 -f 400/241/200 406/244/200 407/243/200 -f 407/243/200 401/242/200 400/241/200 -f 405/245/201 408/246/201 406/244/201 -f 406/244/201 400/241/201 405/245/201 -f 406/247/202 409/250/202 410/249/202 -f 410/249/202 407/248/202 406/247/202 -f 411/251/203 409/250/203 406/247/203 -f 406/247/203 408/252/203 411/251/203 -f 403/253/185 402/256/185 410/255/185 -f 410/255/185 409/254/185 403/253/185 -f 404/257/204 403/253/204 409/254/204 -f 409/254/204 411/258/204 404/257/204 -f 412/235/205 413/236/205 414/237/205 -f 414/237/205 415/238/205 412/235/205 -f 416/239/206 413/236/206 412/235/206 -f 412/235/206 417/240/206 416/239/206 -f 412/241/207 415/242/207 418/243/207 -f 418/243/207 419/244/207 412/241/207 -f 417/245/208 412/241/208 419/244/208 -f 419/244/208 420/246/208 417/245/208 -f 419/247/209 418/248/209 421/249/209 -f 421/249/209 422/250/209 419/247/209 -f 423/251/210 420/252/210 419/247/210 -f 419/247/210 422/250/210 423/251/210 -f 413/253/193 422/254/193 421/255/193 -f 421/255/193 414/256/193 413/253/193 -f 416/257/211 423/258/211 422/254/211 -f 422/254/211 413/253/211 416/257/211 -f 424/235/205 425/236/205 426/237/205 -f 426/237/205 427/238/205 424/235/205 -f 428/239/206 425/236/206 424/235/206 -f 424/235/206 429/240/206 428/239/206 -f 424/241/207 427/242/207 430/243/207 -f 430/243/207 431/244/207 424/241/207 -f 429/245/212 424/241/212 431/244/212 -f 431/244/212 432/246/212 429/245/212 -f 431/247/209 430/248/209 433/249/209 -f 433/249/209 434/250/209 431/247/209 -f 435/251/213 432/252/213 431/247/213 -f 431/247/213 434/250/213 435/251/213 -f 425/253/193 434/254/193 433/255/193 -f 433/255/193 426/256/193 425/253/193 -f 428/257/214 435/258/214 434/254/214 -f 434/254/214 425/253/214 428/257/214 -f 436/235/198 437/238/198 438/237/198 -f 438/237/198 439/236/198 436/235/198 -f 440/239/199 441/240/199 436/235/199 -f 436/235/199 439/236/199 440/239/199 -f 436/241/200 442/244/200 443/243/200 -f 443/243/200 437/242/200 436/241/200 -f 441/245/215 444/246/215 442/244/215 -f 442/244/215 436/241/215 441/245/215 -f 442/247/202 445/250/202 446/249/202 -f 446/249/202 443/248/202 442/247/202 -f 447/251/216 445/250/216 442/247/216 -f 442/247/216 444/252/216 447/251/216 -f 439/253/185 438/256/185 446/255/185 -f 446/255/185 445/254/185 439/253/185 -f 440/257/217 439/253/217 445/254/217 -f 445/254/217 447/258/217 440/257/217 -f 448/235/179 449/236/179 450/237/179 -f 450/237/179 451/238/179 448/235/179 -f 452/239/180 449/236/180 448/235/180 -f 448/235/180 453/240/180 452/239/180 -f 448/241/181 451/242/181 454/243/181 -f 454/243/181 455/244/181 448/241/181 -f 453/245/218 448/241/218 455/244/218 -f 455/244/218 456/246/218 453/245/218 -f 455/247/183 454/248/183 457/249/183 -f 457/249/183 458/250/183 455/247/183 -f 459/251/219 456/252/219 455/247/219 -f 455/247/219 458/250/219 459/251/219 -f 449/253/185 458/254/185 457/255/185 -f 457/255/185 450/256/185 449/253/185 -f 452/257/220 459/258/220 458/254/220 -f 458/254/220 449/253/220 452/257/220 -f 460/259/221 461/260/222 462/261/223 -f 462/261/223 463/262/224 460/259/221 -f 461/260/222 464/263/225 465/264/225 -f 465/264/225 462/261/223 461/260/222 -f 464/263/225 466/265/226 467/266/226 -f 467/266/226 465/264/225 464/263/225 -f 466/265/226 468/267/227 469/268/227 -f 469/268/227 467/266/226 466/265/226 -f 463/262/224 462/261/223 470/269/228 -f 470/269/228 471/270/229 463/262/224 -f 462/261/223 465/264/225 472/271/225 -f 472/271/225 470/269/228 462/261/223 -f 465/264/225 467/266/226 473/272/226 -f 473/272/226 472/271/225 465/264/225 -f 467/266/226 469/268/227 474/273/227 -f 474/273/227 473/272/226 467/266/226 -f 471/270/229 470/269/228 475/274/230 -f 475/274/230 476/275/231 471/270/229 -f 470/269/228 472/271/225 477/276/225 -f 477/276/225 475/274/230 470/269/228 -f 472/271/225 473/272/226 478/277/226 -f 478/277/226 477/276/225 472/271/225 -f 473/272/226 474/273/227 479/278/227 -f 479/278/227 478/277/226 473/272/226 -f 476/275/231 475/274/230 480/279/232 -f 480/279/232 481/280/233 476/275/231 -f 475/274/230 477/276/225 482/281/225 -f 482/281/225 480/279/232 475/274/230 -f 477/276/225 478/277/226 483/282/226 -f 483/282/226 482/281/225 477/276/225 -f 478/277/226 479/278/227 484/283/227 -f 484/283/227 483/282/226 478/277/226 -f 485/284/234 486/285/234 487/286/234 -f 485/284/235 487/285/235 488/286/235 -f 485/284/236 488/285/236 489/286/236 -f 485/284/237 489/285/237 486/286/237 -f 490/287/238 491/288/238 492/289/238 -f 492/289/238 493/290/238 490/287/238 -f 494/291/58 495/292/58 496/293/58 -f 496/293/58 497/294/58 494/291/58 -f 498/295/93 499/296/93 495/297/93 -f 495/297/93 494/298/93 498/295/93 -f 500/299/153 501/300/153 499/292/153 -f 499/292/153 498/291/153 500/299/153 -f 492/301/93 491/302/93 495/297/93 -f 495/297/93 499/296/93 492/301/93 -f 493/303/153 492/304/153 499/292/153 -f 499/292/153 501/300/153 493/303/153 -f 502/305/239 503/306/239 504/307/239 -f 504/307/239 505/308/239 502/305/239 -f 506/294/153 507/293/153 508/292/153 -f 508/292/153 509/291/153 506/294/153 -f 510/291/129 511/292/129 512/300/129 -f 512/300/129 513/299/129 510/291/129 -f 509/309/93 508/310/93 511/311/93 -f 511/311/93 510/312/93 509/309/93 -f 505/304/129 504/303/129 512/300/129 -f 512/300/129 511/292/129 505/304/129 -f 502/313/93 505/314/93 511/311/93 -f 511/311/93 508/310/93 502/313/93 -f 502/305/240 514/315/77 515/316/77 -f 515/316/77 503/306/240 502/305/240 -f 508/310/93 516/317/241 514/318/241 -f 514/318/241 502/313/93 508/310/93 -f 516/315/242 517/319/242 496/320/242 -f 496/320/242 495/288/242 516/315/242 -f 491/288/243 490/287/243 515/316/77 -f 515/316/77 514/315/77 491/288/243 -f 495/297/170 491/302/170 514/318/241 -f 514/318/241 516/317/241 495/297/170 -f 508/305/244 507/321/244 517/319/244 -f 517/319/244 516/315/244 508/305/244 -f 496/322/170 517/323/170 518/324/170 -f 518/324/170 497/325/170 496/322/170 -f 517/323/93 507/326/93 506/327/93 -f 506/327/93 518/324/93 517/323/93 -# 782 faces - diff --git a/examples/web/models/resources/models/turret_diffuse.png b/examples/web/models/resources/models/turret_diffuse.png Binary files differdeleted file mode 100644 index 33628e3..0000000 --- a/examples/web/models/resources/models/turret_diffuse.png +++ /dev/null diff --git a/examples/web/models/resources/models/well.obj b/examples/web/models/resources/models/well.obj deleted file mode 100644 index 9f26e58..0000000 --- a/examples/web/models/resources/models/well.obj +++ /dev/null @@ -1,1030 +0,0 @@ -# (c) 2018 Medieval Assets Pack by Alberto Cano -# Licensed as Creative Commons Attribution-NonCommercial 4.0 - -# -# object well -# - -v 2.4349 0.3719 -0.9996 -v 2.4286 0.3719 1.0149 -v 2.4526 -0.0641 1.0250 -v 2.4590 -0.0641 -1.0095 -v 1.3014 0.7560 -0.5342 -v 1.2980 0.7560 0.5425 -v 1.2552 1.8149 0.5246 -v 1.2585 1.8149 -0.5166 -v 0.9996 0.3719 2.4349 -v 1.0095 -0.0641 2.4590 -v 0.5342 0.7560 1.3014 -v 0.5166 1.8149 1.2585 -v -1.0149 0.3719 2.4286 -v -1.0250 -0.0641 2.4526 -v -0.5425 0.7560 1.2980 -v -0.5246 1.8149 1.2552 -v -2.4349 0.3719 0.9996 -v -2.4590 -0.0641 1.0095 -v -1.3014 0.7560 0.5342 -v -1.2585 1.8149 0.5166 -v -2.4286 0.3719 -1.0149 -v -2.4526 -0.0641 -1.0250 -v -1.2980 0.7560 -0.5425 -v -1.2552 1.8149 -0.5246 -v -0.9996 0.3719 -2.4349 -v -1.0095 -0.0641 -2.4590 -v -0.5342 0.7560 -1.3014 -v -0.5166 1.8149 -1.2585 -v 1.0149 0.3719 -2.4286 -v 1.0250 -0.0641 -2.4526 -v 0.5425 0.7560 -1.2980 -v 0.5246 1.8149 -1.2552 -v 2.1428 1.8318 -0.8796 -v 2.1372 1.8318 0.8932 -v 2.0129 1.4147 0.8412 -v 2.0182 1.4147 -0.8285 -v 0.8796 1.8318 2.1428 -v 0.8285 1.4147 2.0182 -v -0.8932 1.8318 2.1372 -v -0.8412 1.4147 2.0129 -v -2.1428 1.8318 0.8796 -v -2.0182 1.4147 0.8285 -v -2.1372 1.8318 -0.8932 -v -2.0129 1.4147 -0.8412 -v -0.8796 1.8318 -2.1428 -v -0.8285 1.4147 -2.0182 -v 0.8932 1.8318 -2.1372 -v 0.8412 1.4147 -2.0129 -v 0.4215 2.1696 1.0809 -v 0.8827 2.1696 1.3472 -v 0.8143 1.8149 1.3867 -v 0.4215 1.8149 1.1599 -v 0.4215 2.5243 1.1599 -v 0.4215 2.5243 1.2443 -v 0.7412 2.5243 1.4289 -v 0.8143 2.5243 1.3867 -v 0.4215 1.8149 1.2443 -v 0.7412 1.8149 1.4289 -v 0.8827 2.1696 1.8798 -v 0.8143 1.8149 1.8403 -v 0.7412 2.5243 1.7981 -v 0.8143 2.5243 1.8403 -v 0.7412 1.8149 1.7981 -v 0.4215 2.1696 2.1461 -v 0.4215 1.8149 2.0671 -v 0.4215 2.5243 1.9827 -v 0.4215 2.5243 2.0671 -v 0.4215 1.8149 1.9827 -v -0.0397 2.1696 1.8798 -v 0.0287 1.8149 1.8403 -v 0.1017 2.5243 1.7981 -v 0.0287 2.5243 1.8403 -v 0.1017 1.8149 1.7981 -v -0.0397 2.1696 1.3472 -v 0.0287 1.8149 1.3867 -v 0.1017 2.5243 1.4289 -v 0.0287 2.5243 1.3867 -v 0.1017 1.8149 1.4289 -v 0.8059 2.5243 1.6104 -v 0.7586 2.5265 1.5850 -v 0.7735 2.5748 1.5456 -v 0.8229 2.5963 1.5597 -v 0.7586 2.5220 1.6358 -v 0.7735 2.6139 1.5784 -v 0.8398 2.6683 1.4739 -v 0.7884 2.6449 1.4621 -v 0.7016 2.7447 1.3431 -v 0.7409 2.7822 1.3381 -v 0.7884 2.6839 1.4949 -v 0.7016 2.7838 1.3758 -v 0.5259 2.8041 1.2723 -v 0.5405 2.8499 1.2575 -v 0.5259 2.8432 1.3051 -v 0.3171 2.8041 1.2723 -v 0.3024 2.8499 1.2575 -v 0.3171 2.8432 1.3051 -v 0.1414 2.7447 1.3431 -v 0.1021 2.7822 1.3381 -v 0.1414 2.7838 1.3758 -v 0.0546 2.6449 1.4621 -v 0.0032 2.6683 1.4739 -v 0.0546 2.6839 1.4949 -v 0.0695 2.5748 1.5456 -v 0.0201 2.5963 1.5597 -v 0.0695 2.6139 1.5784 -v 0.0843 2.5265 1.5850 -v 0.0370 2.5243 1.6104 -v 0.0843 2.5220 1.6358 -v 0.0235 3.7677 0.2755 -v 0.0235 3.7677 0.2601 -v 0.0081 3.7677 0.2601 -v 0.0081 3.7677 0.2755 -v -1.5438 3.5501 0.2185 -v -1.3084 4.6406 1.4987 -v -1.7540 4.6406 1.4987 -v -1.9516 3.5501 0.2185 -v -1.7540 4.6406 1.1371 -v -1.9631 3.9325 0.2185 -v -1.3084 4.6406 1.1371 -v -1.5551 3.9325 0.2185 -v -1.7540 4.6406 -1.4441 -v -1.3084 4.6406 -1.4441 -v -1.5438 3.5501 -0.1639 -v -1.9516 3.5501 -0.1639 -v -1.7540 4.6406 -1.0825 -v -1.9631 3.9325 -0.1639 -v -1.3084 4.6406 -1.0825 -v -1.5551 3.9325 -0.1639 -v -1.5544 3.8720 0.2185 -v -1.9999 3.8720 0.2185 -v -1.7540 1.7269 0.2185 -v -1.3084 1.7269 0.2185 -v -1.9999 3.8720 -0.1639 -v -1.7540 1.7269 -0.1639 -v -1.5544 3.8720 -0.1639 -v -1.3084 1.7269 -0.1639 -v -1.3084 5.9529 0.2185 -v -1.7540 6.0405 0.2185 -v -1.7540 6.0405 -0.1639 -v -1.3084 5.9529 -0.1639 -v -1.3084 4.6406 -1.5881 -v -1.3084 4.6406 1.6293 -v -1.7540 4.6406 1.6293 -v -1.7540 4.6406 -1.5881 -v -1.7540 5.0230 1.2025 -v -1.7540 5.0230 -1.0636 -v -1.3084 5.0230 1.2025 -v -1.3084 5.0230 -1.0636 -v 1.7856 4.6406 1.4987 -v 1.3401 4.6406 1.4987 -v 1.5755 3.5501 0.2185 -v 1.9832 3.5501 0.2185 -v 1.7856 4.6406 1.1371 -v 1.9947 3.9325 0.2185 -v 1.3401 4.6406 1.1371 -v 1.5867 3.9325 0.2185 -v 1.5755 3.5501 -0.1639 -v 1.3401 4.6406 -1.4441 -v 1.7856 4.6406 -1.4441 -v 1.9832 3.5501 -0.1639 -v 1.7856 4.6406 -1.0825 -v 1.9947 3.9325 -0.1639 -v 1.3401 4.6406 -1.0825 -v 1.5867 3.9325 -0.1639 -v 1.7856 1.7269 0.2185 -v 2.0315 3.8720 0.2185 -v 1.5860 3.8720 0.2185 -v 1.3401 1.7269 0.2185 -v 1.7856 1.7269 -0.1639 -v 2.0315 3.8720 -0.1639 -v 1.3401 1.7269 -0.1639 -v 1.5860 3.8720 -0.1639 -v 1.7856 6.0405 0.2185 -v 1.3401 5.9529 0.2185 -v 1.7856 6.0405 -0.1639 -v 1.3401 5.9529 -0.1639 -v 1.3401 4.6406 -1.5881 -v 1.7856 4.6406 -1.5881 -v 1.7856 4.6406 1.6293 -v 1.3401 4.6406 1.6293 -v 1.7856 5.0230 -1.0636 -v 1.7856 5.0230 1.2025 -v 1.3401 5.0230 -1.0636 -v 1.3401 5.0230 1.2025 -v 0.0158 3.3853 -0.1777 -v 0.0158 3.3853 0.2678 -v -1.5551 3.6592 0.1980 -v -1.5551 3.6592 -0.1317 -v 0.0158 3.7677 0.2678 -v -1.5551 4.0416 0.1980 -v 0.0158 3.7677 -0.1777 -v -1.5551 4.0416 -0.1317 -v 1.5798 3.6592 -0.1190 -v 1.5798 3.6592 0.1925 -v 1.5977 4.0416 0.1982 -v 1.5978 4.0416 -0.1247 -v 2.3235 4.2740 -2.1877 -v 2.3235 6.4188 0.0227 -v 2.3257 6.1975 0.0227 -v 2.3235 4.0678 -2.1877 -v -0.0629 5.6948 0.0227 -v -0.0629 3.7727 -2.1877 -v -0.0629 3.9789 -2.1877 -v -0.0629 5.9161 0.0227 -v -2.4516 6.1975 0.0227 -v -2.4494 6.4188 0.0227 -v -2.4494 4.2740 -2.1877 -v -2.4494 4.0678 -2.1877 -v 1.8518 1.4319 -0.7602 -v 1.8470 1.4319 0.7719 -v 1.7317 0.9075 0.7237 -v 1.7363 0.9075 -0.7128 -v 0.7719 1.4319 -1.8470 -v 0.7237 0.9075 -1.7317 -v -0.7602 1.4319 -1.8518 -v -0.7128 0.9075 -1.7363 -v -1.8470 1.4319 -0.7719 -v -1.7317 0.9075 -0.7237 -v -1.8518 1.4319 0.7602 -v -1.7363 0.9075 0.7128 -v -0.7719 1.4319 1.8470 -v -0.7237 0.9075 1.7317 -v 0.7602 1.4319 1.8518 -v 0.7128 0.9075 1.7363 -v 0.7058 0.3719 1.7193 -v 1.7148 0.3719 0.7166 -v -0.7166 0.3719 1.7148 -v -1.7193 0.3719 0.7058 -v -1.7148 0.3719 -0.7166 -v -0.7058 0.3719 -1.7193 -v 0.7166 0.3719 -1.7148 -v 1.7193 0.3719 -0.7058 -v -2.4494 4.2740 2.2332 -v -2.4494 4.0678 2.2332 -v -0.0629 3.7727 2.2332 -v -0.0629 3.9789 2.2332 -v 2.3235 4.2740 2.2332 -v 2.3235 4.0678 2.2332 -# 238 vertices - -vn 0.9985 0.0551 0.0032 -vn -0.9992 -0.0404 -0.0032 -vn 0.7038 0.0551 0.7083 -vn -0.7043 -0.0404 -0.7088 -vn -0.0032 0.0551 0.9985 -vn 0.0032 -0.0404 -0.9992 -vn -0.7083 0.0551 0.7038 -vn 0.7088 -0.0404 -0.7043 -vn -0.9985 0.0551 -0.0032 -vn 0.9992 -0.0404 0.0032 -vn -0.7038 0.0551 -0.7083 -vn 0.7043 -0.0404 0.7088 -vn 0.0032 0.0551 -0.9985 -vn -0.0032 -0.0404 0.9992 -vn 0.7083 0.0551 -0.7038 -vn -0.7088 -0.0404 0.7043 -vn 0.9583 -0.2859 0.0030 -vn 0.6755 -0.2859 0.6797 -vn -0.0030 -0.2859 0.9583 -vn -0.6797 -0.2859 0.6755 -vn -0.9583 -0.2859 -0.0030 -vn -0.6755 -0.2859 -0.6797 -vn 0.0030 -0.2859 -0.9583 -vn 0.6797 -0.2859 -0.6755 -vn 0.0000 1.0000 0.0000 -vn 0.4910 -0.1894 -0.8504 -vn -0.5000 -0.0000 0.8660 -vn 0.9819 -0.1894 -0.0000 -vn -1.0000 0.0000 -0.0000 -vn 0.4910 -0.1894 0.8504 -vn -0.5000 -0.0000 -0.8660 -vn -0.4910 -0.1894 0.8504 -vn -0.0000 1.0000 0.0000 -vn 0.5000 -0.0000 -0.8660 -vn -0.9819 -0.1894 0.0000 -vn 1.0000 0.0000 -0.0000 -vn -0.4910 -0.1894 -0.8504 -vn 0.5000 -0.0000 0.8660 -vn 0.4910 0.1894 -0.8504 -vn 0.9819 0.1894 -0.0000 -vn 0.4910 0.1894 0.8504 -vn -0.4910 0.1894 0.8504 -vn -0.9819 0.1894 0.0000 -vn -0.4910 0.1894 -0.8504 -vn 0.4000 -0.6147 -0.6798 -vn -0.9844 0.1624 -0.0673 -vn 0.4299 0.4376 0.7897 -vn 0.4104 -0.5289 -0.7429 -vn -0.8731 -0.3134 0.3735 -vn 0.4104 0.8234 0.3918 -vn 0.2376 -0.3681 -0.8989 -vn -0.4653 -0.5690 0.6781 -vn 0.2376 0.9492 0.2064 -vn 0.0000 -0.3090 -0.9511 -vn 0.0000 -0.6428 0.7660 -vn -0.0000 0.9903 0.1392 -vn -0.2376 -0.3681 -0.8989 -vn 0.4653 -0.5690 0.6781 -vn -0.2376 0.9492 0.2064 -vn -0.4104 -0.5289 -0.7429 -vn 0.8731 -0.3134 0.3734 -vn -0.4104 0.8234 0.3918 -vn -0.4550 -0.7224 -0.5207 -vn 0.9908 0.0868 -0.1035 -vn -0.4550 0.6382 0.6210 -vn 0.4550 -0.7224 -0.5207 -vn -0.9908 0.0868 -0.1035 -vn 0.4550 0.6382 0.6210 -vn -0.4000 -0.6147 -0.6798 -vn 0.9844 0.1624 -0.0673 -vn -0.4299 0.4376 0.7897 -vn -0.0000 -0.7612 0.6485 -vn -0.9898 0.0808 0.1170 -vn 0.0000 0.7920 -0.6105 -vn 0.9859 -0.0989 -0.1353 -vn 0.0000 -0.7612 -0.6485 -vn -0.9898 0.0808 -0.1170 -vn 0.0000 0.7920 0.6105 -vn 0.9859 -0.0989 0.1353 -vn 0.0000 -0.0000 1.0000 -vn -0.9935 -0.1139 -0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.9935 0.1139 -0.0000 -vn -0.0000 -0.0000 1.0000 -vn -0.9936 0.1127 0.0000 -vn -0.0000 0.0000 -1.0000 -vn 0.9931 -0.1174 0.0000 -vn 0.0000 -1.0000 -0.0000 -vn -1.0000 -0.0000 -0.0000 -vn 1.0000 -0.0000 0.0000 -vn 0.0000 -0.7612 0.6485 -vn 0.9898 0.0808 0.1170 -vn -0.9859 -0.0989 -0.1353 -vn 0.9898 0.0808 -0.1170 -vn -0.9859 -0.0989 0.1353 -vn 0.9935 -0.1139 0.0000 -vn -0.9935 0.1139 0.0000 -vn 0.9936 0.1127 0.0000 -vn -0.9931 -0.1174 -0.0000 -vn -1.0000 -0.0000 0.0000 -vn -0.1717 -0.9851 0.0000 -vn -0.0444 -0.0000 0.9990 -vn 0.1717 0.9851 0.0000 -vn -0.0293 0.0000 -0.9996 -vn 0.1725 -0.9850 0.0000 -vn 0.0475 -0.0086 0.9988 -vn -0.1706 0.9853 -0.0000 -vn 0.0369 -0.0083 -0.9993 -vn 1.0000 0.0053 -0.0056 -vn 0.1223 -0.7317 0.6705 -vn -0.1219 0.7292 -0.6733 -vn -1.0000 0.0053 -0.0056 -vn -0.1223 -0.7317 0.6705 -vn 0.1219 0.7292 -0.6733 -vn 0.9766 -0.2148 0.0031 -vn 0.6928 -0.2148 -0.6884 -vn 0.0031 -0.2148 -0.9766 -vn -0.6884 -0.2148 -0.6928 -vn -0.9766 -0.2148 -0.0031 -vn -0.6928 -0.2148 0.6884 -vn -0.0031 -0.2148 0.9766 -vn 0.6884 -0.2148 0.6928 -vn -0.1030 -0.9947 -0.0003 -vn -0.0726 -0.9947 -0.0731 -vn 0.0003 -0.9947 -0.1030 -vn 0.0731 -0.9947 -0.0726 -vn 0.1030 -0.9947 0.0003 -vn 0.0726 -0.9947 0.0731 -vn -0.0003 -0.9947 0.1030 -vn -0.0731 -0.9947 0.0726 -vn 0.7045 -0.0317 0.7090 -vn -0.0032 -0.0317 0.9995 -vn -0.7090 -0.0317 0.7045 -vn -0.9995 -0.0317 -0.0032 -vn -0.7045 -0.0317 -0.7090 -vn 0.0032 -0.0317 -0.9995 -vn 0.7090 -0.0317 -0.7045 -vn 0.9995 -0.0317 0.0032 -vn 0.0000 1.0000 -0.0000 -vn -0.0000 1.0000 -0.0000 -vn 0.0135 0.9998 -0.0134 -vn 0.0001 0.9998 -0.0190 -vn -0.0134 0.9998 -0.0135 -vn -0.0190 0.9998 -0.0001 -vn -0.0135 0.9998 0.0134 -vn -0.0001 0.9998 0.0190 -vn 0.0134 0.9998 0.0135 -vn 0.0190 0.9998 0.0001 -vn -1.0000 0.0053 0.0056 -vn -0.1223 -0.7317 -0.6705 -vn 0.1219 0.7292 0.6733 -vn 1.0000 0.0053 0.0056 -vn 0.1223 -0.7317 -0.6705 -vn -0.1219 0.7292 0.6733 -# 154 vertex normals - -vt 0.2239 0.9582 0.0000 -vt 0.2956 0.9582 0.0000 -vt 0.2956 0.9813 0.0000 -vt 0.2239 0.9813 0.0000 -vt 0.6981 0.4745 0.0000 -vt 0.6481 0.4745 0.0000 -vt 0.6481 0.4250 0.0000 -vt 0.6981 0.4250 0.0000 -vt 0.0089 0.9582 0.0000 -vt 0.0805 0.9582 0.0000 -vt 0.0805 0.9813 0.0000 -vt 0.0089 0.9813 0.0000 -vt 0.1500 0.9582 0.0000 -vt 0.1500 0.9813 0.0000 -vt 0.2217 0.9582 0.0000 -vt 0.2217 0.9813 0.0000 -vt 0.1522 0.9582 0.0000 -vt 0.1522 0.9813 0.0000 -vt 0.2694 0.8091 0.0000 -vt 0.3575 0.8091 0.0000 -vt 0.3575 0.8362 0.0000 -vt 0.2694 0.8362 0.0000 -vt 0.0050 0.8091 0.0000 -vt 0.0931 0.8091 0.0000 -vt 0.0931 0.8362 0.0000 -vt 0.0050 0.8362 0.0000 -vt 0.1813 0.8091 0.0000 -vt 0.1813 0.8362 0.0000 -vt 0.9021 0.7436 0.0000 -vt 0.9884 0.7433 0.0000 -vt 0.9886 0.7791 0.0000 -vt 0.9022 0.7794 0.0000 -vt 0.9273 0.7182 0.0000 -vt 0.9631 0.7181 0.0000 -vt 0.9633 0.8045 0.0000 -vt 0.9276 0.8046 0.0000 -vt 0.4225 0.7567 0.0000 -vt 0.3739 0.7478 0.0000 -vt 0.3792 0.7144 0.0000 -vt 0.4236 0.7209 0.0000 -vt 0.4096 0.7906 0.0000 -vt 0.4029 0.7965 0.0000 -vt 0.3668 0.7872 0.0000 -vt 0.3687 0.7804 0.0000 -vt 0.9628 0.8255 0.0000 -vt 0.9859 0.8256 0.0000 -vt 0.9856 0.8700 0.0000 -vt 0.9625 0.8699 0.0000 -vt 0.3297 0.7421 0.0000 -vt 0.3319 0.7086 0.0000 -vt 0.3267 0.7831 0.0000 -vt 0.3273 0.7760 0.0000 -vt 0.2845 0.7412 0.0000 -vt 0.2835 0.7076 0.0000 -vt 0.2858 0.7825 0.0000 -vt 0.2856 0.7753 0.0000 -vt 0.2860 0.7825 0.0000 -vt 0.0756 0.6646 0.0000 -vt 0.0832 0.6680 0.0000 -vt 0.0803 0.6775 0.0000 -vt 0.0716 0.6780 0.0000 -vt 0.3119 0.6839 0.0000 -vt 0.2977 0.6888 0.0000 -vt 0.2975 0.6818 0.0000 -vt 0.3061 0.6799 0.0000 -vt 0.2061 0.7218 0.0000 -vt 0.1979 0.7267 0.0000 -vt 0.1950 0.7215 0.0000 -vt 0.2058 0.7160 0.0000 -vt 0.0693 0.6955 0.0000 -vt 0.0782 0.6946 0.0000 -vt 0.0903 0.7196 0.0000 -vt 0.0830 0.7239 0.0000 -vt 0.2823 0.6822 0.0000 -vt 0.2824 0.6892 0.0000 -vt 0.2578 0.6899 0.0000 -vt 0.2577 0.6828 0.0000 -vt 0.1859 0.7298 0.0000 -vt 0.1894 0.7350 0.0000 -vt 0.1688 0.7416 0.0000 -vt 0.1672 0.7359 0.0000 -vt 0.1153 0.7380 0.0000 -vt 0.1113 0.7447 0.0000 -vt 0.2304 0.6905 0.0000 -vt 0.2302 0.6834 0.0000 -vt 0.1447 0.7400 0.0000 -vt 0.1453 0.7346 0.0000 -vt 0.1469 0.7465 0.0000 -vt 0.1468 0.7543 0.0000 -vt 0.2016 0.6916 0.0000 -vt 0.2013 0.6846 0.0000 -vt 0.1206 0.7317 0.0000 -vt 0.1235 0.7271 0.0000 -vt 0.1781 0.7441 0.0000 -vt 0.1816 0.7517 0.0000 -vt 0.1742 0.6930 0.0000 -vt 0.1738 0.6860 0.0000 -vt 0.1006 0.7183 0.0000 -vt 0.1053 0.7147 0.0000 -vt 0.2030 0.7310 0.0000 -vt 0.2093 0.7374 0.0000 -vt 0.1496 0.6944 0.0000 -vt 0.1492 0.6874 0.0000 -vt 0.0874 0.7010 0.0000 -vt 0.0934 0.6991 0.0000 -vt 0.2133 0.7170 0.0000 -vt 0.2193 0.7232 0.0000 -vt 0.1344 0.6954 0.0000 -vt 0.1340 0.6883 0.0000 -vt 0.0867 0.6887 0.0000 -vt 0.0925 0.6872 0.0000 -vt 0.2177 0.7080 0.0000 -vt 0.2256 0.7108 0.0000 -vt 0.1198 0.6917 0.0000 -vt 0.1252 0.6872 0.0000 -vt 0.0853 0.6791 0.0000 -vt 0.0900 0.6756 0.0000 -vt 0.8686 0.4503 0.0000 -vt 0.8602 0.4537 0.0000 -vt 0.8568 0.4454 0.0000 -vt 0.8652 0.4419 0.0000 -vt 0.4316 0.2725 0.0000 -vt 0.4412 0.4245 0.0000 -vt 0.4715 0.4254 0.0000 -vt 0.4631 0.2738 0.0000 -vt 0.4354 0.4803 0.0000 -vt 0.6812 0.4986 0.0000 -vt 0.6391 0.5296 0.0000 -vt 0.4677 0.5253 0.0000 -vt 0.7540 0.7227 0.0000 -vt 0.7259 0.7227 0.0000 -vt 0.7104 0.5721 0.0000 -vt 0.7385 0.5721 0.0000 -vt 0.7328 0.3910 0.0000 -vt 0.7072 0.3910 0.0000 -vt 0.7072 0.2553 0.0000 -vt 0.7328 0.2553 0.0000 -vt 0.7385 0.8750 0.0000 -vt 0.7104 0.8689 0.0000 -vt 0.7328 0.5281 0.0000 -vt 0.7072 0.5281 0.0000 -vt 0.4336 0.8157 0.0000 -vt 0.5568 0.8159 0.0000 -vt 0.5567 0.8330 0.0000 -vt 0.4336 0.8328 0.0000 -vt 0.6156 0.5421 0.0000 -vt 0.5880 0.5670 0.0000 -vt 0.4416 0.5670 0.0000 -vt 0.4077 0.5421 0.0000 -vt 0.5414 0.8438 0.0000 -vt 0.5414 0.8626 0.0000 -vt 0.4454 0.8625 0.0000 -vt 0.4454 0.8436 0.0000 -vt 0.5880 0.5650 0.0000 -vt 0.6156 0.5400 0.0000 -vt 0.4077 0.5400 0.0000 -vt 0.4416 0.5650 0.0000 -vt 0.8568 0.8820 0.0000 -vt 0.8568 0.8568 0.0000 -vt 0.7762 0.8607 0.0000 -vt 0.7762 0.8794 0.0000 -vt 0.8579 0.8109 0.0000 -vt 0.8579 0.8320 0.0000 -vt 0.7705 0.8472 0.0000 -vt 0.7705 0.8260 0.0000 -vt 0.9371 0.8787 0.0000 -vt 0.9371 0.8610 0.0000 -vt 0.9450 0.8260 0.0000 -vt 0.9460 0.8472 0.0000 -vt 0.9380 0.8607 0.0000 -vt 0.9380 0.8790 0.0000 -vt 0.0988 0.4994 0.0000 -vt 0.0988 0.6767 0.0000 -vt 0.0897 0.6679 0.0000 -vt 0.0903 0.4912 0.0000 -vt 0.8296 0.5549 0.0000 -vt 0.8296 0.4722 0.0000 -vt 0.8972 0.4776 0.0000 -vt 0.8978 0.5642 0.0000 -vt 0.2369 0.4875 0.0000 -vt 0.0992 0.4876 0.0000 -vt 0.2368 0.4756 0.0000 -vt 0.2377 0.6567 0.0000 -vt 0.3859 0.6664 0.0000 -vt 0.3768 0.6754 0.0000 -vt 0.3751 0.4981 0.0000 -vt 0.3835 0.4897 0.0000 -vt 0.7620 0.4776 0.0000 -vt 0.7613 0.5642 0.0000 -vt 0.3746 0.4863 0.0000 -vt 0.2718 0.8593 0.0000 -vt 0.3599 0.8593 0.0000 -vt 0.3599 0.8934 0.0000 -vt 0.2718 0.8934 0.0000 -vt 0.1836 0.8593 0.0000 -vt 0.1836 0.8934 0.0000 -vt 0.0955 0.8593 0.0000 -vt 0.0955 0.8934 0.0000 -vt 0.0073 0.8593 0.0000 -vt 0.0073 0.8934 0.0000 -vt 0.6906 0.6470 0.0000 -vt 0.6907 0.6100 0.0000 -vt 0.6947 0.6083 0.0000 -vt 0.6946 0.6487 0.0000 -vt 0.6643 0.6730 0.0000 -vt 0.6660 0.6771 0.0000 -vt 0.6273 0.6729 0.0000 -vt 0.6256 0.6769 0.0000 -vt 0.6012 0.6467 0.0000 -vt 0.5972 0.6483 0.0000 -vt 0.6014 0.6097 0.0000 -vt 0.5973 0.6080 0.0000 -vt 0.6276 0.5836 0.0000 -vt 0.6260 0.5796 0.0000 -vt 0.6646 0.5837 0.0000 -vt 0.6663 0.5797 0.0000 -vt 0.0955 0.9283 0.0000 -vt 0.0073 0.9283 0.0000 -vt 0.1836 0.9283 0.0000 -vt 0.2718 0.9283 0.0000 -vt 0.3599 0.9283 0.0000 -vt 0.6553 0.7336 0.0000 -vt 0.6147 0.7338 0.0000 -vt 0.6062 0.7134 0.0000 -vt 0.6637 0.7132 0.0000 -vt 0.5861 0.7626 0.0000 -vt 0.5656 0.7542 0.0000 -vt 0.5862 0.8032 0.0000 -vt 0.5658 0.8117 0.0000 -vt 0.6150 0.8318 0.0000 -vt 0.6066 0.8522 0.0000 -vt 0.6556 0.8317 0.0000 -vt 0.6641 0.8521 0.0000 -vt 0.6842 0.8029 0.0000 -vt 0.7047 0.8113 0.0000 -vt 0.6841 0.7623 0.0000 -vt 0.7045 0.7537 0.0000 -vt 0.4901 0.7084 0.0000 -vt 0.5278 0.7080 0.0000 -vt 0.5414 0.7398 0.0000 -vt 0.4772 0.7405 0.0000 -vt 0.4632 0.6821 0.0000 -vt 0.4314 0.6956 0.0000 -vt 0.4628 0.6444 0.0000 -vt 0.4307 0.6315 0.0000 -vt 0.4891 0.6175 0.0000 -vt 0.4755 0.5857 0.0000 -vt 0.5268 0.6171 0.0000 -vt 0.5397 0.5850 0.0000 -vt 0.5537 0.6434 0.0000 -vt 0.5855 0.6298 0.0000 -vt 0.5541 0.6811 0.0000 -vt 0.5862 0.6939 0.0000 -# 253 texture coords - -o well -g well -f 1/1/1 2/2/1 3/3/1 -f 3/3/1 4/4/1 1/1/1 -f 5/5/2 6/6/2 7/7/2 -f 7/7/2 8/8/2 5/5/2 -f 2/9/3 9/10/3 10/11/3 -f 10/11/3 3/12/3 2/9/3 -f 6/5/4 11/6/4 12/7/4 -f 12/7/4 7/8/4 6/5/4 -f 9/10/5 13/13/5 14/14/5 -f 14/14/5 10/11/5 9/10/5 -f 11/5/6 15/6/6 16/7/6 -f 16/7/6 12/8/6 11/5/6 -f 13/13/7 17/15/7 18/16/7 -f 18/16/7 14/14/7 13/13/7 -f 15/5/8 19/6/8 20/7/8 -f 20/7/8 16/8/8 15/5/8 -f 17/15/9 21/2/9 22/3/9 -f 22/3/9 18/16/9 17/15/9 -f 19/5/10 23/6/10 24/7/10 -f 24/7/10 20/8/10 19/5/10 -f 21/9/11 25/10/11 26/11/11 -f 26/11/11 22/12/11 21/9/11 -f 23/5/12 27/6/12 28/7/12 -f 28/7/12 24/8/12 23/5/12 -f 25/10/13 29/17/13 30/18/13 -f 30/18/13 26/11/13 25/10/13 -f 28/8/14 27/5/14 31/6/14 -f 31/6/14 32/7/14 28/8/14 -f 29/17/15 1/1/15 4/4/15 -f 4/4/15 30/18/15 29/17/15 -f 32/8/16 31/5/16 5/6/16 -f 5/6/16 8/7/16 32/8/16 -f 33/19/17 34/20/17 35/21/17 -f 35/21/17 36/22/17 33/19/17 -f 34/23/18 37/24/18 38/25/18 -f 38/25/18 35/26/18 34/23/18 -f 37/24/19 39/27/19 40/28/19 -f 40/28/19 38/25/19 37/24/19 -f 39/27/20 41/19/20 42/22/20 -f 42/22/20 40/28/20 39/27/20 -f 41/19/21 43/20/21 44/21/21 -f 44/21/21 42/22/21 41/19/21 -f 43/23/22 45/24/22 46/25/22 -f 46/25/22 44/26/22 43/23/22 -f 45/24/23 47/27/23 48/28/23 -f 48/28/23 46/25/23 45/24/23 -f 47/27/24 33/19/24 36/22/24 -f 36/22/24 48/28/24 47/27/24 -f 19/29/25 6/30/25 5/31/25 -f 5/31/25 23/32/25 19/29/25 -f 6/30/25 19/29/25 15/33/25 -f 15/33/25 11/34/25 6/30/25 -f 23/32/25 5/31/25 31/35/25 -f 31/35/25 27/36/25 23/32/25 -f 49/37/26 50/38/26 51/39/26 -f 51/39/26 52/40/26 49/37/26 -f 53/41/25 54/42/25 55/43/25 -f 55/43/25 56/44/25 53/41/25 -f 57/45/27 58/46/27 55/47/27 -f 55/47/27 54/48/27 57/45/27 -f 50/38/28 59/49/28 60/50/28 -f 60/50/28 51/39/28 50/38/28 -f 56/44/25 55/43/25 61/51/25 -f 61/51/25 62/52/25 56/44/25 -f 58/45/29 63/46/29 61/47/29 -f 61/47/29 55/48/29 58/45/29 -f 59/49/30 64/53/30 65/54/30 -f 65/54/30 60/50/30 59/49/30 -f 62/52/25 61/51/25 66/55/25 -f 66/55/25 67/56/25 62/52/25 -f 63/45/31 68/46/31 66/47/31 -f 66/47/31 61/48/31 63/45/31 -f 64/53/32 69/49/32 70/50/32 -f 70/50/32 65/54/32 64/53/32 -f 67/56/33 66/57/33 71/51/33 -f 71/51/33 72/52/33 67/56/33 -f 68/45/34 73/46/34 71/47/34 -f 71/47/34 66/48/34 68/45/34 -f 69/49/35 74/38/35 75/39/35 -f 75/39/35 70/50/35 69/49/35 -f 72/52/25 71/51/25 76/43/25 -f 76/43/25 77/44/25 72/52/25 -f 73/45/36 78/46/36 76/47/36 -f 76/47/36 71/48/36 73/45/36 -f 74/38/37 49/37/37 52/40/37 -f 52/40/37 75/39/37 74/38/37 -f 77/44/25 76/43/25 54/42/25 -f 54/42/25 53/41/25 77/44/25 -f 76/48/38 78/45/38 57/46/38 -f 57/46/38 54/47/38 76/48/38 -f 53/41/39 56/44/39 50/38/39 -f 50/38/39 49/37/39 53/41/39 -f 56/44/40 62/52/40 59/49/40 -f 59/49/40 50/38/40 56/44/40 -f 62/52/41 67/56/41 64/53/41 -f 64/53/41 59/49/41 62/52/41 -f 67/56/42 72/52/42 69/49/42 -f 69/49/42 64/53/42 67/56/42 -f 72/52/43 77/44/43 74/38/43 -f 74/38/43 69/49/43 72/52/43 -f 77/44/44 53/41/44 49/37/44 -f 49/37/44 74/38/44 77/44/44 -f 79/58/45 80/59/45 81/60/45 -f 81/60/45 82/61/45 79/58/45 -f 83/62/46 84/63/46 81/64/46 -f 81/64/46 80/65/46 83/62/46 -f 79/66/47 82/67/47 84/68/47 -f 84/68/47 83/69/47 79/66/47 -f 85/70/48 86/71/48 87/72/48 -f 87/72/48 88/73/48 85/70/48 -f 86/74/49 89/75/49 90/76/49 -f 90/76/49 87/77/49 86/74/49 -f 89/78/50 85/79/50 88/80/50 -f 88/80/50 90/81/50 89/78/50 -f 88/73/51 87/72/51 91/82/51 -f 91/82/51 92/83/51 88/73/51 -f 87/77/52 90/76/52 93/84/52 -f 93/84/52 91/85/52 87/77/52 -f 90/81/53 88/80/53 92/86/53 -f 92/86/53 93/87/53 90/81/53 -f 92/83/54 91/82/54 94/88/54 -f 94/88/54 95/89/54 92/83/54 -f 91/85/55 93/84/55 96/90/55 -f 96/90/55 94/91/55 91/85/55 -f 93/87/56 92/86/56 95/92/56 -f 95/92/56 96/93/56 93/87/56 -f 95/89/57 94/88/57 97/94/57 -f 97/94/57 98/95/57 95/89/57 -f 94/91/58 96/90/58 99/96/58 -f 99/96/58 97/97/58 94/91/58 -f 96/93/59 95/92/59 98/98/59 -f 98/98/59 99/99/59 96/93/59 -f 98/95/60 97/94/60 100/100/60 -f 100/100/60 101/101/60 98/95/60 -f 97/97/61 99/96/61 102/102/61 -f 102/102/61 100/103/61 97/97/61 -f 99/99/62 98/98/62 101/104/62 -f 101/104/62 102/105/62 99/99/62 -f 100/100/63 103/106/63 104/107/63 -f 104/107/63 101/101/63 100/100/63 -f 102/102/64 105/108/64 103/109/64 -f 103/109/64 100/103/64 102/102/64 -f 102/105/65 101/104/65 104/110/65 -f 104/110/65 105/111/65 102/105/65 -f 86/71/66 85/70/66 82/61/66 -f 82/61/66 81/60/66 86/71/66 -f 89/75/67 86/74/67 81/64/67 -f 81/64/67 84/63/67 89/75/67 -f 82/67/68 85/79/68 89/78/68 -f 89/78/68 84/68/68 82/67/68 -f 103/106/69 106/112/69 107/113/69 -f 107/113/69 104/107/69 103/106/69 -f 108/114/70 106/115/70 103/109/70 -f 103/109/70 105/108/70 108/114/70 -f 107/116/71 108/117/71 105/111/71 -f 105/111/71 104/110/71 107/116/71 -f 109/118/25 110/119/25 111/120/25 -f 111/120/25 112/121/25 109/118/25 -f 109/118/25 110/119/25 111/120/25 -f 111/120/25 112/121/25 109/118/25 -f 113/122/72 114/123/72 115/124/72 -f 115/124/72 116/125/72 113/122/72 -f 116/126/73 115/127/73 117/128/73 -f 117/128/73 118/129/73 116/126/73 -f 118/122/74 117/123/74 119/124/74 -f 119/124/74 120/125/74 118/122/74 -f 120/129/75 119/128/75 114/127/75 -f 114/127/75 113/126/75 120/129/75 -f 121/123/76 122/124/76 123/125/76 -f 123/125/76 124/122/76 121/123/76 -f 125/128/77 121/127/77 124/126/77 -f 124/126/77 126/129/77 125/128/77 -f 127/124/78 125/123/78 126/122/78 -f 126/122/78 128/125/78 127/124/78 -f 122/127/79 127/128/79 128/129/79 -f 128/129/79 123/126/79 122/127/79 -f 129/130/80 130/131/80 131/132/80 -f 131/132/80 132/133/80 129/130/80 -f 130/134/81 133/135/81 134/136/81 -f 134/136/81 131/137/81 130/134/81 -f 133/131/82 135/130/82 136/133/82 -f 136/133/82 134/132/82 133/131/82 -f 135/135/83 129/134/83 132/137/83 -f 132/137/83 136/136/83 135/135/83 -f 129/130/84 137/138/84 138/139/84 -f 138/139/84 130/131/84 129/130/84 -f 130/134/85 138/140/85 139/141/85 -f 139/141/85 133/135/85 130/134/85 -f 133/131/86 139/139/86 140/138/86 -f 140/138/86 135/130/86 133/131/86 -f 135/135/87 140/141/87 137/140/87 -f 137/140/87 129/134/87 135/135/87 -f 141/142/88 142/143/88 143/144/88 -f 143/144/88 144/145/88 141/142/88 -f 143/146/89 145/147/89 146/148/89 -f 146/148/89 144/149/89 143/146/89 -f 145/150/25 147/151/25 148/152/25 -f 148/152/25 146/153/25 145/150/25 -f 147/154/90 142/155/90 141/156/90 -f 141/156/90 148/157/90 147/154/90 -f 149/123/91 150/124/91 151/125/91 -f 151/125/91 152/122/91 149/123/91 -f 153/128/92 149/127/92 152/126/92 -f 152/126/92 154/129/92 153/128/92 -f 155/124/74 153/123/74 154/122/74 -f 154/122/74 156/125/74 155/124/74 -f 150/127/93 155/128/93 156/129/93 -f 156/129/93 151/126/93 150/127/93 -f 157/125/76 158/124/76 159/123/76 -f 159/123/76 160/122/76 157/125/76 -f 160/126/94 159/127/94 161/128/94 -f 161/128/94 162/129/94 160/126/94 -f 162/122/78 161/123/78 163/124/78 -f 163/124/78 164/125/78 162/122/78 -f 164/129/95 163/128/95 158/127/95 -f 158/127/95 157/126/95 164/129/95 -f 165/133/84 166/130/84 167/131/84 -f 167/131/84 168/132/84 165/133/84 -f 169/136/96 170/135/96 166/134/96 -f 166/134/96 165/137/96 169/136/96 -f 171/132/82 172/131/82 170/130/82 -f 170/130/82 169/133/82 171/132/82 -f 168/137/97 167/134/97 172/135/97 -f 172/135/97 171/136/97 168/137/97 -f 173/138/80 174/139/80 167/131/80 -f 167/131/80 166/130/80 173/138/80 -f 175/141/98 173/140/98 166/134/98 -f 166/134/98 170/135/98 175/141/98 -f 176/139/82 175/138/82 170/130/82 -f 170/130/82 172/131/82 176/139/82 -f 174/140/99 176/141/99 172/135/99 -f 172/135/99 167/134/99 174/140/99 -f 177/143/88 178/144/88 179/145/88 -f 179/145/88 180/142/88 177/143/88 -f 181/157/36 182/154/36 179/155/36 -f 179/155/36 178/156/36 181/157/36 -f 183/151/25 184/152/25 182/153/25 -f 182/153/25 181/150/25 183/151/25 -f 177/156/100 180/155/100 184/154/100 -f 184/154/100 183/157/100 177/156/100 -f 185/158/101 186/159/101 187/160/101 -f 187/160/101 188/161/101 185/158/101 -f 186/162/102 189/163/102 190/164/102 -f 190/164/102 187/165/102 186/162/102 -f 189/159/103 191/158/103 192/161/103 -f 192/161/103 190/160/103 189/159/103 -f 191/163/104 185/162/104 188/165/104 -f 188/165/104 192/164/104 191/163/104 -f 185/158/105 193/166/105 194/167/105 -f 194/167/105 186/159/105 185/158/105 -f 186/162/106 194/168/106 195/169/106 -f 195/169/106 189/163/106 186/162/106 -f 189/159/107 195/170/107 196/171/107 -f 196/171/107 191/158/107 189/159/107 -f 191/163/108 196/169/108 193/168/108 -f 193/168/108 185/162/108 191/163/108 -f 197/172/109 198/173/109 199/174/109 -f 199/174/109 200/175/109 197/172/109 -f 201/176/110 202/177/110 200/178/110 -f 200/178/110 199/179/110 201/176/110 -f 203/180/82 197/172/82 200/181/82 -f 200/181/82 202/182/82 203/180/82 -f 204/183/111 198/173/111 197/172/111 -f 197/172/111 203/180/111 204/183/111 -f 205/184/112 206/185/112 207/186/112 -f 207/186/112 208/187/112 205/184/112 -f 208/188/113 202/177/113 201/176/113 -f 201/176/113 205/189/113 208/188/113 -f 208/190/82 207/186/82 203/180/82 -f 203/180/82 202/182/82 208/190/82 -f 207/186/114 206/185/114 204/183/114 -f 204/183/114 203/180/114 207/186/114 -f 209/191/115 210/192/115 211/193/115 -f 211/193/115 212/194/115 209/191/115 -f 213/195/116 209/191/116 212/194/116 -f 212/194/116 214/196/116 213/195/116 -f 215/197/117 213/195/117 214/196/117 -f 214/196/117 216/198/117 215/197/117 -f 217/199/118 215/197/118 216/198/118 -f 216/198/118 218/200/118 217/199/118 -f 219/191/119 217/192/119 218/193/119 -f 218/193/119 220/194/119 219/191/119 -f 221/195/120 219/191/120 220/194/120 -f 220/194/120 222/196/120 221/195/120 -f 223/197/121 221/195/121 222/196/121 -f 222/196/121 224/198/121 223/197/121 -f 210/199/122 223/197/122 224/198/122 -f 224/198/122 211/200/122 210/199/122 -f 210/201/123 209/202/123 36/203/123 -f 36/203/123 35/204/123 210/201/123 -f 223/205/124 210/201/124 35/204/124 -f 35/204/124 38/206/124 223/205/124 -f 221/207/125 223/205/125 38/206/125 -f 38/206/125 40/208/125 221/207/125 -f 219/209/126 221/207/126 40/208/126 -f 40/208/126 42/210/126 219/209/126 -f 217/211/127 219/209/127 42/210/127 -f 42/210/127 44/212/127 217/211/127 -f 215/213/128 217/211/128 44/212/128 -f 44/212/128 46/214/128 215/213/128 -f 213/215/129 215/213/129 46/214/129 -f 46/214/129 48/216/129 213/215/129 -f 209/202/130 213/215/130 48/216/130 -f 48/216/130 36/203/130 209/202/130 -f 211/200/131 224/198/131 225/217/131 -f 225/217/131 226/218/131 211/200/131 -f 224/198/132 222/196/132 227/219/132 -f 227/219/132 225/217/132 224/198/132 -f 222/196/133 220/194/133 228/220/133 -f 228/220/133 227/219/133 222/196/133 -f 220/194/134 218/193/134 229/221/134 -f 229/221/134 228/220/134 220/194/134 -f 218/200/135 216/198/135 230/217/135 -f 230/217/135 229/218/135 218/200/135 -f 216/198/136 214/196/136 231/219/136 -f 231/219/136 230/217/136 216/198/136 -f 214/196/137 212/194/137 232/220/137 -f 232/220/137 231/219/137 214/196/137 -f 212/194/138 211/193/138 226/221/138 -f 226/221/138 232/220/138 212/194/138 -f 232/222/33 226/223/33 2/224/33 -f 2/224/33 1/225/33 232/222/33 -f 226/223/139 225/226/139 9/227/139 -f 9/227/139 2/224/139 226/223/139 -f 225/226/33 227/228/33 13/229/33 -f 13/229/33 9/227/33 225/226/33 -f 227/228/25 228/230/25 17/231/25 -f 17/231/25 13/229/25 227/228/25 -f 228/230/139 229/232/139 21/233/139 -f 21/233/139 17/231/139 228/230/139 -f 229/232/25 230/234/25 25/235/25 -f 25/235/25 21/233/25 229/232/25 -f 230/234/25 231/236/25 29/237/25 -f 29/237/25 25/235/25 230/234/25 -f 231/236/140 232/222/140 1/225/140 -f 1/225/140 29/237/140 231/236/140 -f 16/238/141 20/239/141 41/240/141 -f 41/240/141 39/241/141 16/238/141 -f 12/242/142 16/238/142 39/241/142 -f 39/241/142 37/243/142 12/242/142 -f 7/244/143 12/242/143 37/243/143 -f 37/243/143 34/245/143 7/244/143 -f 8/246/144 7/244/144 34/245/144 -f 34/245/144 33/247/144 8/246/144 -f 32/248/145 8/246/145 33/247/145 -f 33/247/145 47/249/145 32/248/145 -f 28/250/146 32/248/146 47/249/146 -f 47/249/146 45/251/146 28/250/146 -f 24/252/147 28/250/147 45/251/147 -f 45/251/147 43/253/147 24/252/147 -f 20/239/148 24/252/148 43/253/148 -f 43/253/148 41/240/148 20/239/148 -f 233/172/149 206/173/149 205/174/149 -f 205/174/149 234/175/149 233/172/149 -f 201/176/150 235/177/150 234/178/150 -f 234/178/150 205/179/150 201/176/150 -f 236/180/84 233/172/84 234/181/84 -f 234/181/84 235/182/84 236/180/84 -f 204/183/151 206/173/151 233/172/151 -f 233/172/151 236/180/151 204/183/151 -f 199/184/152 198/185/152 237/186/152 -f 237/186/152 238/187/152 199/184/152 -f 238/188/153 235/177/153 201/176/153 -f 201/176/153 199/189/153 238/188/153 -f 238/190/84 237/186/84 236/180/84 -f 236/180/84 235/182/84 238/190/84 -f 237/186/154 198/185/154 204/183/154 -f 204/183/154 236/180/154 237/186/154 -# 368 faces - diff --git a/examples/web/models/resources/models/well_diffuse.png b/examples/web/models/resources/models/well_diffuse.png Binary files differdeleted file mode 100644 index f8f6686..0000000 --- a/examples/web/models/resources/models/well_diffuse.png +++ /dev/null diff --git a/examples/web/models/resources/plane/LICENSE b/examples/web/models/resources/plane/LICENSE deleted file mode 100644 index 57333b2..0000000 --- a/examples/web/models/resources/plane/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -WWI Plane Model created by GiaHanLam (https://sketchfab.com/GiaHanLam) -This model is free to use, licensed as Creative Commons Attribution (CC-BY 4.0) - -License details: https://creativecommons.org/licenses/by/4.0/ - -As per the license, author must be credited and commercial use is allowed. - -This model was donwload from author Sketchfab account: https://sketchfab.com/3d-models/wwi-plane-model-f0d39a6daacd4925a8922db193886715 - diff --git a/examples/web/models/resources/plane/plane.bin b/examples/web/models/resources/plane/plane.bin Binary files differdeleted file mode 100644 index 4e5ee53..0000000 --- a/examples/web/models/resources/plane/plane.bin +++ /dev/null diff --git a/examples/web/models/resources/plane/plane.gltf b/examples/web/models/resources/plane/plane.gltf deleted file mode 100644 index 928b172..0000000 --- a/examples/web/models/resources/plane/plane.gltf +++ /dev/null @@ -1,327 +0,0 @@ -{ - "accessors": [ - { - "bufferView": 2, - "componentType": 5126, - "count": 3446, - "max": [ - 143.99604797363281, - 168.74668884277344, - 75.31597900390625 - ], - "min": [ - -143.99604797363281, - -43.94732666015625, - -49.556678771972656 - ], - "type": "VEC3" - }, - { - "bufferView": 2, - "byteOffset": 41352, - "componentType": 5126, - "count": 3446, - "max": [ - 1, - 0.99916732311248779, - 0.99978786706924438 - ], - "min": [ - -1, - -0.99928808212280273, - -0.99977350234985352 - ], - "type": "VEC3" - }, - { - "bufferView": 3, - "componentType": 5126, - "count": 3446, - "max": [ - 1, - 1, - 1, - 1 - ], - "min": [ - 0, - 0, - 0, - 0 - ], - "type": "VEC4" - }, - { - "bufferView": 1, - "componentType": 5126, - "count": 3446, - "max": [ - 4.8965663909912109, - 0.99786919355392456 - ], - "min": [ - 0.0036561768501996994, - 0.0083234198391437531 - ], - "type": "VEC2" - }, - { - "bufferView": 0, - "componentType": 5125, - "count": 7692, - "max": [ - 3445 - ], - "min": [ - 0 - ], - "type": "SCALAR" - } - ], - "asset": { - "extras": { - "author": "GiaHanLam (https://sketchfab.com/GiaHanLam)", - "license": "CC-BY-4.0 (http://creativecommons.org/licenses/by/4.0/)", - "source": "https://sketchfab.com/3d-models/wwi-plane-model-f0d39a6daacd4925a8922db193886715", - "title": "WWI Plane Model" - }, - "generator": "Sketchfab-8.25.0", - "version": "2.0" - }, - "bufferViews": [ - { - "buffer": 0, - "byteLength": 30768, - "byteOffset": 0, - "name": "floatBufferViews", - "target": 34963 - }, - { - "buffer": 0, - "byteLength": 27568, - "byteOffset": 30768, - "byteStride": 8, - "name": "floatBufferViews", - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 82704, - "byteOffset": 58336, - "byteStride": 12, - "name": "floatBufferViews", - "target": 34962 - }, - { - "buffer": 0, - "byteLength": 55136, - "byteOffset": 141040, - "byteStride": 16, - "name": "floatBufferViews", - "target": 34962 - } - ], - "buffers": [ - { - "byteLength": 196176, - "uri": "plane.bin" - } - ], - "images": [ - { - "uri": "plane_diffuse.png" - } - ], - "materials": [ - { - "doubleSided": true, - "name": "Material_24", - "pbrMetallicRoughness": { - "baseColorFactor": [ - 1, - 1, - 1, - 1 - ], - "baseColorTexture": { - "index": 0, - "texCoord": 0 - }, - "metallicFactor": 0, - "roughnessFactor": 0.59999999999999998 - } - } - ], - "meshes": [ - { - "name": "BODY_Material #24_0", - "primitives": [ - { - "attributes": { - "COLOR_0": 2, - "NORMAL": 1, - "POSITION": 0, - "TEXCOORD_0": 3 - }, - "indices": 4, - "material": 0, - "mode": 4 - } - ] - } - ], - "nodes": [ - { - "children": [ - 1 - ], - "name": "RootNode (gltf orientation matrix)", - "rotation": [ - -0.70710678118654746, - -0, - -0, - 0.70710678118654757 - ] - }, - { - "children": [ - 2 - ], - "name": "RootNode (model correction matrix)" - }, - { - "children": [ - 3 - ], - "matrix": [ - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - -1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - "name": "base" - }, - { - "children": [ - 4, - 6 - ], - "name": "RootNode" - }, - { - "children": [ - 5 - ], - "matrix": [ - 1, - 0, - 0, - 0, - 0, - 2.2204460492503131e-16, - -1, - 0, - 0, - 1, - 2.2204460492503131e-16, - 0, - 0, - 0, - 0, - 1 - ], - "name": "BODY" - }, - { - "mesh": 0, - "name": "BODY_Material #24_0" - }, - { - "children": [ - 7 - ], - "matrix": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - -680, - 0, - 90, - 1 - ], - "name": "Sky001" - }, - { - "children": [ - 8 - ], - "matrix": [ - 1, - 0, - 0, - 0, - 0, - 2.2204460492503131e-16, - 1, - 0, - 0, - -1, - 2.2204460492503131e-16, - 0, - 0, - 0, - 0, - 1 - ], - "name": "" - }, - { - "name": "" - } - ], - "samplers": [ - { - "magFilter": 9729, - "minFilter": 9987, - "wrapS": 10497, - "wrapT": 10497 - } - ], - "scene": 0, - "scenes": [ - { - "name": "OSG_Scene", - "nodes": [ - 0 - ] - } - ], - "textures": [ - { - "sampler": 0, - "source": 0 - } - ] -} - diff --git a/examples/web/models/resources/plane/plane_diffuse.png b/examples/web/models/resources/plane/plane_diffuse.png Binary files differdeleted file mode 100644 index 07371c0..0000000 --- a/examples/web/models/resources/plane/plane_diffuse.png +++ /dev/null diff --git a/examples/web/models/resources/shaders/glsl100/cubemap.fs b/examples/web/models/resources/shaders/glsl100/cubemap.fs deleted file mode 100644 index 402cdea..0000000 --- a/examples/web/models/resources/shaders/glsl100/cubemap.fs +++ /dev/null @@ -1,29 +0,0 @@ -#version 100 - -precision mediump float; - -// Input vertex attributes (from vertex shader) -varying vec3 fragPosition; - -// Input uniform values -uniform sampler2D equirectangularMap; - -vec2 SampleSphericalMap(vec3 v) -{ - vec2 uv = vec2(atan(v.z, v.x), asin(v.y)); - uv *= vec2(0.1591, 0.3183); - uv += 0.5; - return uv; -} - -void main() -{ - // Normalize local position - vec2 uv = SampleSphericalMap(normalize(fragPosition)); - - // Fetch color from texture map - vec3 color = texture2D(equirectangularMap, uv).rgb; - - // Calculate final fragment color - gl_FragColor = vec4(color, 1.0); -} diff --git a/examples/web/models/resources/shaders/glsl100/cubemap.vs b/examples/web/models/resources/shaders/glsl100/cubemap.vs deleted file mode 100644 index 6f486fb..0000000 --- a/examples/web/models/resources/shaders/glsl100/cubemap.vs +++ /dev/null @@ -1,20 +0,0 @@ -#version 100 - -// Input vertex attributes -attribute vec3 vertexPosition; - -// Input uniform values -uniform mat4 matProjection; -uniform mat4 matView; - -// Output vertex attributes (to fragment shader) -varying vec3 fragPosition; - -void main() -{ - // Calculate fragment position based on model transformations - fragPosition = vertexPosition; - - // Calculate final vertex position - gl_Position = matProjection*matView*vec4(vertexPosition, 1.0); -} diff --git a/examples/web/models/resources/shaders/glsl100/skybox.fs b/examples/web/models/resources/shaders/glsl100/skybox.fs deleted file mode 100644 index 1269a96..0000000 --- a/examples/web/models/resources/shaders/glsl100/skybox.fs +++ /dev/null @@ -1,28 +0,0 @@ -#version 100 - -precision mediump float; - -// Input vertex attributes (from vertex shader) -varying vec3 fragPosition; - -// Input uniform values -uniform samplerCube environmentMap; -uniform bool vflipped; - -void main() -{ - // Fetch color from texture map - vec4 texelColor = vec4(0.0); - - if (vflipped) texelColor = textureCube(environmentMap, vec3(fragPosition.x, -fragPosition.y, fragPosition.z)); - else texelColor = textureCube(environmentMap, fragPosition); - - vec3 color = vec3(texelColor.x, texelColor.y, texelColor.z); - - // Apply gamma correction - color = color/(color + vec3(1.0)); - color = pow(color, vec3(1.0/2.2)); - - // Calculate final fragment color - gl_FragColor = vec4(color, 1.0); -} diff --git a/examples/web/models/resources/shaders/glsl100/skybox.vs b/examples/web/models/resources/shaders/glsl100/skybox.vs deleted file mode 100644 index e440ace..0000000 --- a/examples/web/models/resources/shaders/glsl100/skybox.vs +++ /dev/null @@ -1,24 +0,0 @@ -#version 100 - -// Input vertex attributes -attribute vec3 vertexPosition; - -// Input uniform values -uniform mat4 matProjection; -uniform mat4 matView; - -// Output vertex attributes (to fragment shader) -varying vec3 fragPosition; - -void main() -{ - // Calculate fragment position based on model transformations - fragPosition = vertexPosition; - - // Remove translation from the view matrix - mat4 rotView = mat4(mat3(matView)); - vec4 clipPos = matProjection*rotView*vec4(vertexPosition, 1.0); - - // Calculate final vertex position - gl_Position = clipPos; -} diff --git a/examples/web/models/resources/shaders/glsl330/brdf.fs b/examples/web/models/resources/shaders/glsl330/brdf.fs deleted file mode 100644 index d04bc66..0000000 --- a/examples/web/models/resources/shaders/glsl330/brdf.fs +++ /dev/null @@ -1,133 +0,0 @@ -/******************************************************************************************* -* -* BRDF LUT Generation - Bidirectional reflectance distribution function fragment shader -* -* REF: https://github.com/HectorMF/BRDFGenerator -* -* Copyright (c) 2017 Victor Fisac -* -**********************************************************************************************/ - -#version 330 - - -// Input vertex attributes (from vertex shader) -in vec2 fragTexCoord; - -// Constant values -const float PI = 3.14159265359; -const uint MAX_SAMPLES = 1024u; - -// Output fragment color -out vec4 finalColor; - -vec2 Hammersley(uint i, uint N); -float RadicalInverseVdC(uint bits); -float GeometrySchlickGGX(float NdotV, float roughness); -float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness); -vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness); -vec2 IntegrateBRDF(float NdotV, float roughness); - -float RadicalInverseVdC(uint bits) -{ - bits = (bits << 16u) | (bits >> 16u); - bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u); - bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u); - bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u); - bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u); - return float(bits) * 2.3283064365386963e-10; // / 0x100000000 -} - -// Compute Hammersley coordinates -vec2 Hammersley(uint i, uint N) -{ - return vec2(float(i)/float(N), RadicalInverseVdC(i)); -} - -// Integrate number of importance samples for (roughness and NoV) -vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness) -{ - float a = roughness*roughness; - float phi = 2.0 * PI * Xi.x; - float cosTheta = sqrt((1.0 - Xi.y)/(1.0 + (a*a - 1.0)*Xi.y)); - float sinTheta = sqrt(1.0 - cosTheta*cosTheta); - - // Transform from spherical coordinates to cartesian coordinates (halfway vector) - vec3 H = vec3(cos(phi)*sinTheta, sin(phi)*sinTheta, cosTheta); - - // Transform from tangent space H vector to world space sample vector - vec3 up = ((abs(N.z) < 0.999) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0)); - vec3 tangent = normalize(cross(up, N)); - vec3 bitangent = cross(N, tangent); - vec3 sampleVec = tangent*H.x + bitangent*H.y + N*H.z; - - return normalize(sampleVec); -} - -float GeometrySchlickGGX(float NdotV, float roughness) -{ - // For IBL k is calculated different - float k = (roughness*roughness)/2.0; - - float nom = NdotV; - float denom = NdotV*(1.0 - k) + k; - - return nom/denom; -} - -// Compute the geometry term for the BRDF given roughness squared, NoV, NoL -float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness) -{ - float NdotV = max(dot(N, V), 0.0); - float NdotL = max(dot(N, L), 0.0); - float ggx2 = GeometrySchlickGGX(NdotV, roughness); - float ggx1 = GeometrySchlickGGX(NdotL, roughness); - - return ggx1*ggx2; -} - -vec2 IntegrateBRDF(float NdotV, float roughness) -{ - float A = 0.0; - float B = 0.0; - vec3 V = vec3(sqrt(1.0 - NdotV*NdotV), 0.0, NdotV); - vec3 N = vec3(0.0, 0.0, 1.0); - - for (uint i = 0u; i < MAX_SAMPLES; i++) - { - // Generate a sample vector that's biased towards the preferred alignment direction (importance sampling) - - vec2 Xi = Hammersley(i, MAX_SAMPLES); // Compute a Hammersely coordinate - vec3 H = ImportanceSampleGGX(Xi, N, roughness); // Integrate number of importance samples for (roughness and NoV) - vec3 L = normalize(2.0*dot(V, H)*H - V); // Compute reflection vector L - - float NdotL = max(L.z, 0.0); // Compute normal dot light - float NdotH = max(H.z, 0.0); // Compute normal dot half - float VdotH = max(dot(V, H), 0.0); // Compute view dot half - - if (NdotL > 0.0) - { - float G = GeometrySmith(N, V, L, roughness); // Compute the geometry term for the BRDF given roughness squared, NoV, NoL - float GVis = (G*VdotH)/(NdotH*NdotV); // Compute the visibility term given G, VoH, NoH, NoV, NoL - float Fc = pow(1.0 - VdotH, 5.0); // Compute the fresnel term given VoH - - A += (1.0 - Fc)*GVis; // Sum the result given fresnel, geometry, visibility - B += Fc*GVis; - } - } - - // Calculate brdf average sample - A /= float(MAX_SAMPLES); - B /= float(MAX_SAMPLES); - - return vec2(A, B); -} - -void main() -{ - // Calculate brdf based on texture coordinates - vec2 brdf = IntegrateBRDF(fragTexCoord.x, fragTexCoord.y); - - // Calculate final fragment color - finalColor = vec4(brdf.r, brdf.g, 0.0, 1.0); -} diff --git a/examples/web/models/resources/shaders/glsl330/brdf.vs b/examples/web/models/resources/shaders/glsl330/brdf.vs deleted file mode 100644 index 0638467..0000000 --- a/examples/web/models/resources/shaders/glsl330/brdf.vs +++ /dev/null @@ -1,25 +0,0 @@ -/******************************************************************************************* -* -* rPBR [shader] - Bidirectional reflectance distribution function vertex shader -* -* Copyright (c) 2017 Victor Fisac -* -**********************************************************************************************/ - -#version 330 - -// Input vertex attributes -in vec3 vertexPosition; -in vec2 vertexTexCoord; - -// Output vertex attributes (to fragment shader) -out vec2 fragTexCoord; - -void main() -{ - // Calculate fragment position based on model transformations - fragTexCoord = vertexTexCoord; - - // Calculate final vertex position - gl_Position = vec4(vertexPosition, 1.0); -}
\ No newline at end of file diff --git a/examples/web/models/resources/shaders/glsl330/cubemap.fs b/examples/web/models/resources/shaders/glsl330/cubemap.fs deleted file mode 100644 index e4d4ddd..0000000 --- a/examples/web/models/resources/shaders/glsl330/cubemap.fs +++ /dev/null @@ -1,30 +0,0 @@ -#version 330 - -// Input vertex attributes (from vertex shader) -in vec3 fragPosition; - -// Input uniform values -uniform sampler2D equirectangularMap; - -// Output fragment color -out vec4 finalColor; - -vec2 SampleSphericalMap(vec3 v) -{ - vec2 uv = vec2(atan(v.z, v.x), asin(v.y)); - uv *= vec2(0.1591, 0.3183); - uv += 0.5; - return uv; -} - -void main() -{ - // Normalize local position - vec2 uv = SampleSphericalMap(normalize(fragPosition)); - - // Fetch color from texture map - vec3 color = texture(equirectangularMap, uv).rgb; - - // Calculate final fragment color - finalColor = vec4(color, 1.0); -} diff --git a/examples/web/models/resources/shaders/glsl330/cubemap.vs b/examples/web/models/resources/shaders/glsl330/cubemap.vs deleted file mode 100644 index 8c1cde4..0000000 --- a/examples/web/models/resources/shaders/glsl330/cubemap.vs +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************************* -* -* rPBR [shader] - Equirectangular to cubemap vertex shader -* -* Copyright (c) 2017 Victor Fisac -* -**********************************************************************************************/ - -#version 330 - -// Input vertex attributes -in vec3 vertexPosition; - -// Input uniform values -uniform mat4 matProjection; -uniform mat4 matView; - -// Output vertex attributes (to fragment shader) -out vec3 fragPosition; - -void main() -{ - // Calculate fragment position based on model transformations - fragPosition = vertexPosition; - - // Calculate final vertex position - gl_Position = matProjection*matView*vec4(vertexPosition, 1.0); -} diff --git a/examples/web/models/resources/shaders/glsl330/irradiance.fs b/examples/web/models/resources/shaders/glsl330/irradiance.fs deleted file mode 100644 index 4ef03e0..0000000 --- a/examples/web/models/resources/shaders/glsl330/irradiance.fs +++ /dev/null @@ -1,58 +0,0 @@ -/******************************************************************************************* -* -* rPBR [shader] - Irradiance cubemap fragment shader -* -* Copyright (c) 2017 Victor Fisac -* -**********************************************************************************************/ - -#version 330 - -// Input vertex attributes (from vertex shader) -in vec3 fragPosition; - -// Input uniform values -uniform samplerCube environmentMap; - -// Constant values -const float PI = 3.14159265359; - -// Output fragment color -out vec4 finalColor; - -void main() -{ - // The sample direction equals the hemisphere's orientation - vec3 normal = normalize(fragPosition); - - vec3 irradiance = vec3(0.0); - - vec3 up = vec3(0.0, 1.0, 0.0); - vec3 right = cross(up, normal); - up = cross(normal, right); - - float sampleDelta = 0.025; - float nrSamples = 0.0; - - for (float phi = 0.0; phi < 2.0*PI; phi += sampleDelta) - { - for (float theta = 0.0; theta < 0.5*PI; theta += sampleDelta) - { - // Spherical to cartesian (in tangent space) - vec3 tangentSample = vec3(sin(theta)*cos(phi), sin(theta)*sin(phi), cos(theta)); - - // tangent space to world - vec3 sampleVec = tangentSample.x*right + tangentSample.y*up + tangentSample.z*normal; - - // Fetch color from environment cubemap - irradiance += texture(environmentMap, sampleVec).rgb*cos(theta)*sin(theta); - nrSamples++; - } - } - - // Calculate irradiance average value from samples - irradiance = PI*irradiance*(1.0/float(nrSamples)); - - // Calculate final fragment color - finalColor = vec4(irradiance, 1.0); -} diff --git a/examples/web/models/resources/shaders/glsl330/pbr.fs b/examples/web/models/resources/shaders/glsl330/pbr.fs deleted file mode 100644 index 68bf203..0000000 --- a/examples/web/models/resources/shaders/glsl330/pbr.fs +++ /dev/null @@ -1,300 +0,0 @@ -/******************************************************************************************* -* -* rPBR [shader] - Physically based rendering fragment shader -* -* Copyright (c) 2017 Victor Fisac -* -**********************************************************************************************/ - -#version 330 - -#define MAX_REFLECTION_LOD 4.0 -#define MAX_DEPTH_LAYER 20 -#define MIN_DEPTH_LAYER 10 - -#define MAX_LIGHTS 4 -#define LIGHT_DIRECTIONAL 0 -#define LIGHT_POINT 1 - -struct MaterialProperty { - vec3 color; - int useSampler; - sampler2D sampler; -}; - -struct Light { - int enabled; - int type; - vec3 position; - vec3 target; - vec4 color; -}; - -// Input vertex attributes (from vertex shader) -in vec3 fragPosition; -in vec2 fragTexCoord; -in vec3 fragNormal; -in vec3 fragTangent; -in vec3 fragBinormal; - -// Input material values -uniform MaterialProperty albedo; -uniform MaterialProperty normals; -uniform MaterialProperty metalness; -uniform MaterialProperty roughness; -uniform MaterialProperty occlusion; -uniform MaterialProperty emission; -uniform MaterialProperty height; - -// Input uniform values -uniform samplerCube irradianceMap; -uniform samplerCube prefilterMap; -uniform sampler2D brdfLUT; - -// Input lighting values -uniform Light lights[MAX_LIGHTS]; - -// Other uniform values -uniform int renderMode; -uniform vec3 viewPos; -vec2 texCoord; - -// Constant values -const float PI = 3.14159265359; - -// Output fragment color -out vec4 finalColor; - -vec3 ComputeMaterialProperty(MaterialProperty property); -float DistributionGGX(vec3 N, vec3 H, float roughness); -float GeometrySchlickGGX(float NdotV, float roughness); -float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness); -vec3 fresnelSchlick(float cosTheta, vec3 F0); -vec3 fresnelSchlickRoughness(float cosTheta, vec3 F0, float roughness); -vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir); - -// WARNING: There is some weird behaviour with this function, always returns black! -// Yes, I even tried: return texture(property.sampler, texCoord).rgb; -vec3 ComputeMaterialProperty(MaterialProperty property) -{ - vec3 result = vec3(0.0, 0.0, 0.0); - - if (property.useSampler == 1) result = texture(property.sampler, texCoord).rgb; - else result = property.color; - - return result; -} - -float DistributionGGX(vec3 N, vec3 H, float roughness) -{ - float a = roughness*roughness; - float a2 = a*a; - float NdotH = max(dot(N, H), 0.0); - float NdotH2 = NdotH*NdotH; - - float nom = a2; - float denom = (NdotH2*(a2 - 1.0) + 1.0); - denom = PI*denom*denom; - - return nom/denom; -} - -float GeometrySchlickGGX(float NdotV, float roughness) -{ - float r = (roughness + 1.0); - float k = r*r/8.0; - - float nom = NdotV; - float denom = NdotV*(1.0 - k) + k; - - return nom/denom; -} -float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness) -{ - float NdotV = max(dot(N, V), 0.0); - float NdotL = max(dot(N, L), 0.0); - float ggx2 = GeometrySchlickGGX(NdotV, roughness); - float ggx1 = GeometrySchlickGGX(NdotL, roughness); - - return ggx1*ggx2; -} - -vec3 fresnelSchlick(float cosTheta, vec3 F0) -{ - return F0 + (1.0 - F0)*pow(1.0 - cosTheta, 5.0); -} - -vec3 fresnelSchlickRoughness(float cosTheta, vec3 F0, float roughness) -{ - return F0 + (max(vec3(1.0 - roughness), F0) - F0)*pow(1.0 - cosTheta, 5.0); -} - -vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir) -{ - // Calculate the number of depth layers and calculate the size of each layer - float numLayers = mix(MAX_DEPTH_LAYER, MIN_DEPTH_LAYER, abs(dot(vec3(0.0, 0.0, 1.0), viewDir))); - float layerDepth = 1.0/numLayers; - - // Calculate depth of current layer - float currentLayerDepth = 0.0; - - // Calculate the amount to shift the texture coordinates per layer (from vector P) - // Note: height amount is stored in height material attribute color R channel (sampler use is independent) - vec2 P = viewDir.xy*height.color.r; - vec2 deltaTexCoords = P/numLayers; - - // Store initial texture coordinates and depth values - vec2 currentTexCoords = texCoords; - float currentDepthMapValue = texture(height.sampler, currentTexCoords).r; - - while (currentLayerDepth < currentDepthMapValue) - { - // Shift texture coordinates along direction of P - currentTexCoords -= deltaTexCoords; - - // Get depth map value at current texture coordinates - currentDepthMapValue = texture(height.sampler, currentTexCoords).r; - - // Get depth of next layer - currentLayerDepth += layerDepth; - } - - // Get texture coordinates before collision (reverse operations) - vec2 prevTexCoords = currentTexCoords + deltaTexCoords; - - // Get depth after and before collision for linear interpolation - float afterDepth = currentDepthMapValue - currentLayerDepth; - float beforeDepth = texture(height.sampler, prevTexCoords).r - currentLayerDepth + layerDepth; - - // Interpolation of texture coordinates - float weight = afterDepth/(afterDepth - beforeDepth); - vec2 finalTexCoords = prevTexCoords*weight + currentTexCoords*(1.0 - weight); - - return finalTexCoords; -} - -void main() -{ - // Calculate TBN and RM matrices - mat3 TBN = transpose(mat3(fragTangent, fragBinormal, fragNormal)); - - // Calculate lighting required attributes - vec3 normal = normalize(fragNormal); - vec3 view = normalize(viewPos - fragPosition); - vec3 refl = reflect(-view, normal); - - // Check if parallax mapping is enabled and calculate texture coordinates to use based on height map - // NOTE: remember that 'texCoord' variable must be assigned before calling any ComputeMaterialProperty() function - if (height.useSampler == 1) texCoord = ParallaxMapping(fragTexCoord, view); - else texCoord = fragTexCoord; // Use default texture coordinates - - // Fetch material values from texture sampler or color attributes - vec3 color = texture(albedo.sampler, texCoord).rgb; //ComputeMaterialProperty(albedo); - vec3 metal = texture(metalness.sampler, texCoord).rgb; //ComputeMaterialProperty(metalness); - vec3 rough = texture(roughness.sampler, texCoord).rgb; //ComputeMaterialProperty(roughness); - vec3 emiss = texture(emission.sampler, texCoord).rgb; //ComputeMaterialProperty(emission); - vec3 ao = texture(occlusion.sampler, texCoord).rgb; //ComputeMaterialProperty(occlusion); - - // Check if normal mapping is enabled - if (normals.useSampler == 1) - { - // Fetch normal map color and transform lighting values to tangent space - normal = texture(normals.sampler, texCoord).rgb; //ComputeMaterialProperty(normals); - normal = normalize(normal*2.0 - 1.0); - normal = normalize(normal*TBN); - - // Convert tangent space normal to world space due to cubemap reflection calculations - refl = normalize(reflect(-view, normal)); - } - - // Calculate reflectance at normal incidence - vec3 F0 = vec3(0.04); - F0 = mix(F0, color, metal.r); - - // Calculate lighting for all lights - vec3 Lo = vec3(0.0); - vec3 lightDot = vec3(0.0); - - for (int i = 0; i < MAX_LIGHTS; i++) - { - if (lights[i].enabled == 1) - { - // Calculate per-light radiance - vec3 light = vec3(0.0); - vec3 radiance = lights[i].color.rgb; - if (lights[i].type == LIGHT_DIRECTIONAL) light = -normalize(lights[i].target - lights[i].position); - else if (lights[i].type == LIGHT_POINT) - { - light = normalize(lights[i].position - fragPosition); - float distance = length(lights[i].position - fragPosition); - float attenuation = 1.0/(distance*distance); - radiance *= attenuation; - } - - // Cook-torrance BRDF - vec3 high = normalize(view + light); - float NDF = DistributionGGX(normal, high, rough.r); - float G = GeometrySmith(normal, view, light, rough.r); - vec3 F = fresnelSchlick(max(dot(high, view), 0.0), F0); - vec3 nominator = NDF*G*F; - float denominator = 4*max(dot(normal, view), 0.0)*max(dot(normal, light), 0.0) + 0.001; - vec3 brdf = nominator/denominator; - - // Store to kS the fresnel value and calculate energy conservation - vec3 kS = F; - vec3 kD = vec3(1.0) - kS; - - // Multiply kD by the inverse metalness such that only non-metals have diffuse lighting - kD *= 1.0 - metal.r; - - // Scale light by dot product between normal and light direction - float NdotL = max(dot(normal, light), 0.0); - - // Add to outgoing radiance Lo - // Note: BRDF is already multiplied by the Fresnel so it doesn't need to be multiplied again - Lo += (kD*color/PI + brdf)*radiance*NdotL*lights[i].color.a; - lightDot += radiance*NdotL + brdf*lights[i].color.a; - } - } - - // Calculate ambient lighting using IBL - vec3 F = fresnelSchlickRoughness(max(dot(normal, view), 0.0), F0, rough.r); - vec3 kS = F; - vec3 kD = 1.0 - kS; - kD *= 1.0 - metal.r; - - // Calculate indirect diffuse - vec3 irradiance = texture(irradianceMap, fragNormal).rgb; - vec3 diffuse = color*irradiance; - - // Sample both the prefilter map and the BRDF lut and combine them together as per the Split-Sum approximation - vec3 prefilterColor = textureLod(prefilterMap, refl, rough.r*MAX_REFLECTION_LOD).rgb; - vec2 brdf = texture(brdfLUT, vec2(max(dot(normal, view), 0.0), rough.r)).rg; - vec3 reflection = prefilterColor*(F*brdf.x + brdf.y); - - // Calculate final lighting - vec3 ambient = (kD*diffuse + reflection)*ao; - - // Calculate fragment color based on render mode - vec3 fragmentColor = ambient + Lo + emiss; // Physically Based Rendering - - if (renderMode == 1) fragmentColor = color; // Albedo - else if (renderMode == 2) fragmentColor = normal; // Normals - else if (renderMode == 3) fragmentColor = metal; // Metalness - else if (renderMode == 4) fragmentColor = rough; // Roughness - else if (renderMode == 5) fragmentColor = ao; // Ambient Occlusion - else if (renderMode == 6) fragmentColor = emiss; // Emission - else if (renderMode == 7) fragmentColor = lightDot; // Lighting - else if (renderMode == 8) fragmentColor = kS; // Fresnel - else if (renderMode == 9) fragmentColor = irradiance; // Irradiance - else if (renderMode == 10) fragmentColor = reflection; // Reflection - - // Apply HDR tonemapping - fragmentColor = fragmentColor/(fragmentColor + vec3(1.0)); - - // Apply gamma correction - fragmentColor = pow(fragmentColor, vec3(1.0/2.2)); - - // Calculate final fragment color - finalColor = vec4(fragmentColor, 1.0); -} diff --git a/examples/web/models/resources/shaders/glsl330/pbr.vs b/examples/web/models/resources/shaders/glsl330/pbr.vs deleted file mode 100644 index 045428c..0000000 --- a/examples/web/models/resources/shaders/glsl330/pbr.vs +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************************* -* -* rPBR [shader] - Physically based rendering vertex shader -* -* Copyright (c) 2017 Victor Fisac -* -**********************************************************************************************/ - -#version 330 - -// Input vertex attributes -in vec3 vertexPosition; -in vec2 vertexTexCoord; -in vec3 vertexNormal; -in vec4 vertexTangent; - -// Input uniform values -uniform mat4 mvp; -uniform mat4 matModel; - -// Output vertex attributes (to fragment shader) -out vec3 fragPosition; -out vec2 fragTexCoord; -out vec3 fragNormal; -out vec3 fragTangent; -out vec3 fragBinormal; - -void main() -{ - // Calculate binormal from vertex normal and tangent - vec3 vertexBinormal = cross(vertexNormal, vec3(vertexTangent)); - - // Calculate fragment normal based on normal transformations - mat3 normalMatrix = transpose(inverse(mat3(matModel))); - - // Calculate fragment position based on model transformations - fragPosition = vec3(matModel*vec4(vertexPosition, 1.0)); - - // Send vertex attributes to fragment shader - fragTexCoord = vertexTexCoord; - fragNormal = normalize(normalMatrix*vertexNormal); - fragTangent = normalize(normalMatrix*vec3(vertexTangent)); - fragTangent = normalize(fragTangent - dot(fragTangent, fragNormal)*fragNormal); - fragBinormal = normalize(normalMatrix*vertexBinormal); - fragBinormal = cross(fragNormal, fragTangent); - - // Calculate final vertex position - gl_Position = mvp*vec4(vertexPosition, 1.0); -}
\ No newline at end of file diff --git a/examples/web/models/resources/shaders/glsl330/prefilter.fs b/examples/web/models/resources/shaders/glsl330/prefilter.fs deleted file mode 100644 index 941ea86..0000000 --- a/examples/web/models/resources/shaders/glsl330/prefilter.fs +++ /dev/null @@ -1,120 +0,0 @@ -/******************************************************************************************* -* -* rPBR [shader] - Prefiltered environment for reflections fragment shader -* -* Copyright (c) 2017 Victor Fisac -* -**********************************************************************************************/ - -#version 330 -#define MAX_SAMPLES 1024u -#define CUBEMAP_RESOLUTION 1024.0 - -// Input vertex attributes (from vertex shader) -in vec3 fragPosition; - -// Input uniform values -uniform samplerCube environmentMap; -uniform float roughness; - -// Constant values -const float PI = 3.14159265359; - -// Output fragment color -out vec4 finalColor; - -float DistributionGGX(vec3 N, vec3 H, float roughness); -float RadicalInverse_VdC(uint bits); -vec2 Hammersley(uint i, uint N); -vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness); - -float DistributionGGX(vec3 N, vec3 H, float roughness) -{ - float a = roughness*roughness; - float a2 = a*a; - float NdotH = max(dot(N, H), 0.0); - float NdotH2 = NdotH*NdotH; - - float nom = a2; - float denom = (NdotH2*(a2 - 1.0) + 1.0); - denom = PI*denom*denom; - - return nom/denom; -} - -float RadicalInverse_VdC(uint bits) -{ - bits = (bits << 16u) | (bits >> 16u); - bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u); - bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u); - bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u); - bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u); - return float(bits)*2.3283064365386963e-10; // / 0x100000000 -} - -vec2 Hammersley(uint i, uint N) -{ - return vec2(float(i)/float(N), RadicalInverse_VdC(i)); -} - -vec3 ImportanceSampleGGX(vec2 Xi, vec3 N, float roughness) -{ - float a = roughness*roughness; - float phi = 2.0*PI*Xi.x; - float cosTheta = sqrt((1.0 - Xi.y)/(1.0 + (a*a - 1.0)*Xi.y)); - float sinTheta = sqrt(1.0 - cosTheta*cosTheta); - - // Transform from spherical coordinates to cartesian coordinates (halfway vector) - vec3 H = vec3(cos(phi)*sinTheta, sin(phi)*sinTheta, cosTheta); - - // Transform from tangent space H vector to world space sample vector - vec3 up = ((abs(N.z) < 0.999) ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0)); - vec3 tangent = normalize(cross(up, N)); - vec3 bitangent = cross(N, tangent); - vec3 sampleVec = tangent*H.x + bitangent*H.y + N*H.z; - - return normalize(sampleVec); -} - -void main() -{ - // Make the simplyfying assumption that V equals R equals the normal - vec3 N = normalize(fragPosition); - vec3 R = N; - vec3 V = R; - - vec3 prefilteredColor = vec3(0.0); - float totalWeight = 0.0; - - for (uint i = 0u; i < MAX_SAMPLES; i++) - { - // Generate a sample vector that's biased towards the preferred alignment direction (importance sampling) - vec2 Xi = Hammersley(i, MAX_SAMPLES); - vec3 H = ImportanceSampleGGX(Xi, N, roughness); - vec3 L = normalize(2.0*dot(V, H)*H - V); - - float NdotL = max(dot(N, L), 0.0); - if(NdotL > 0.0) - { - // Sample from the environment's mip level based on roughness/pdf - float D = DistributionGGX(N, H, roughness); - float NdotH = max(dot(N, H), 0.0); - float HdotV = max(dot(H, V), 0.0); - float pdf = D*NdotH/(4.0*HdotV) + 0.0001; - - float resolution = CUBEMAP_RESOLUTION; - float saTexel = 4.0*PI/(6.0*resolution*resolution); - float saSample = 1.0/(float(MAX_SAMPLES)*pdf + 0.0001); - float mipLevel = ((roughness == 0.0) ? 0.0 : 0.5*log2(saSample/saTexel)); - - prefilteredColor += textureLod(environmentMap, L, mipLevel).rgb*NdotL; - totalWeight += NdotL; - } - } - - // Calculate prefilter average color - prefilteredColor = prefilteredColor/totalWeight; - - // Calculate final fragment color - finalColor = vec4(prefilteredColor, 1.0); -} diff --git a/examples/web/models/resources/shaders/glsl330/skybox.fs b/examples/web/models/resources/shaders/glsl330/skybox.fs deleted file mode 100644 index c7a1788..0000000 --- a/examples/web/models/resources/shaders/glsl330/skybox.fs +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************************* -* -* rPBR [shader] - Background skybox fragment shader -* -* Copyright (c) 2017 Victor Fisac -* -* 19-Jun-2020 - modified by Giuseppe Mastrangelo (@peppemas) - VFlip Support -* -**********************************************************************************************/ - -#version 330 - -// Input vertex attributes (from vertex shader) -in vec3 fragPosition; - -// Input uniform values -uniform samplerCube environmentMap; -uniform bool vflipped; - -// Output fragment color -out vec4 finalColor; - -void main() -{ - // Fetch color from texture map - vec3 color = vec3(0.0); - - if (vflipped) color = texture(environmentMap, vec3(fragPosition.x, -fragPosition.y, fragPosition.z)).rgb; - else color = texture(environmentMap, fragPosition).rgb; - - // Apply gamma correction - color = color/(color + vec3(1.0)); - color = pow(color, vec3(1.0/2.2)); - - // Calculate final fragment color - finalColor = vec4(color, 1.0); -} diff --git a/examples/web/models/resources/shaders/glsl330/skybox.vs b/examples/web/models/resources/shaders/glsl330/skybox.vs deleted file mode 100644 index 3260d66..0000000 --- a/examples/web/models/resources/shaders/glsl330/skybox.vs +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************************* -* -* rPBR [shader] - Background skybox vertex shader -* -* Copyright (c) 2017 Victor Fisac -* -**********************************************************************************************/ - -#version 330 - -// Input vertex attributes -in vec3 vertexPosition; - -// Input uniform values -uniform mat4 matProjection; -uniform mat4 matView; - -// Output vertex attributes (to fragment shader) -out vec3 fragPosition; - -void main() -{ - // Calculate fragment position based on model transformations - fragPosition = vertexPosition; - - // Remove translation from the view matrix - mat4 rotView = mat4(mat3(matView)); - vec4 clipPos = matProjection*rotView*vec4(vertexPosition, 1.0); - - // Calculate final vertex position - gl_Position = clipPos; -} diff --git a/examples/web/models/rlights.h b/examples/web/models/rlights.h deleted file mode 100644 index 1950447..0000000 --- a/examples/web/models/rlights.h +++ /dev/null @@ -1,177 +0,0 @@ -/********************************************************************************************** -* -* raylib.lights - Some useful functions to deal with lights data -* -* CONFIGURATION: -* -* #define RLIGHTS_IMPLEMENTATION -* Generates the implementation of the library into the included file. -* If not defined, the library is in header only mode and can be included in other headers -* or source files without problems. But only ONE file should hold the implementation. -* -* LICENSE: zlib/libpng -* -* Copyright (c) 2017 Victor Fisac and Ramon Santamaria -* -* This software is provided "as-is", without any express or implied warranty. In no event -* will the authors be held liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, including commercial -* applications, and to alter it and redistribute it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not claim that you -* wrote the original software. If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but is not required. -* -* 2. Altered source versions must be plainly marked as such, and must not be misrepresented -* as being the original software. -* -* 3. This notice may not be removed or altered from any source distribution. -* -**********************************************************************************************/ - -#ifndef RLIGHTS_H -#define RLIGHTS_H - -//---------------------------------------------------------------------------------- -// Defines and Macros -//---------------------------------------------------------------------------------- -#define MAX_LIGHTS 4 // Max lights supported by shader -#define LIGHT_DISTANCE 3.5f // Light distance from world center -#define LIGHT_HEIGHT 1.0f // Light height position - -//---------------------------------------------------------------------------------- -// Types and Structures Definition -//---------------------------------------------------------------------------------- -typedef enum { - LIGHT_DIRECTIONAL, - LIGHT_POINT -} LightType; - -typedef struct { - bool enabled; - LightType type; - Vector3 position; - Vector3 target; - Color color; - int enabledLoc; - int typeLoc; - int posLoc; - int targetLoc; - int colorLoc; -} Light; - -#ifdef __cplusplus -extern "C" { // Prevents name mangling of functions -#endif - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -int lightsCount = 0; // Current amount of created lights - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- -Light CreateLight(int type, Vector3 pos, Vector3 targ, Color color, Shader shader); // Defines a light and get locations from PBR shader -void UpdateLightValues(Shader shader, Light light); // Send to PBR shader light values - -#ifdef __cplusplus -} -#endif - -#endif // RLIGHTS_H - - -/*********************************************************************************** -* -* RLIGHTS IMPLEMENTATION -* -************************************************************************************/ - -#if defined(RLIGHTS_IMPLEMENTATION) - -#include "raylib.h" - -//---------------------------------------------------------------------------------- -// Defines and Macros -//---------------------------------------------------------------------------------- -// ... - -//---------------------------------------------------------------------------------- -// Types and Structures Definition -//---------------------------------------------------------------------------------- -// ... - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -// ... - -//---------------------------------------------------------------------------------- -// Module specific Functions Declaration -//---------------------------------------------------------------------------------- -// ... - -//---------------------------------------------------------------------------------- -// Module Functions Definition -//---------------------------------------------------------------------------------- - -// Defines a light and get locations from PBR shader -Light CreateLight(int type, Vector3 pos, Vector3 targ, Color color, Shader shader) -{ - Light light = { 0 }; - - if (lightsCount < MAX_LIGHTS) - { - light.enabled = true; - light.type = type; - light.position = pos; - light.target = targ; - light.color = color; - - char enabledName[32] = "lights[x].enabled\0"; - char typeName[32] = "lights[x].type\0"; - char posName[32] = "lights[x].position\0"; - char targetName[32] = "lights[x].target\0"; - char colorName[32] = "lights[x].color\0"; - enabledName[7] = '0' + lightsCount; - typeName[7] = '0' + lightsCount; - posName[7] = '0' + lightsCount; - targetName[7] = '0' + lightsCount; - colorName[7] = '0' + lightsCount; - - light.enabledLoc = GetShaderLocation(shader, enabledName); - light.typeLoc = GetShaderLocation(shader, typeName); - light.posLoc = GetShaderLocation(shader, posName); - light.targetLoc = GetShaderLocation(shader, targetName); - light.colorLoc = GetShaderLocation(shader, colorName); - - UpdateLightValues(shader, light); - lightsCount++; - } - - return light; -} - -// Send to PBR shader light values -void UpdateLightValues(Shader shader, Light light) -{ - // Send to shader light enabled state and type - SetShaderValue(shader, light.enabledLoc, &light.enabled, UNIFORM_INT); - SetShaderValue(shader, light.typeLoc, &light.type, UNIFORM_INT); - - // Send to shader light position values - float position[3] = { light.position.x, light.position.y, light.position.z }; - SetShaderValue(shader, light.posLoc, position, UNIFORM_VEC3); - - // Send to shader light target position values - float target[3] = { light.target.x, light.target.y, light.target.z }; - SetShaderValue(shader, light.targetLoc, target, UNIFORM_VEC3); - - // Send to shader light color values - float diff[4] = { (float)light.color.r/(float)255, (float)light.color.g/(float)255, (float)light.color.b/(float)255, (float)light.color.a/(float)255 }; - SetShaderValue(shader, light.colorLoc, diff, UNIFORM_VEC4); -} - -#endif // RLIGHTS_IMPLEMENTATION
\ No newline at end of file |
