diff --git a/.gitattributes b/.gitattributes
index a6344aac8c09253b3b630fb776ae94478aa0275b..02e20b8365badecc0736bf8dcb66783bd717c18a 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -33,3 +33,60 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text
*tfevents* filter=lfs diff=lfs merge=lfs -text
+readme-resources/screenshot.png filter=lfs diff=lfs merge=lfs -text
+static/pyodide/astropy-5.0.4-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/b2d-0.7.2-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/biopython-1.79-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/bleach-5.0.0-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/bokeh-2.4.2-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/boost_histogram-1.3.1-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/cffi_example-0.1-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/cffi-1.15.0-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/cryptography-3.4.8-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/cytoolz-0.11.2-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/distlib-0.3.4-py2.py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/docutils-0.18.1-py2.py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSans-Bold.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSans-BoldOblique.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSans-Oblique.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSans.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSansMono-Bold.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSansMono-BoldOblique.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSansMono-Oblique.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSansMono.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSerif-Bold.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSerif-BoldItalic.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSerif-Italic.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/DejaVuSerif.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/STIXGeneral.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/STIXGeneralBol.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/STIXGeneralBolIta.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonts/STIXGeneralItalic.ttf filter=lfs diff=lfs merge=lfs -text
+static/pyodide/fonttools-4.32.0-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/freesasa-2.1.0-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/future-0.18.2-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/html5lib-1.1-py2.py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/imageio-2.16.1-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/jedi-0.18.1-py2.py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/Jinja2-3.1.1-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/joblib-1.1.0-py2.py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/lxml-4.8.0-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/matplotlib-3.5.1-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/mne-1.0.0-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/mpmath-1.2.1-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/networkx-2.7.1-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/nlopt-2.7.0-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/nltk-3.7-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/nose-1.3.7-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/numcodecs-0.9.1-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/numpy-1.22.3-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/pandas-1.4.2-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/parso-0.8.3-py2.py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/patsy-0.5.2-py2.py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/PIL-9.1.0-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/pycparser-2.21-py2.py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/pydantic-1.9.0-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/pyerfa-2.0.0.1-cp310-cp310-emscripten_wasm32.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/Pygments-2.11.2-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
+static/pyodide/pyodide.asm.data filter=lfs diff=lfs merge=lfs -text
+static/pyodide/pytest-7.1.1-py3-none-any.whl filter=lfs diff=lfs merge=lfs -text
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..16b63d74e94ec8bafca7f2e0f7c99cbf44ad7fbe
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,163 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# poetry
+# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+# This is especially recommended for binary packages to ensure reproducibility, and is more
+# commonly ignored for libraries.
+# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# pdm
+# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+# in version control.
+# https://pdm.fming.dev/#use-with-ide
+.pdm.toml
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+# and can be added to the global gitignore or merged into this file. For a more nuclear
+# option (not recommended) you can uncomment the following to ignore the entire idea folder.
+#.idea/
+
+unused-wheels/
+/.idea/workspace.xml
diff --git a/.idea/pyscript-pwa-example.iml b/.idea/pyscript-pwa-example.iml
new file mode 100644
index 0000000000000000000000000000000000000000..2ed2b3e836a1c8075bcb6f5bbc1646b2f66c8f98
--- /dev/null
+++ b/.idea/pyscript-pwa-example.iml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 0c8e63a171fe96fefee0e1c62cfd70b6d4d64a89..53696e0880c69b54f9f713ad6d34d3869d8de95f 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,26 @@
----
-title: Pyscript
-emoji: 👀
-colorFrom: gray
-colorTo: blue
-sdk: docker
-pinned: false
----
-
-Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
+# pyscript PWA Example
+
+This app shows how using a PWA (Progressive Web App) along with [pyscript](https://pyscript.net)
+allows us to create Python-based web applications that install like regular applications and
+(mostly) don't suffer from the large file downloads needed for Python's WebAssembly runtime.
+
+
+
+To run the app, just start it as a Flask application (keep the app running for the web weather API).
+
+```bash
+
+python3 -m venv venv
+. /venv/bin/activate
+pip install -r requirements.txt
+flask run
+
+```
+
+Then open 127.0.0.1:5000 and choose "install PWA". See
+[these steps for Chrome](https://www.howtogeek.com/fyi/how-to-install-progressive-web-apps-pwas-in-chrome/),
+google the actions if you are new to this in your browser.
+
+Unfortunately, Mozilla gave up on this feature for Firefox browser.
+
+If you have improvements for the PWA side of things, please open a PR. It's very bare-bones.
diff --git a/app.py b/app.py
new file mode 100644
index 0000000000000000000000000000000000000000..1909e48acc3323ab1f82a1b32f41ce3acb999e37
--- /dev/null
+++ b/app.py
@@ -0,0 +1,50 @@
+import random
+from pathlib import Path
+
+import flask
+
+app = flask.Flask(__name__)
+
+
+@app.get('/')
+def index():
+ return flask.render_template('index.html')
+
+
+@app.get('/weather/data')
+def weather_data():
+ data = get_random_report()
+ return flask.jsonify(data)
+
+
+@app.get('/serviceWorker.js')
+def worker():
+ js = Path(__file__).parent / 'static' / 'js' / 'serviceWorker.js'
+ text = js.read_text()
+ resp = flask.make_response(text)
+ resp.content_type = 'application/javascript'
+ resp.headers['Service-Worker-Allowed'] = '/'
+
+ return resp
+
+
+def get_random_report() -> dict:
+ reports = [
+ {
+ 'report': 'Clear and beautify skies today.',
+ 'sky': 'sunny',
+ 'temp': random.randint(65, 88),
+ },
+ {
+ 'report': 'Cloudy and a bit cool today.',
+ 'sky': 'cloudy',
+ 'temp': random.randint(48, 60),
+ },
+ {
+ 'report': 'Are those icicles falling from the sky? Get inside.',
+ 'sky': 'rain',
+ 'temp': random.randint(33, 40),
+ }
+ ]
+
+ return random.choice(reports)
diff --git a/readme-resources/screenshot.png b/readme-resources/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..c95647136f2b6bc8e22021c32188a06e6eb529f0
--- /dev/null
+++ b/readme-resources/screenshot.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:234e042e3a8da978a536d12ed119ed3862e0f05e64930c99dc0cc4af5901f80a
+size 149813
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7e1060246fd6746a14204539a72e199a25469a05
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1 @@
+flask
diff --git a/static/css/site.css b/static/css/site.css
new file mode 100644
index 0000000000000000000000000000000000000000..8dc6776315e5edc05c977d6fca476c05742c03ba
--- /dev/null
+++ b/static/css/site.css
@@ -0,0 +1,121 @@
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+body {
+ background: #fdfdfd;
+ font-family: "Nunito", sans-serif;
+ font-size: 1rem;
+ overflow: hidden;
+}
+
+html, body {
+ height: 100%;
+ min-height: 100%;
+}
+
+main {
+ max-width: 900px;
+ margin: auto;
+ padding: 0.5rem;
+ text-align: center;
+ height: 80%;
+}
+
+nav {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+ul {
+ list-style: none;
+ display: flex;
+}
+
+li {
+ margin-right: 1rem;
+}
+
+h1 {
+ margin-bottom: 0.5rem;
+}
+
+
+.container {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
+ grid-gap: 1rem;
+ justify-content: center;
+ align-items: center;
+ margin: auto;
+ padding: 1rem 0;
+}
+
+
+body.sunny {
+ background: #69caf8;
+}
+
+body.cloudy {
+ background: #cbcaca;
+}
+
+body.rain {
+ background: #607280;
+ color: white;
+}
+body.offline {
+ background: #e37f7f;
+ color: black;
+}
+
+#weather {
+ margin-top: 100px;
+}
+
+#weather #image-container {
+ float: left;
+}
+
+#weather #image {
+ width: 350px;
+}
+
+#weather #temp {
+ padding-top: 70px;
+ font-size: 100px;
+ font-weight: bold;
+}
+
+#weather #forecast {
+
+}
+
+footer {
+ text-align: center;
+ height: 20%;
+ background-color: #444;
+ color: #aaa;
+}
+
+.footer-content {
+ padding-top: 40px;
+}
+
+
+a {
+ cursor: pointer;
+ font-weight: bold;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+.hidden {
+ display: none;
+}
\ No newline at end of file
diff --git a/static/images/icons/icon-128x128.png b/static/images/icons/icon-128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..598b6b0d8de4fbf35de3ea1252e5ca8123bff6e8
Binary files /dev/null and b/static/images/icons/icon-128x128.png differ
diff --git a/static/images/icons/icon-144x144.png b/static/images/icons/icon-144x144.png
new file mode 100644
index 0000000000000000000000000000000000000000..a1169deb6d7ca7f9208fc7ec632b977cf95de654
Binary files /dev/null and b/static/images/icons/icon-144x144.png differ
diff --git a/static/images/icons/icon-152x152.png b/static/images/icons/icon-152x152.png
new file mode 100644
index 0000000000000000000000000000000000000000..118875838e6081ab199652a0ce15cb7d3aa825d9
Binary files /dev/null and b/static/images/icons/icon-152x152.png differ
diff --git a/static/images/icons/icon-192x192.png b/static/images/icons/icon-192x192.png
new file mode 100644
index 0000000000000000000000000000000000000000..535481990fabadb1545f1a466d2433ec5aba1eb1
Binary files /dev/null and b/static/images/icons/icon-192x192.png differ
diff --git a/static/images/icons/icon-384x384.png b/static/images/icons/icon-384x384.png
new file mode 100644
index 0000000000000000000000000000000000000000..6194633c3234bb9fcd180aa2086515723d9ae948
Binary files /dev/null and b/static/images/icons/icon-384x384.png differ
diff --git a/static/images/icons/icon-512x512.png b/static/images/icons/icon-512x512.png
new file mode 100644
index 0000000000000000000000000000000000000000..875eaa6fa787125b7901b7b98ed3e89e0e17f3fe
Binary files /dev/null and b/static/images/icons/icon-512x512.png differ
diff --git a/static/images/icons/icon-72x72.png b/static/images/icons/icon-72x72.png
new file mode 100644
index 0000000000000000000000000000000000000000..7eeded8903b04ff0e6ce74e3cb3d40f931f436bf
Binary files /dev/null and b/static/images/icons/icon-72x72.png differ
diff --git a/static/images/icons/icon-96x96.png b/static/images/icons/icon-96x96.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2f6ec0d4f5e8338e9ac43975dc4cf906bc32ea1
Binary files /dev/null and b/static/images/icons/icon-96x96.png differ
diff --git a/static/images/weather/cloudy.png b/static/images/weather/cloudy.png
new file mode 100644
index 0000000000000000000000000000000000000000..89a862412e4bafad1b21e244925b601523ee5250
Binary files /dev/null and b/static/images/weather/cloudy.png differ
diff --git a/static/images/weather/offline.png b/static/images/weather/offline.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee123094034624fcf6f52dab27a8721e7b3a736c
Binary files /dev/null and b/static/images/weather/offline.png differ
diff --git a/static/images/weather/partlysunny.png b/static/images/weather/partlysunny.png
new file mode 100644
index 0000000000000000000000000000000000000000..83b77b4a762a244ed51a91f3331ce5e5d75452ba
Binary files /dev/null and b/static/images/weather/partlysunny.png differ
diff --git a/static/images/weather/rain.png b/static/images/weather/rain.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad51f76193a99d9d9f8488365aa06fa6d03339c6
Binary files /dev/null and b/static/images/weather/rain.png differ
diff --git a/static/images/weather/sunny.png b/static/images/weather/sunny.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba61d3ea86371cde0eddd41d6d9efb47e9c3c7ed
Binary files /dev/null and b/static/images/weather/sunny.png differ
diff --git a/static/js/pwa-scaffold.js b/static/js/pwa-scaffold.js
new file mode 100644
index 0000000000000000000000000000000000000000..55505cf29e2ab389eda8f3de28c1893a72df5c54
--- /dev/null
+++ b/static/js/pwa-scaffold.js
@@ -0,0 +1,8 @@
+if ("serviceWorker" in navigator) {
+ window.addEventListener("load", function () {
+ navigator.serviceWorker
+ .register("/serviceWorker.js")
+ .then(res => console.log("service worker registered", res))
+ .catch(err => console.log("service worker not registered", err))
+ })
+}
diff --git a/static/js/serviceWorker.js b/static/js/serviceWorker.js
new file mode 100644
index 0000000000000000000000000000000000000000..6f308bad7ab9721e61f8d4710fe82ed88d8e60a1
--- /dev/null
+++ b/static/js/serviceWorker.js
@@ -0,0 +1,52 @@
+const staticPyPWA = "dev-pypwa-v4"
+const assets = [
+ // "",
+ // "/",
+ "/static/css/site.css",
+ "/static/js/site.js",
+ "/static/js/pwa-scaffold.js",
+
+ "/static/python/client.py",
+ "/static/python/weather_api.py",
+
+ "/static/pyscript/pyscript.css",
+ "/static/pyscript/pyscript.js",
+ "/static/pyscript/pyscript.py",
+
+ "/static/images/weather/cloudy.png",
+ "/static/images/weather/rain.png",
+ "/static/images/weather/offline.png",
+ "/static/images/weather/sunny.png",
+
+ "/static/pyodide/pyodide.js",
+ "/static/pyodide/packages.json",
+ "/static/pyodide/pyodide_py.tar",
+ "/static/pyodide/pyodide.asm.js",
+ "/static/pyodide/pyodide.asm.data",
+ "/static/pyodide/pyodide.asm.wasm",
+ "/static/pyodide/micropip-0.1-py3-none-any.whl",
+ "/static/pyodide/pyparsing-3.0.7-py3-none-any.whl",
+ "/static/pyodide/packaging-21.3-py3-none-any.whl",
+ "/static/pyodide/distutils.tar",
+
+ "/static/images/icons/icon-144x144.png",
+]
+
+self.addEventListener("install", installEvent => {
+ installEvent.waitUntil(
+ caches.open(staticPyPWA).then(cache => {
+ cache.addAll(assets).then(r => {
+ console.log("Cache assets downloaded");
+ }).catch(err => console.log("Error caching item", err))
+ console.log(`Cache ${staticPyPWA} opened.`);
+ }).catch(err => console.log("Error opening cache", err))
+ )
+})
+
+self.addEventListener("fetch", fetchEvent => {
+ fetchEvent.respondWith(
+ caches.match(fetchEvent.request).then(res => {
+ return res || fetch(fetchEvent.request)
+ }).catch(err => console.log("Cache fetch error: ", err))
+ )
+})
\ No newline at end of file
diff --git a/static/js/site.js b/static/js/site.js
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/static/manifest.json b/static/manifest.json
new file mode 100644
index 0000000000000000000000000000000000000000..d9a57554295a31e4d2a3e2dea79b25ae0608531c
--- /dev/null
+++ b/static/manifest.json
@@ -0,0 +1,43 @@
+{
+ "name": "PyPWA Weather",
+ "short_name": "PyPWA Weather",
+ "start_url": "/",
+ "display": "standalone",
+ "background_color": "#69caf8",
+ "theme_color": "#444444",
+ "orientation": "portrait-primary",
+ "icons": [
+ {
+ "src": "/static/images/icons/icon-72x72.png",
+ "type": "image/png", "sizes": "72x72"
+ },
+ {
+ "src": "/static/images/icons/icon-96x96.png",
+ "type": "image/png", "sizes": "96x96"
+ },
+ {
+ "src": "/static/images/icons/icon-128x128.png",
+ "type": "image/png","sizes": "128x128"
+ },
+ {
+ "src": "/static/images/icons/icon-144x144.png",
+ "type": "image/png", "sizes": "144x144"
+ },
+ {
+ "src": "/static/images/icons/icon-152x152.png",
+ "type": "image/png", "sizes": "152x152"
+ },
+ {
+ "src": "/static/images/icons/icon-192x192.png",
+ "type": "image/png", "sizes": "192x192"
+ },
+ {
+ "src": "/static/images/icons/icon-384x384.png",
+ "type": "image/png", "sizes": "384x384"
+ },
+ {
+ "src": "/static/images/icons/icon-512x512.png",
+ "type": "image/png", "sizes": "512x512"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/static/pyodide/CLAPACK-3.2.1.zip b/static/pyodide/CLAPACK-3.2.1.zip
new file mode 100644
index 0000000000000000000000000000000000000000..f33375758ab03d19c56e3a1576db13e3f7a45caa
--- /dev/null
+++ b/static/pyodide/CLAPACK-3.2.1.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2662f266d19c2e684a0c7d67c045d3f0767447fe5c0eed3509bbd31a25e6ca31
+size 1277110
diff --git a/static/pyodide/Jinja2-3.1.1-py3-none-any.whl b/static/pyodide/Jinja2-3.1.1-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..3d3299326895629a84188e3361732882e21542be
--- /dev/null
+++ b/static/pyodide/Jinja2-3.1.1-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63992624b74ec0ebe62b1c10b44aff5e6a85b0b84a8668d6b681a2478fd11cf7
+size 132603
diff --git a/static/pyodide/Logbook-1.5.3-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/Logbook-1.5.3-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..6222c657666ff76f0b6179fcecf01bd6d8c92fa2
Binary files /dev/null and b/static/pyodide/Logbook-1.5.3-cp310-cp310-emscripten_wasm32.whl differ
diff --git a/static/pyodide/MarkupSafe-2.1.1-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/MarkupSafe-2.1.1-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..ea4d8c561b752d574244771d3ad24cef62d61a36
Binary files /dev/null and b/static/pyodide/MarkupSafe-2.1.1-cp310-cp310-emscripten_wasm32.whl differ
diff --git a/static/pyodide/PIL-9.1.0-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/PIL-9.1.0-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..153d070450f7b3a82a662ec7f0b1112bf3af7334
--- /dev/null
+++ b/static/pyodide/PIL-9.1.0-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:38d692b74bb4c0614796f1e2c9beb931f5a6a79853611d0d2a205445957752f2
+size 852898
diff --git a/static/pyodide/Pygments-2.11.2-py3-none-any.whl b/static/pyodide/Pygments-2.11.2-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..01b03da2872b39187f28e646a508d4bcea74c86f
--- /dev/null
+++ b/static/pyodide/Pygments-2.11.2-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e735d55ccda6306fe3e36dc6c1867b97a45cf8aa20c4907b24df5eaa9dc63b24
+size 1063665
diff --git a/static/pyodide/asciitree-0.3.3-py3-none-any.whl b/static/pyodide/asciitree-0.3.3-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..1583f86225425f9566745af4b525ac3622dc725a
Binary files /dev/null and b/static/pyodide/asciitree-0.3.3-py3-none-any.whl differ
diff --git a/static/pyodide/astropy-5.0.4-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/astropy-5.0.4-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..ad3480a7244f8a022602473708fff425600411a0
--- /dev/null
+++ b/static/pyodide/astropy-5.0.4-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:78f779cfda0210401459497cf8eb20077b720dea9eb27bd74b5dffc10a4da75b
+size 6121279
diff --git a/static/pyodide/atomicwrites-1.4.0-py2.py3-none-any.whl b/static/pyodide/atomicwrites-1.4.0-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..48e9e23f57cd67707cfcf3d9600126037a226b79
Binary files /dev/null and b/static/pyodide/atomicwrites-1.4.0-py2.py3-none-any.whl differ
diff --git a/static/pyodide/attrs-21.4.0-py2.py3-none-any.whl b/static/pyodide/attrs-21.4.0-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..4c651db9a197912c2f511a968434939891d7c281
Binary files /dev/null and b/static/pyodide/attrs-21.4.0-py2.py3-none-any.whl differ
diff --git a/static/pyodide/autograd-1.4-py3-none-any.whl b/static/pyodide/autograd-1.4-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..7fb1d24b4c4c0fa82d06f5fe8482285252ba4478
Binary files /dev/null and b/static/pyodide/autograd-1.4-py3-none-any.whl differ
diff --git a/static/pyodide/autograd-tests.tar b/static/pyodide/autograd-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..41dd8bb992b96e14fd9b885347b5c248a70cba91
--- /dev/null
+++ b/static/pyodide/autograd-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:785d04b1a0b7288fcd318bda0343e418898aa12d42e9b5aff3dd3a1d67f76144
+size 10240
diff --git a/static/pyodide/b2d-0.7.2-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/b2d-0.7.2-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..7ca8fc2975c33fe704af8f02decfc166fb086312
--- /dev/null
+++ b/static/pyodide/b2d-0.7.2-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:73317f7d55dd2e307db75cae21d27307ca57847b1b12547356fdf8e3422c8e69
+size 308974
diff --git a/static/pyodide/beautifulsoup4-4.11.0-py3-none-any.whl b/static/pyodide/beautifulsoup4-4.11.0-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..0f6632a2dced941a0b420b7c4bc839592936d176
Binary files /dev/null and b/static/pyodide/beautifulsoup4-4.11.0-py3-none-any.whl differ
diff --git a/static/pyodide/biopython-1.79-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/biopython-1.79-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..211a2a09f31e7893dc1a3d040eceebcde58a918c
--- /dev/null
+++ b/static/pyodide/biopython-1.79-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed44cdce7d9b05e123a9cf9bea1defc9003257626cc2ad6e4ff5da0dbdcb8782
+size 2203790
diff --git a/static/pyodide/bleach-5.0.0-py3-none-any.whl b/static/pyodide/bleach-5.0.0-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..cf00a31723286e6fc28650e9ccf8e458e0dd1471
--- /dev/null
+++ b/static/pyodide/bleach-5.0.0-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8335829b36ae9ef324ff8f66b7191683e0bc962cf82d0cf5c2db5d300354e547
+size 160294
diff --git a/static/pyodide/bokeh-2.4.2-py3-none-any.whl b/static/pyodide/bokeh-2.4.2-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..a9b8b58026f4760d4276b61c4b7d00842a1c0393
--- /dev/null
+++ b/static/pyodide/bokeh-2.4.2-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bfd2e2ff2cf64b10dfaa48ef2fd9e57622c8a7fec3d86cf737dbefac96c2a1f7
+size 18470310
diff --git a/static/pyodide/boost_histogram-1.3.1-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/boost_histogram-1.3.1-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..7e61299c067807009a1cd574e54ccded914d8205
--- /dev/null
+++ b/static/pyodide/boost_histogram-1.3.1-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7aafa2d98e202ae65cfa0d6f91965e262268f4e3c976c5aff04214dc10fc5efc
+size 936253
diff --git a/static/pyodide/cffi-1.15.0-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/cffi-1.15.0-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..b03383fd223d70f6ef88de715c4ff01146e78060
--- /dev/null
+++ b/static/pyodide/cffi-1.15.0-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8a78d2f60271ce07f3516c2247df10782376b88149c5608bc41367b3f257bba2
+size 148396
diff --git a/static/pyodide/cffi_example-0.1-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/cffi_example-0.1-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..3d7138e6f17b99c99db63535d18e3dc6829b57c1
--- /dev/null
+++ b/static/pyodide/cffi_example-0.1-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:740611eac17de512fc711fad332e9146670e4244fd7ac8665af57e328d477eba
+size 262492
diff --git a/static/pyodide/cloudpickle-2.0.0-py3-none-any.whl b/static/pyodide/cloudpickle-2.0.0-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..ca5ea3b52dd07174d17a88610a004296beafdec7
Binary files /dev/null and b/static/pyodide/cloudpickle-2.0.0-py3-none-any.whl differ
diff --git a/static/pyodide/cmyt-1.0.4-py3-none-any.whl b/static/pyodide/cmyt-1.0.4-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..2722f153abbabe1ec4126bf02b01bbda78a68d13
Binary files /dev/null and b/static/pyodide/cmyt-1.0.4-py3-none-any.whl differ
diff --git a/static/pyodide/cmyt-tests.tar b/static/pyodide/cmyt-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..6a8869036e3bca259387a12e215a839b21d9eb0d
--- /dev/null
+++ b/static/pyodide/cmyt-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7a5efd425ceced01b7d33b72be12548b944c63fb48b572ed77768db8c7ea476
+size 20480
diff --git a/static/pyodide/colorspacious-1.1.2-py2.py3-none-any.whl b/static/pyodide/colorspacious-1.1.2-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..cdb8573aef368584ccc262113391ba21e4251207
Binary files /dev/null and b/static/pyodide/colorspacious-1.1.2-py2.py3-none-any.whl differ
diff --git a/static/pyodide/console.html b/static/pyodide/console.html
new file mode 100644
index 0000000000000000000000000000000000000000..85ab7fea786226a16574d5bf7d60533eae50758e
--- /dev/null
+++ b/static/pyodide/console.html
@@ -0,0 +1,168 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/pyodide/cpp-exceptions-test-0.1.zip b/static/pyodide/cpp-exceptions-test-0.1.zip
new file mode 100644
index 0000000000000000000000000000000000000000..30584023618b95fb7829531f62526ca12e411fcc
--- /dev/null
+++ b/static/pyodide/cpp-exceptions-test-0.1.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53676d1fecb6fb64ccba1a75bdff77aea8e6fdb04ed423aa58814dc6b65d06cd
+size 1891
diff --git a/static/pyodide/cryptography-3.4.8-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/cryptography-3.4.8-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..9eb0f8c96036e01d33cff059943e428e6672bd47
--- /dev/null
+++ b/static/pyodide/cryptography-3.4.8-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c9a7e0e3297007a372ebb95a4a985de40be4cad13857b47f82be8d0eb7030f0c
+size 274162
diff --git a/static/pyodide/cssselect-1.1.0-py2.py3-none-any.whl b/static/pyodide/cssselect-1.1.0-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..164ef44c584e3d53e08d814a3afcbee49efd6f95
Binary files /dev/null and b/static/pyodide/cssselect-1.1.0-py2.py3-none-any.whl differ
diff --git a/static/pyodide/cycler-0.11.0-py3-none-any.whl b/static/pyodide/cycler-0.11.0-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..85b5b2999fdfd8a91f5cf99575d15c2b4d43bb9e
Binary files /dev/null and b/static/pyodide/cycler-0.11.0-py3-none-any.whl differ
diff --git a/static/pyodide/cytoolz-0.11.2-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/cytoolz-0.11.2-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..a6937e4557db9d4e26fd709b6086602449565f80
--- /dev/null
+++ b/static/pyodide/cytoolz-0.11.2-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:72b9d6ac65ca14d5b5abd52252a3d84fb8cdfec826d208c495e2d188e5167dc7
+size 222896
diff --git a/static/pyodide/cytoolz-tests.tar b/static/pyodide/cytoolz-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..b3cbd9af132732bc4c28a121259c8104a90ed2c6
--- /dev/null
+++ b/static/pyodide/cytoolz-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8f890651a7ae2f9d2b407ff5ba5b1e709f4d8b3482c3c332a7b20effe88a7b42
+size 143360
diff --git a/static/pyodide/decorator-5.1.1-py3-none-any.whl b/static/pyodide/decorator-5.1.1-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..8143bf48a942123902a025cb46e2d23ac5e81893
Binary files /dev/null and b/static/pyodide/decorator-5.1.1-py3-none-any.whl differ
diff --git a/static/pyodide/distlib-0.3.4-py2.py3-none-any.whl b/static/pyodide/distlib-0.3.4-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..c0b92b31e5986ed5ba528483b2caaf2e3e7700d0
--- /dev/null
+++ b/static/pyodide/distlib-0.3.4-py2.py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d03334d9b915827b43efeb7f61b313553a5995e83cf94cbe3f6ce913ee7cb5f7
+size 109101
diff --git a/static/pyodide/distutils.tar b/static/pyodide/distutils.tar
new file mode 100644
index 0000000000000000000000000000000000000000..d2bf66a5d134f1f977d5768ace61a9c06e9e3482
--- /dev/null
+++ b/static/pyodide/distutils.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6b59418ee6647fa5ec70113f0871cd8b5428fc9b9fbed9c367700ddf3ab40fe6
+size 983040
diff --git a/static/pyodide/docutils-0.18.1-py2.py3-none-any.whl b/static/pyodide/docutils-0.18.1-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..d55c74ded8f3760faf5ba4024776a1b4eda0c8f8
--- /dev/null
+++ b/static/pyodide/docutils-0.18.1-py2.py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e4d34f17f4a40cafaad9a5eb03b879b7fb70a4d2047320a135adc3f8d9b9cb62
+size 570050
diff --git a/static/pyodide/fonts/DejaVuSans-Bold.ttf b/static/pyodide/fonts/DejaVuSans-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..39699bd84ae17507955ce571caa859ad14997f4e
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSans-Bold.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b184b89e3c1075f22f6b71575b6fc20d4972b3cfd3b23322ca6fd596dcaef167
+size 704128
diff --git a/static/pyodide/fonts/DejaVuSans-BoldOblique.ttf b/static/pyodide/fonts/DejaVuSans-BoldOblique.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..cfd64ecefe8e5cdf2a0ea7d128019650a68ee682
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSans-BoldOblique.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6edf0283160186af451cbee71e7b845f2e4cabf264bb992ce668c83c25465e6f
+size 641720
diff --git a/static/pyodide/fonts/DejaVuSans-Oblique.ttf b/static/pyodide/fonts/DejaVuSans-Oblique.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..4ddf1fabb8648ac811ba05df9980121ec6a36452
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSans-Oblique.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ccdf74b350f11fd3dd5774de50e5e6346a1a5da1f5b7d5fb83590665e97a5213
+size 633840
diff --git a/static/pyodide/fonts/DejaVuSans.ttf b/static/pyodide/fonts/DejaVuSans.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..f47aa8cffd396d3ac221ad7a2a518bc9a554c9ce
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSans.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3fdf69cabf06049ea70a00b5919340e2ce1e6d02b0cc3c4b44fb6801bd1e0d22
+size 756072
diff --git a/static/pyodide/fonts/DejaVuSansDisplay.ttf b/static/pyodide/fonts/DejaVuSansDisplay.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..36758a2e70b6eb05ef8f8694828ed0eb157be3d3
Binary files /dev/null and b/static/pyodide/fonts/DejaVuSansDisplay.ttf differ
diff --git a/static/pyodide/fonts/DejaVuSansMono-Bold.ttf b/static/pyodide/fonts/DejaVuSansMono-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..fb4675de56d8c2b2b09734578191896c7bf6948e
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSansMono-Bold.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:baada9a5172fe20886251aff0433fc38461912d5daf07287e7bee56620a8da96
+size 331536
diff --git a/static/pyodide/fonts/DejaVuSansMono-BoldOblique.ttf b/static/pyodide/fonts/DejaVuSansMono-BoldOblique.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..ee85d0dc6915489b236e932ab89838b200443aba
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSansMono-BoldOblique.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a69081c15c76c827e0a27a5a7f5c74b6135c843499955495ffa8c20d3a98288b
+size 253116
diff --git a/static/pyodide/fonts/DejaVuSansMono-Oblique.ttf b/static/pyodide/fonts/DejaVuSansMono-Oblique.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..ba2147393770bbb669b1a6c735190f3cf6e732a8
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSansMono-Oblique.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28052813f7a709fc89f52d192dc995ef4f0fdc5c3d7b73a49d6849b1916d0cd0
+size 251472
diff --git a/static/pyodide/fonts/DejaVuSansMono.ttf b/static/pyodide/fonts/DejaVuSansMono.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..60f42148ea53bf551fc77faef9d6382ff0efcb16
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSansMono.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:602ec86b8948cfcd956482fe64f94c36c867770149ef2f791d4613f443bcecb3
+size 340240
diff --git a/static/pyodide/fonts/DejaVuSerif-Bold.ttf b/static/pyodide/fonts/DejaVuSerif-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..0137479cb3e30823976d9137d9e75ed8e225c57f
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSerif-Bold.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3753f2ed6bc673f15846dc45addbeb3b9c872f32fb18fd53a21f1bef1ed7676
+size 355692
diff --git a/static/pyodide/fonts/DejaVuSerif-BoldItalic.ttf b/static/pyodide/fonts/DejaVuSerif-BoldItalic.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..b89793b3fe00a3510c0a22b54d9ee7735e5e0803
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSerif-BoldItalic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d93efec7a9d2e826768d1a2ee95b95870e15e29599a84f3484af1de1cec2e181
+size 347064
diff --git a/static/pyodide/fonts/DejaVuSerif-Italic.ttf b/static/pyodide/fonts/DejaVuSerif-Italic.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..c1a70e8374879a0c04e370eb5c57861c4fd5abce
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSerif-Italic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3e7994fbc54fa10ce3352a42d548fadd7d9cadb69cb1109bc9d960f6dac57f04
+size 345612
diff --git a/static/pyodide/fonts/DejaVuSerif.ttf b/static/pyodide/fonts/DejaVuSerif.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..73a4204e08a49a83ab7336cb55add8b32200ae24
--- /dev/null
+++ b/static/pyodide/fonts/DejaVuSerif.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:107244956e9962b9e96faccdc551825e0ae0898ae13737133e1b921a2fd35ffa
+size 379740
diff --git a/static/pyodide/fonts/DejaVuSerifDisplay.ttf b/static/pyodide/fonts/DejaVuSerifDisplay.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..1623714d223f2b4ae5460269cf3afa34e91dd811
Binary files /dev/null and b/static/pyodide/fonts/DejaVuSerifDisplay.ttf differ
diff --git a/static/pyodide/fonts/Humor-Sans.ttf b/static/pyodide/fonts/Humor-Sans.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..d642b12b821a16d313b4035b3640eaa54a45b9e8
Binary files /dev/null and b/static/pyodide/fonts/Humor-Sans.ttf differ
diff --git a/static/pyodide/fonts/LICENSE_DEJAVU b/static/pyodide/fonts/LICENSE_DEJAVU
new file mode 100644
index 0000000000000000000000000000000000000000..254e2cc42a6d0135cccf2047768b9e44f25e666f
--- /dev/null
+++ b/static/pyodide/fonts/LICENSE_DEJAVU
@@ -0,0 +1,99 @@
+Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
+Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
+
+Bitstream Vera Fonts Copyright
+------------------------------
+
+Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
+a trademark of Bitstream, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of the fonts accompanying this license ("Fonts") and associated
+documentation files (the "Font Software"), to reproduce and distribute the
+Font Software, including without limitation the rights to use, copy, merge,
+publish, distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright and trademark notices and this permission notice shall
+be included in all copies of one or more of the Font Software typefaces.
+
+The Font Software may be modified, altered, or added to, and in particular
+the designs of glyphs or characters in the Fonts may be modified and
+additional glyphs or characters may be added to the Fonts, only if the fonts
+are renamed to names not containing either the words "Bitstream" or the word
+"Vera".
+
+This License becomes null and void to the extent applicable to Fonts or Font
+Software that has been modified and is distributed under the "Bitstream
+Vera" names.
+
+The Font Software may be sold as part of a larger software package but no
+copy of one or more of the Font Software typefaces may be sold by itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
+TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
+FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
+ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
+FONT SOFTWARE.
+
+Except as contained in this notice, the names of Gnome, the Gnome
+Foundation, and Bitstream Inc., shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this Font Software
+without prior written authorization from the Gnome Foundation or Bitstream
+Inc., respectively. For further information, contact: fonts at gnome dot
+org.
+
+Arev Fonts Copyright
+------------------------------
+
+Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the fonts accompanying this license ("Fonts") and
+associated documentation files (the "Font Software"), to reproduce
+and distribute the modifications to the Bitstream Vera Font Software,
+including without limitation the rights to use, copy, merge, publish,
+distribute, and/or sell copies of the Font Software, and to permit
+persons to whom the Font Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright and trademark notices and this permission notice
+shall be included in all copies of one or more of the Font Software
+typefaces.
+
+The Font Software may be modified, altered, or added to, and in
+particular the designs of glyphs or characters in the Fonts may be
+modified and additional glyphs or characters may be added to the
+Fonts, only if the fonts are renamed to names not containing either
+the words "Tavmjong Bah" or the word "Arev".
+
+This License becomes null and void to the extent applicable to Fonts
+or Font Software that has been modified and is distributed under the
+"Tavmjong Bah Arev" names.
+
+The Font Software may be sold as part of a larger software package but
+no copy of one or more of the Font Software typefaces may be sold by
+itself.
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
+TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+
+Except as contained in this notice, the name of Tavmjong Bah shall not
+be used in advertising or otherwise to promote the sale, use or other
+dealings in this Font Software without prior written authorization
+from Tavmjong Bah. For further information, contact: tavmjong @ free
+. fr.
+
+$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $
diff --git a/static/pyodide/fonts/LICENSE_STIX b/static/pyodide/fonts/LICENSE_STIX
new file mode 100644
index 0000000000000000000000000000000000000000..6034d94748146993f78c8059c345adafc860317b
--- /dev/null
+++ b/static/pyodide/fonts/LICENSE_STIX
@@ -0,0 +1,124 @@
+The STIX fonts distributed with matplotlib have been modified from
+their canonical form. They have been converted from OTF to TTF format
+using Fontforge and this script:
+
+ #!/usr/bin/env fontforge
+ i=1
+ while ( i<$argc )
+ Open($argv[i])
+ Generate($argv[i]:r + ".ttf")
+ i = i+1
+ endloop
+
+The original STIX Font License begins below.
+
+-----------------------------------------------------------
+
+STIX Font License
+
+24 May 2010
+
+Copyright (c) 2001-2010 by the STI Pub Companies, consisting of the American
+Institute of Physics, the American Chemical Society, the American Mathematical
+Society, the American Physical Society, Elsevier, Inc., and The Institute of
+Electrical and Electronic Engineers, Inc. (www.stixfonts.org), with Reserved
+Font Name STIX Fonts, STIX Fonts (TM) is a trademark of The Institute of
+Electrical and Electronics Engineers, Inc.
+
+Portions copyright (c) 1998-2003 by MicroPress, Inc. (www.micropress-inc.com),
+with Reserved Font Name TM Math. To obtain additional mathematical fonts, please
+contact MicroPress, Inc., 68-30 Harrow Street, Forest Hills, NY 11375, USA,
+Phone: (718) 575-1816.
+
+Portions copyright (c) 1990 by Elsevier, Inc.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+https://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/static/pyodide/fonts/STIXGeneral.ttf b/static/pyodide/fonts/STIXGeneral.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..cbf159757c5c0a47f1d8f2b984f0c20f52b7e25b
--- /dev/null
+++ b/static/pyodide/fonts/STIXGeneral.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:167378031e2dddc6216d67819c9260e9a06ffc4c478e4e23cb98a6fd44b183c2
+size 448228
diff --git a/static/pyodide/fonts/STIXGeneralBol.ttf b/static/pyodide/fonts/STIXGeneralBol.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..64ca51419ec522ee78c91e6f36f57fdb3bde290b
--- /dev/null
+++ b/static/pyodide/fonts/STIXGeneralBol.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e8533dc7083fa346bda1933d60ea4a83b67d0945bceaf1b3541f82b4a0e2c6a0
+size 237360
diff --git a/static/pyodide/fonts/STIXGeneralBolIta.ttf b/static/pyodide/fonts/STIXGeneralBolIta.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..585e03c626a96775f018e690fc6e10f6cd3e4047
--- /dev/null
+++ b/static/pyodide/fonts/STIXGeneralBolIta.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:98788fd4ba48dfbb2bd026c0e20a247a8b06c7372879628b7a6bb0d5bb09736c
+size 181152
diff --git a/static/pyodide/fonts/STIXGeneralItalic.ttf b/static/pyodide/fonts/STIXGeneralItalic.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..67ce0a807f6ae1dc2b4f7b863ce99620d29e6cb7
--- /dev/null
+++ b/static/pyodide/fonts/STIXGeneralItalic.ttf
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6cfcb333d22b7c3c623bdfd40174f14c85c3d6731ca6166c1edc80140eae8527
+size 175040
diff --git a/static/pyodide/fonts/STIXNonUni.ttf b/static/pyodide/fonts/STIXNonUni.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..a70c797d092dee1819ec9dcdffa2e6c62b92e12b
Binary files /dev/null and b/static/pyodide/fonts/STIXNonUni.ttf differ
diff --git a/static/pyodide/fonts/STIXNonUniBol.ttf b/static/pyodide/fonts/STIXNonUniBol.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..ccbd9a6011694d06644eb3e4a97f377145eebf19
Binary files /dev/null and b/static/pyodide/fonts/STIXNonUniBol.ttf differ
diff --git a/static/pyodide/fonts/STIXNonUniBolIta.ttf b/static/pyodide/fonts/STIXNonUniBolIta.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..e75e09e6c0c376e117789e9287d1a95de9acb009
Binary files /dev/null and b/static/pyodide/fonts/STIXNonUniBolIta.ttf differ
diff --git a/static/pyodide/fonts/STIXNonUniIta.ttf b/static/pyodide/fonts/STIXNonUniIta.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..c27d42fb250a5881efeccbf9c9dabca18efe958b
Binary files /dev/null and b/static/pyodide/fonts/STIXNonUniIta.ttf differ
diff --git a/static/pyodide/fonts/STIXSizFiveSymReg.ttf b/static/pyodide/fonts/STIXSizFiveSymReg.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..f81717ec1d0c057dcf1be2b9ac4e282fdfbe7987
Binary files /dev/null and b/static/pyodide/fonts/STIXSizFiveSymReg.ttf differ
diff --git a/static/pyodide/fonts/STIXSizFourSymBol.ttf b/static/pyodide/fonts/STIXSizFourSymBol.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..855dec982374b3f452120cbc47e5a892ef51c02b
Binary files /dev/null and b/static/pyodide/fonts/STIXSizFourSymBol.ttf differ
diff --git a/static/pyodide/fonts/STIXSizFourSymReg.ttf b/static/pyodide/fonts/STIXSizFourSymReg.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..f955ca2ad1ba36cd36e185671843448854d517dc
Binary files /dev/null and b/static/pyodide/fonts/STIXSizFourSymReg.ttf differ
diff --git a/static/pyodide/fonts/STIXSizOneSymBol.ttf b/static/pyodide/fonts/STIXSizOneSymBol.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..6ffd35778fd8eebf304a4842edd92ee49398567a
Binary files /dev/null and b/static/pyodide/fonts/STIXSizOneSymBol.ttf differ
diff --git a/static/pyodide/fonts/STIXSizOneSymReg.ttf b/static/pyodide/fonts/STIXSizOneSymReg.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..01ed101cd477dfb112616440bdb6a8a54a30cb67
Binary files /dev/null and b/static/pyodide/fonts/STIXSizOneSymReg.ttf differ
diff --git a/static/pyodide/fonts/STIXSizThreeSymBol.ttf b/static/pyodide/fonts/STIXSizThreeSymBol.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..1ccf365e8f1635df3d0672a92c416dca0e8ef033
Binary files /dev/null and b/static/pyodide/fonts/STIXSizThreeSymBol.ttf differ
diff --git a/static/pyodide/fonts/STIXSizThreeSymReg.ttf b/static/pyodide/fonts/STIXSizThreeSymReg.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..bf2b66af7620441b260a339358adf5c9628a4d4e
Binary files /dev/null and b/static/pyodide/fonts/STIXSizThreeSymReg.ttf differ
diff --git a/static/pyodide/fonts/STIXSizTwoSymBol.ttf b/static/pyodide/fonts/STIXSizTwoSymBol.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..bd5f93f0e48d5d993b349c160cb2efac071e8599
Binary files /dev/null and b/static/pyodide/fonts/STIXSizTwoSymBol.ttf differ
diff --git a/static/pyodide/fonts/STIXSizTwoSymReg.ttf b/static/pyodide/fonts/STIXSizTwoSymReg.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..73b9930f6cf7388f3337355ffc5cc0035c053e34
Binary files /dev/null and b/static/pyodide/fonts/STIXSizTwoSymReg.ttf differ
diff --git a/static/pyodide/fonts/cmb10.ttf b/static/pyodide/fonts/cmb10.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..189bdf0f0a01c2fb07e436ee4e348ae681b5dd97
Binary files /dev/null and b/static/pyodide/fonts/cmb10.ttf differ
diff --git a/static/pyodide/fonts/cmex10.ttf b/static/pyodide/fonts/cmex10.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..e4b468dcd37369fba8329f015fa644d9053848da
Binary files /dev/null and b/static/pyodide/fonts/cmex10.ttf differ
diff --git a/static/pyodide/fonts/cmmi10.ttf b/static/pyodide/fonts/cmmi10.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..8d326610412db20c62cd2f9aa0cfc06f334ab648
Binary files /dev/null and b/static/pyodide/fonts/cmmi10.ttf differ
diff --git a/static/pyodide/fonts/cmr10.ttf b/static/pyodide/fonts/cmr10.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..8bc44966a84421629220f03a87d1cf479733d2aa
Binary files /dev/null and b/static/pyodide/fonts/cmr10.ttf differ
diff --git a/static/pyodide/fonts/cmss10.ttf b/static/pyodide/fonts/cmss10.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..ef70532c71098c1ebb1e1666ae89ecc70ac8708a
Binary files /dev/null and b/static/pyodide/fonts/cmss10.ttf differ
diff --git a/static/pyodide/fonts/cmsy10.ttf b/static/pyodide/fonts/cmsy10.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..45d8421a5b118b1f49132337f80fb7730521483a
Binary files /dev/null and b/static/pyodide/fonts/cmsy10.ttf differ
diff --git a/static/pyodide/fonts/cmtt10.ttf b/static/pyodide/fonts/cmtt10.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..15bdb68b3f7165c68547949e0b2c0263a7438add
Binary files /dev/null and b/static/pyodide/fonts/cmtt10.ttf differ
diff --git a/static/pyodide/fonttools-4.32.0-py3-none-any.whl b/static/pyodide/fonttools-4.32.0-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..431c225f4e5a54ad73dd700194e760a7e792785f
--- /dev/null
+++ b/static/pyodide/fonttools-4.32.0-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b1f512cc3d7750276c256fc30f75821178ebe788bf87cff559c56c09fefbbf3a
+size 900849
diff --git a/static/pyodide/fpcast_test-0.1.1-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/fpcast_test-0.1.1-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..4133bf4de750a43b33989028ae2c1ae8aab49524
Binary files /dev/null and b/static/pyodide/fpcast_test-0.1.1-cp310-cp310-emscripten_wasm32.whl differ
diff --git a/static/pyodide/freesasa-2.1.0-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/freesasa-2.1.0-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..53804cc4b8e452401da02df74ce76737cadff4b6
--- /dev/null
+++ b/static/pyodide/freesasa-2.1.0-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4b08858e4757fe055f9d1d9d4b236fe75129ed65411335f4ecc625d4ccdf10a
+size 210054
diff --git a/static/pyodide/future-0.18.2-py3-none-any.whl b/static/pyodide/future-0.18.2-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..707375f4a63f670357f5b392061c2c6c22abb318
--- /dev/null
+++ b/static/pyodide/future-0.18.2-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:59feea5712087082a158347a688cd9ae11146f3e7dd66b3eba6042ba07541977
+size 436385
diff --git a/static/pyodide/future-tests.tar b/static/pyodide/future-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..f240bc1c116fb2a17363b200c68897b0ce2a8dfb
--- /dev/null
+++ b/static/pyodide/future-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e76ee03a68b66a7f474d663205c13a82207bbe7d5c4d3424942bf3b71c69d095
+size 194560
diff --git a/static/pyodide/html5lib-1.1-py2.py3-none-any.whl b/static/pyodide/html5lib-1.1-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..c913786d77060f00a98208fd79560ae5214bd0e2
--- /dev/null
+++ b/static/pyodide/html5lib-1.1-py2.py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:749405fb1213d392ba57d6ceb95249bd59d9ff1cfac271b8fcfbee01ca968017
+size 112173
diff --git a/static/pyodide/imageio-2.16.1-py3-none-any.whl b/static/pyodide/imageio-2.16.1-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..093ba909c68f1dc88a58250298b92f3ddb0fa4b0
--- /dev/null
+++ b/static/pyodide/imageio-2.16.1-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d8e58e571a71f19d90e145b442da43378ae7a7643d7c8f2a9f9552f440a3f44f
+size 3339350
diff --git a/static/pyodide/iniconfig-1.1.1-py2.py3-none-any.whl b/static/pyodide/iniconfig-1.1.1-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..f93d061e1540a7a52427ad522ebbdb361a258fa0
Binary files /dev/null and b/static/pyodide/iniconfig-1.1.1-py2.py3-none-any.whl differ
diff --git a/static/pyodide/jedi-0.18.1-py2.py3-none-any.whl b/static/pyodide/jedi-0.18.1-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..21e7b3321c2a9bf7d97cc164e58382f7b5816d07
--- /dev/null
+++ b/static/pyodide/jedi-0.18.1-py2.py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63a60c3ddaabe280b247b804426f434f9850b6847694b91875d7d495aa949bcc
+size 1557999
diff --git a/static/pyodide/jedi-tests.tar b/static/pyodide/jedi-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..16f2c4c308764abca59b152490e689036e6bf251
--- /dev/null
+++ b/static/pyodide/jedi-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8b9e38227e8803eb599a0beb649dedc5e4ba1247f9aabd059307968bbc1198ca
+size 61440
diff --git a/static/pyodide/joblib-1.1.0-py2.py3-none-any.whl b/static/pyodide/joblib-1.1.0-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..4c6a10c7f0208727f53fc5647a57b42a165823de
--- /dev/null
+++ b/static/pyodide/joblib-1.1.0-py2.py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:17932a95db4971da89ce74d59159d761c6ed03f544a953af4b645ddf96f90e75
+size 188791
diff --git a/static/pyodide/joblib-tests.tar b/static/pyodide/joblib-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..6d0cbd55b99383255499b1b1ddc12c9ae7d96567
--- /dev/null
+++ b/static/pyodide/joblib-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1d61436965bdf2fe5b4e34463c4d2e587cc503a837b4b356cd7ec4040592a5d2
+size 471040
diff --git a/static/pyodide/kiwisolver-1.4.2-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/kiwisolver-1.4.2-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..5bb2b3e7c082827c8e7bf512b10788e95fe29663
Binary files /dev/null and b/static/pyodide/kiwisolver-1.4.2-cp310-cp310-emscripten_wasm32.whl differ
diff --git a/static/pyodide/lazy_object_proxy-1.7.1-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/lazy_object_proxy-1.7.1-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..d9251188691e6e2f1ffedef6a227fde3c1bdbb7e
Binary files /dev/null and b/static/pyodide/lazy_object_proxy-1.7.1-cp310-cp310-emscripten_wasm32.whl differ
diff --git a/static/pyodide/lxml-4.8.0-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/lxml-4.8.0-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..fbb0d24d6c97bc900dfeab59eebce4ff0d98218f
--- /dev/null
+++ b/static/pyodide/lxml-4.8.0-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b54d8b64401f3dd926b0c70ed2da218dbaf8912931d2caf244979586fce59cac
+size 1952385
diff --git a/static/pyodide/matplotlib-3.5.1-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/matplotlib-3.5.1-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..d2d19bca71d8b0a370b06dfb39696a19ad9a6b5b
--- /dev/null
+++ b/static/pyodide/matplotlib-3.5.1-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f46d3583bdd1ed3532394a3ecadbbd3016b11de997f9fd7e15b731dce74b9e63
+size 6353472
diff --git a/static/pyodide/matplotlib-tests.tar b/static/pyodide/matplotlib-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..1d63a9f4749b5cef6ead6f89aa056c3c1cd31486
--- /dev/null
+++ b/static/pyodide/matplotlib-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ff03b4f276caafb16d58725da5aad0f77dc1bfb0f3f2b66ca1607b37f5f19d38
+size 1607680
diff --git a/static/pyodide/micropip-0.1-py3-none-any.whl b/static/pyodide/micropip-0.1-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..baa1401ee13234b85b63bb55eb28b3a98e748970
Binary files /dev/null and b/static/pyodide/micropip-0.1-py3-none-any.whl differ
diff --git a/static/pyodide/mne-1.0.0-py3-none-any.whl b/static/pyodide/mne-1.0.0-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..1df98dd8673560e5e21a46e453f2cbfc1df2b02a
--- /dev/null
+++ b/static/pyodide/mne-1.0.0-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f7302e70e1cedfbe6fa9d1654edec1c4e9a15b7de82fe448dbff36d3f07aee4a
+size 6807295
diff --git a/static/pyodide/mne-tests.tar b/static/pyodide/mne-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..f8022a574dfce1b25dd35dfc7c84175d061c8698
--- /dev/null
+++ b/static/pyodide/mne-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ee6e72f481be2eb002a185af9bbcf779be9dd87cfac7c1eb2931bae633f2ed90
+size 3246080
diff --git a/static/pyodide/module_test.html b/static/pyodide/module_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..6b4ad3dbbce6fa0811f4cd212365dc83e21d9976
--- /dev/null
+++ b/static/pyodide/module_test.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/static/pyodide/module_webworker_dev.js b/static/pyodide/module_webworker_dev.js
new file mode 100644
index 0000000000000000000000000000000000000000..0fd899d666082c3efe64772102fab9b972d1bc45
--- /dev/null
+++ b/static/pyodide/module_webworker_dev.js
@@ -0,0 +1,26 @@
+import { loadPyodide } from "./pyodide.mjs";
+
+onmessage = async function (e) {
+ try {
+ const data = e.data;
+ for (let key of Object.keys(data)) {
+ if (key !== "python") {
+ // Keys other than python must be arguments for the python script.
+ // Set them on self, so that `from js import key` works.
+ self[key] = data[key];
+ }
+ }
+
+ if (!loadPyodide.inProgress) {
+ self.pyodide = await loadPyodide();
+ }
+ await self.pyodide.loadPackagesFromImports(data.python);
+ let results = await self.pyodide.runPythonAsync(data.python);
+ self.postMessage({ results });
+ } catch (e) {
+ // if you prefer messages with the error
+ self.postMessage({ error: e.message + "\n" + e.stack });
+ // if you prefer onerror events
+ // setTimeout(() => { throw err; });
+ }
+};
diff --git a/static/pyodide/more_itertools-8.12.0-py3-none-any.whl b/static/pyodide/more_itertools-8.12.0-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..eda5c362762054766953abc98d4f30f097c1e9a8
Binary files /dev/null and b/static/pyodide/more_itertools-8.12.0-py3-none-any.whl differ
diff --git a/static/pyodide/mpmath-1.2.1-py3-none-any.whl b/static/pyodide/mpmath-1.2.1-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..e321d48eb8fd3a0cb5144b6442cf9251510f9eea
--- /dev/null
+++ b/static/pyodide/mpmath-1.2.1-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:67a13442b9bdb87af2499cd05cd9d141811733aaa7a2256f9f39fcb6d5b5907b
+size 414831
diff --git a/static/pyodide/mpmath-tests.tar b/static/pyodide/mpmath-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..92e1857a152514cdaef32e531634666fb9fba304
--- /dev/null
+++ b/static/pyodide/mpmath-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8d33ed8bb3b8d51200ac966b702d1603d3b81c20ebe13c22dd272101e473bb48
+size 512000
diff --git a/static/pyodide/msgpack-1.0.3-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/msgpack-1.0.3-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..9657d24e035c820dcc953eb67abffeb6614c84f3
Binary files /dev/null and b/static/pyodide/msgpack-1.0.3-cp310-cp310-emscripten_wasm32.whl differ
diff --git a/static/pyodide/networkx-2.7.1-py3-none-any.whl b/static/pyodide/networkx-2.7.1-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..3cdecacee2b5399d810a5f5e02ae6e6659096c61
--- /dev/null
+++ b/static/pyodide/networkx-2.7.1-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:05132bfa7faa78ac2046eda2e3150ca1fc38b7ee42f02e19eb4d691c6accd4a9
+size 1369530
diff --git a/static/pyodide/networkx-tests.tar b/static/pyodide/networkx-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..c66bd439e8cffb1a4012de9eeccda47daeff8bb5
--- /dev/null
+++ b/static/pyodide/networkx-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b83ef28577ebea707b61bb37ff7bdd71d0aa6142ba1166a9bacaec6a790723e0
+size 2703360
diff --git a/static/pyodide/nlopt-2.7.0-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/nlopt-2.7.0-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..7342e8df6be4a62789892074a0a3b7d0ca609cc9
--- /dev/null
+++ b/static/pyodide/nlopt-2.7.0-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cd9f82e63517fddd027fbc4dcac2cbabe593a19e36733bf2202016955b958958
+size 172525
diff --git a/static/pyodide/nltk-3.7-py3-none-any.whl b/static/pyodide/nltk-3.7-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..d649ee5617e28f1b79fcdf8155dc3ff4fa1dc212
--- /dev/null
+++ b/static/pyodide/nltk-3.7-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ca3bdf3d743617e8f136e1f8fc6d892c9af9e29ee34aee99c2d1e57404546f61
+size 1214433
diff --git a/static/pyodide/nltk-tests.tar b/static/pyodide/nltk-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..e917262beff00de7bc6304ab2049ce5e5f719095
--- /dev/null
+++ b/static/pyodide/nltk-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:651f0f973d0200c88868d4a05c185da3c527884847c4cf0a2e3ea36e2abd9b27
+size 1331200
diff --git a/static/pyodide/nose-1.3.7-py3-none-any.whl b/static/pyodide/nose-1.3.7-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..a4448a6a57341eb3ccdd3dae5eea85aa55d41513
--- /dev/null
+++ b/static/pyodide/nose-1.3.7-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d8e402ed5ff62e5c32822d1bb12d881a4ff1a69e8f5f1080d36b52bf7f166d94
+size 154726
diff --git a/static/pyodide/numcodecs-0.9.1-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/numcodecs-0.9.1-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..f1edce0d45c2d14fef97e77af665e2348e7d028f
--- /dev/null
+++ b/static/pyodide/numcodecs-0.9.1-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:75eca001fb897bbd9a1650ba9e56b793049cb6e14d8eb448705147b8454c546c
+size 581989
diff --git a/static/pyodide/numcodecs-tests.tar b/static/pyodide/numcodecs-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..d7dc262f7bc39f53fe94a9b6ee2fbac132a22b3b
--- /dev/null
+++ b/static/pyodide/numcodecs-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4118ba283849568fdd576308bc49549f043e98f594b4be4d6f513a5974e261f7
+size 133120
diff --git a/static/pyodide/numpy-1.22.3-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/numpy-1.22.3-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..3dbdb07c7034c3d2198748b026640b70dcee5ba8
--- /dev/null
+++ b/static/pyodide/numpy-1.22.3-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:66bdd509cef40943a9856d58b8413c03119049a0b8a8cc5c7d04582a21e7157c
+size 3696664
diff --git a/static/pyodide/numpy-tests.tar b/static/pyodide/numpy-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..b25d87fc7376169ffc8eedbefaf0614779a95adc
--- /dev/null
+++ b/static/pyodide/numpy-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eef2754e94cbec6c4dc1d10a39a989fd22978cc3ff73f5df783654eac1552c40
+size 6481920
diff --git a/static/pyodide/openssl-1.1.1n.zip b/static/pyodide/openssl-1.1.1n.zip
new file mode 100644
index 0000000000000000000000000000000000000000..a65210a2bba3c62e4c5333a758994a42ca06a3fb
--- /dev/null
+++ b/static/pyodide/openssl-1.1.1n.zip
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a00ccf9237060b69db56db37730520f9967bade1518303d3eafed3d29d9c0b72
+size 827684
diff --git a/static/pyodide/optlang-1.5.2-py2.py3-none-any.whl b/static/pyodide/optlang-1.5.2-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..221cf4d3c6202b14d33422bf413b0345617841fa
Binary files /dev/null and b/static/pyodide/optlang-1.5.2-py2.py3-none-any.whl differ
diff --git a/static/pyodide/optlang-tests.tar b/static/pyodide/optlang-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..9b0869441dd67265d1b01a863e6b16c087cf6951
--- /dev/null
+++ b/static/pyodide/optlang-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:15a9feeaf1a9cdb60add54354e8c32ed6637bd81ec9b04ad5c250db88bcf3f5a
+size 348160
diff --git a/static/pyodide/packages.json b/static/pyodide/packages.json
new file mode 100644
index 0000000000000000000000000000000000000000..6d04493c0697b98f0c5b0ac4a7d3dd5bdd6f95e8
--- /dev/null
+++ b/static/pyodide/packages.json
@@ -0,0 +1 @@
+{"info": {"arch": "wasm32", "platform": "Emscripten-1.0"}, "packages": {"asciitree": {"name": "asciitree", "version": "0.3.3", "file_name": "asciitree-0.3.3-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["asciitree"]}, "astropy": {"name": "astropy", "version": "5.0.4", "file_name": "astropy-5.0.4-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["distutils", "packaging", "numpy", "pyerfa", "pyyaml"], "imports": ["astropy", "astropy.config", "astropy.constants", "astropy.convolution", "astropy.coordinates", "astropy.cosmology", "astropy.extern", "astropy.io", "astropy.modeling", "astropy.nddata", "astropy.samp", "astropy.stats", "astropy.table", "astropy.time", "astropy.timeseries", "astropy.uncertainty", "astropy.units", "astropy.utils", "astropy.visualization", "astropy.wcs"]}, "atomicwrites": {"name": "atomicwrites", "version": "1.4.0", "file_name": "atomicwrites-1.4.0-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["atomicwrites"]}, "attrs": {"name": "attrs", "version": "21.4.0", "file_name": "attrs-21.4.0-py2.py3-none-any.whl", "install_dir": "site", "depends": ["six"], "imports": ["attr"]}, "autograd": {"name": "autograd", "version": "1.4", "file_name": "autograd-1.4-py3-none-any.whl", "install_dir": "site", "depends": ["numpy", "future"], "imports": ["autograd"], "unvendored_tests": true}, "autograd-tests": {"name": "autograd-tests", "version": "1.4", "depends": ["autograd"], "imports": [], "file_name": "autograd-tests.tar", "install_dir": "site"}, "beautifulsoup4": {"name": "beautifulsoup4", "version": "4.11.0", "file_name": "beautifulsoup4-4.11.0-py3-none-any.whl", "install_dir": "site", "depends": ["soupsieve"], "imports": ["bs4"]}, "biopython": {"name": "biopython", "version": "1.79", "file_name": "biopython-1.79-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["numpy"], "imports": ["Bio"]}, "bleach": {"name": "bleach", "version": "5.0.0", "file_name": "bleach-5.0.0-py3-none-any.whl", "install_dir": "site", "depends": ["webencodings", "packaging", "six"], "imports": ["bleach"]}, "bokeh": {"name": "bokeh", "version": "2.4.2", "file_name": "bokeh-2.4.2-py3-none-any.whl", "install_dir": "site", "depends": ["distutils", "numpy", "jinja2", "pillow", "python-dateutil", "six", "typing-extensions", "pyyaml"], "imports": ["bokeh"]}, "boost-histogram": {"name": "boost-histogram", "version": "1.3.1", "file_name": "boost_histogram-1.3.1-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["numpy"], "imports": ["boost_histogram"]}, "cffi": {"name": "cffi", "version": "1.15.0", "file_name": "cffi-1.15.0-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["pycparser"], "imports": ["cffi"]}, "cffi_example": {"name": "cffi_example", "version": "0.1", "file_name": "cffi_example-0.1-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["cffi"], "imports": ["cffi_example"]}, "clapack": {"name": "CLAPACK", "version": "3.2.1", "file_name": "CLAPACK-3.2.1.zip", "install_dir": "site", "shared_library": true, "depends": [], "imports": ["CLAPACK"]}, "cloudpickle": {"name": "cloudpickle", "version": "2.0.0", "file_name": "cloudpickle-2.0.0-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["cloudpickle"]}, "cmyt": {"name": "cmyt", "version": "1.0.4", "file_name": "cmyt-1.0.4-py3-none-any.whl", "install_dir": "site", "depends": ["colorspacious", "matplotlib", "more-itertools", "numpy"], "imports": ["cmyt"], "unvendored_tests": true}, "cmyt-tests": {"name": "cmyt-tests", "version": "1.0.4", "depends": ["cmyt"], "imports": [], "file_name": "cmyt-tests.tar", "install_dir": "site"}, "colorspacious": {"name": "colorspacious", "version": "1.1.2", "file_name": "colorspacious-1.1.2-py2.py3-none-any.whl", "install_dir": "site", "depends": ["numpy"], "imports": ["colorspacious"]}, "cpp-exceptions-test": {"name": "cpp-exceptions-test", "version": "0.1", "file_name": "cpp-exceptions-test-0.1.zip", "install_dir": "site", "shared_library": true, "depends": [], "imports": ["cpp-exceptions-test"]}, "cryptography": {"name": "cryptography", "version": "3.4.8", "file_name": "cryptography-3.4.8-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["openssl", "six", "cffi"], "imports": ["cryptography", "cryptography.fernet", "cryptography.hazmat", "cryptography.utils", "cryptography.x509"]}, "cssselect": {"name": "cssselect", "version": "1.1.0", "file_name": "cssselect-1.1.0-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["cssselect"]}, "cycler": {"name": "cycler", "version": "0.11.0", "file_name": "cycler-0.11.0-py3-none-any.whl", "install_dir": "site", "depends": ["six"], "imports": ["cycler"]}, "cytoolz": {"name": "cytoolz", "version": "0.11.2", "file_name": "cytoolz-0.11.2-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["nose", "toolz"], "imports": ["cytoolz"], "unvendored_tests": true}, "cytoolz-tests": {"name": "cytoolz-tests", "version": "0.11.2", "depends": ["cytoolz"], "imports": [], "file_name": "cytoolz-tests.tar", "install_dir": "site"}, "decorator": {"name": "decorator", "version": "5.1.1", "file_name": "decorator-5.1.1-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["decorator"]}, "distlib": {"name": "distlib", "version": "0.3.4", "file_name": "distlib-0.3.4-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["distlib"]}, "distutils": {"name": "distutils", "version": "1.0", "file_name": "distutils.tar", "install_dir": "lib", "depends": [], "imports": ["distutils"]}, "docutils": {"name": "docutils", "version": "0.18.1", "file_name": "docutils-0.18.1-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["docutils"]}, "fonttools": {"name": "fonttools", "version": "4.32.0", "file_name": "fonttools-4.32.0-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["fontTools"]}, "fpcast-test": {"name": "fpcast-test", "version": "0.1", "file_name": "fpcast_test-0.1.1-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["fpcast_test"]}, "freesasa": {"name": "freesasa", "version": "2.1.0", "file_name": "freesasa-2.1.0-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["freesasa"]}, "future": {"name": "future", "version": "0.18.2", "file_name": "future-0.18.2-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["future"], "unvendored_tests": true}, "future-tests": {"name": "future-tests", "version": "0.18.2", "depends": ["future"], "imports": [], "file_name": "future-tests.tar", "install_dir": "site"}, "html5lib": {"name": "html5lib", "version": "1.1", "file_name": "html5lib-1.1-py2.py3-none-any.whl", "install_dir": "site", "depends": ["webencodings", "six"], "imports": ["html5lib"]}, "imageio": {"name": "imageio", "version": "2.16.1", "file_name": "imageio-2.16.1-py3-none-any.whl", "install_dir": "site", "depends": ["numpy", "pillow"], "imports": ["imageio"]}, "iniconfig": {"name": "iniconfig", "version": "1.1.1", "file_name": "iniconfig-1.1.1-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["iniconfig"]}, "jedi": {"name": "jedi", "version": "0.18.1", "file_name": "jedi-0.18.1-py2.py3-none-any.whl", "install_dir": "site", "depends": ["parso"], "imports": ["jedi"], "unvendored_tests": true}, "jedi-tests": {"name": "jedi-tests", "version": "0.18.1", "depends": ["jedi"], "imports": [], "file_name": "jedi-tests.tar", "install_dir": "site"}, "jinja2": {"name": "Jinja2", "version": "3.1.1", "file_name": "Jinja2-3.1.1-py3-none-any.whl", "install_dir": "site", "depends": ["markupsafe"], "imports": ["jinja2"]}, "joblib": {"name": "joblib", "version": "1.1.0", "file_name": "joblib-1.1.0-py2.py3-none-any.whl", "install_dir": "site", "depends": ["distutils"], "imports": ["joblib"], "unvendored_tests": true}, "joblib-tests": {"name": "joblib-tests", "version": "1.1.0", "depends": ["joblib"], "imports": [], "file_name": "joblib-tests.tar", "install_dir": "site"}, "kiwisolver": {"name": "kiwisolver", "version": "1.4.2", "file_name": "kiwisolver-1.4.2-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["kiwisolver"]}, "lazy-object-proxy": {"name": "lazy-object-proxy", "version": "1.7.1", "file_name": "lazy_object_proxy-1.7.1-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["lazy_object_proxy"]}, "logbook": {"name": "logbook", "version": "1.5.3", "file_name": "Logbook-1.5.3-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["distutils", "setuptools"], "imports": ["logbook"]}, "lxml": {"name": "lxml", "version": "4.8.0", "file_name": "lxml-4.8.0-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["beautifulsoup4", "cssselect", "html5lib"], "imports": ["lxml", "lxml.etree", "lxml.objectify"]}, "markupsafe": {"name": "MarkupSafe", "version": "2.1.1", "file_name": "MarkupSafe-2.1.1-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["markupsafe"]}, "matplotlib": {"name": "matplotlib", "version": "3.5.1", "file_name": "matplotlib-3.5.1-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["cycler", "distutils", "fonttools", "kiwisolver", "numpy", "packaging", "pillow", "pyparsing", "python-dateutil", "pytz"], "imports": ["matplotlib", "mpl_toolkits"], "unvendored_tests": true}, "matplotlib-tests": {"name": "matplotlib-tests", "version": "3.5.1", "depends": ["matplotlib"], "imports": [], "file_name": "matplotlib-tests.tar", "install_dir": "site"}, "micropip": {"name": "micropip", "version": "0.1", "file_name": "micropip-0.1-py3-none-any.whl", "install_dir": "site", "depends": ["pyparsing", "packaging", "distutils"], "imports": ["micropip"]}, "mne": {"name": "mne", "version": "1.0.0", "file_name": "mne-1.0.0-py3-none-any.whl", "install_dir": "site", "depends": ["distutils", "numpy", "scipy", "setuptools", "decorator"], "imports": ["mne"], "unvendored_tests": true}, "mne-tests": {"name": "mne-tests", "version": "1.0.0", "depends": ["mne"], "imports": [], "file_name": "mne-tests.tar", "install_dir": "site"}, "more-itertools": {"name": "more-itertools", "version": "8.12.0", "file_name": "more_itertools-8.12.0-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["more_itertools"]}, "mpmath": {"name": "mpmath", "version": "1.2.1", "file_name": "mpmath-1.2.1-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["mpmath"], "unvendored_tests": true}, "mpmath-tests": {"name": "mpmath-tests", "version": "1.2.1", "depends": ["mpmath"], "imports": [], "file_name": "mpmath-tests.tar", "install_dir": "site"}, "msgpack": {"name": "msgpack", "version": "1.0.3", "file_name": "msgpack-1.0.3-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["msgpack"]}, "networkx": {"name": "networkx", "version": "2.7.1", "file_name": "networkx-2.7.1-py3-none-any.whl", "install_dir": "site", "depends": ["decorator", "setuptools", "matplotlib", "numpy"], "imports": ["networkx", "networkx.algorithms", "networkx.algorithms.approximation", "networkx.algorithms.assortativity", "networkx.algorithms.bipartite", "networkx.algorithms.centrality", "networkx.algorithms.chordal", "networkx.algorithms.coloring", "networkx.algorithms.community", "networkx.algorithms.components", "networkx.algorithms.connectivity", "networkx.algorithms.flow", "networkx.algorithms.isomorphism", "networkx.algorithms.link_analysis", "networkx.algorithms.node_classification", "networkx.algorithms.operators", "networkx.algorithms.shortest_paths", "networkx.algorithms.traversal", "networkx.algorithms.tree", "networkx.classes", "networkx.drawing", "networkx.generators", "networkx.linalg", "networkx.readwrite", "networkx.readwrite.json_graph", "networkx.utils"], "unvendored_tests": true}, "networkx-tests": {"name": "networkx-tests", "version": "2.7.1", "depends": ["networkx"], "imports": [], "file_name": "networkx-tests.tar", "install_dir": "site"}, "nlopt": {"name": "nlopt", "version": "2.7.0", "file_name": "nlopt-2.7.0-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["numpy"], "imports": ["nlopt"]}, "nltk": {"name": "nltk", "version": "3.7", "file_name": "nltk-3.7-py3-none-any.whl", "install_dir": "site", "depends": ["regex"], "imports": ["nltk", "sqlite3"], "unvendored_tests": true}, "nltk-tests": {"name": "nltk-tests", "version": "3.7", "depends": ["nltk"], "imports": [], "file_name": "nltk-tests.tar", "install_dir": "site"}, "nose": {"name": "nose", "version": "1.3.7", "file_name": "nose-1.3.7-py3-none-any.whl", "install_dir": "site", "depends": ["setuptools"], "imports": ["nose"]}, "numcodecs": {"name": "numcodecs", "version": "0.9.1", "file_name": "numcodecs-0.9.1-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["numpy", "msgpack"], "imports": ["numcodecs"], "unvendored_tests": true}, "numcodecs-tests": {"name": "numcodecs-tests", "version": "0.9.1", "depends": ["numcodecs"], "imports": [], "file_name": "numcodecs-tests.tar", "install_dir": "site"}, "numpy": {"name": "numpy", "version": "1.22.3", "file_name": "numpy-1.22.3-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["numpy"], "unvendored_tests": true}, "numpy-tests": {"name": "numpy-tests", "version": "1.22.3", "depends": ["numpy"], "imports": [], "file_name": "numpy-tests.tar", "install_dir": "site"}, "openssl": {"name": "openssl", "version": "1.1.1n", "file_name": "openssl-1.1.1n.zip", "install_dir": "site", "shared_library": true, "depends": [], "imports": ["openssl"]}, "optlang": {"name": "optlang", "version": "1.5.2", "file_name": "optlang-1.5.2-py2.py3-none-any.whl", "install_dir": "site", "depends": ["sympy", "six", "swiglpk"], "imports": ["optlang", "optlang.glpk_interface", "optlang.symbolics"], "unvendored_tests": true}, "optlang-tests": {"name": "optlang-tests", "version": "1.5.2", "depends": ["optlang"], "imports": [], "file_name": "optlang-tests.tar", "install_dir": "site"}, "packaging": {"name": "packaging", "version": "21.3", "file_name": "packaging-21.3-py3-none-any.whl", "install_dir": "site", "depends": ["pyparsing"], "imports": ["packaging"]}, "pandas": {"name": "pandas", "version": "1.4.2", "file_name": "pandas-1.4.2-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["distutils", "numpy", "python-dateutil", "pytz", "setuptools"], "imports": ["pandas"], "unvendored_tests": true}, "pandas-tests": {"name": "pandas-tests", "version": "1.4.2", "depends": ["pandas"], "imports": [], "file_name": "pandas-tests.tar", "install_dir": "site"}, "parso": {"name": "parso", "version": "0.8.3", "file_name": "parso-0.8.3-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["parso"]}, "patsy": {"name": "patsy", "version": "0.5.2", "file_name": "patsy-0.5.2-py2.py3-none-any.whl", "install_dir": "site", "depends": ["numpy", "six"], "imports": ["patsy"], "unvendored_tests": true}, "patsy-tests": {"name": "patsy-tests", "version": "0.5.2", "depends": ["patsy"], "imports": [], "file_name": "patsy-tests.tar", "install_dir": "site"}, "pillow": {"name": "Pillow", "version": "9.1.0", "file_name": "PIL-9.1.0-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["PIL"]}, "pluggy": {"name": "pluggy", "version": "1.0.0", "file_name": "pluggy-1.0.0-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["pluggy"]}, "py": {"name": "py", "version": "1.11.0", "file_name": "py-1.11.0-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["py", "py.code"]}, "pyb2d": {"name": "pyb2d", "version": "0.7.2", "file_name": "b2d-0.7.2-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["numpy", "pydantic", "setuptools"], "imports": ["b2d", "b2d.testbed"]}, "pycparser": {"name": "pycparser", "version": "2.21", "file_name": "pycparser-2.21-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["pycparser"]}, "pydantic": {"name": "pydantic", "version": "1.9.0", "file_name": "pydantic-1.9.0-py3-none-any.whl", "install_dir": "site", "depends": ["typing-extensions"], "imports": ["pydantic"]}, "pyerfa": {"name": "pyerfa", "version": "2.0.0.1", "file_name": "pyerfa-2.0.0.1-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["numpy"], "imports": ["erfa"], "unvendored_tests": true}, "pyerfa-tests": {"name": "pyerfa-tests", "version": "2.0.0.1", "depends": ["pyerfa"], "imports": [], "file_name": "pyerfa-tests.tar", "install_dir": "site"}, "pygments": {"name": "Pygments", "version": "2.11.2", "file_name": "Pygments-2.11.2-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["pygments"]}, "pyparsing": {"name": "pyparsing", "version": "3.0.7", "file_name": "pyparsing-3.0.7-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["pyparsing"]}, "pyrsistent": {"name": "pyrsistent", "version": "0.18.1", "file_name": "pyrsistent-0.18.1-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["pyrsistent"]}, "pytest": {"name": "pytest", "version": "7.1.1", "file_name": "pytest-7.1.1-py3-none-any.whl", "install_dir": "site", "depends": ["atomicwrites", "attrs", "more-itertools", "pluggy", "py", "setuptools", "six", "iniconfig"], "imports": ["pytest"]}, "python-dateutil": {"name": "python-dateutil", "version": "2.8.2", "file_name": "python_dateutil-2.8.2-py2.py3-none-any.whl", "install_dir": "site", "depends": ["six"], "imports": ["dateutil"]}, "python-sat": {"name": "python-sat", "version": "0.1.7.dev16", "file_name": "python_sat-0.1.7.dev16-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["six"], "imports": ["pysat"]}, "pytz": {"name": "pytz", "version": "2022.1", "file_name": "pytz-2022.1-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["pytz"]}, "pywavelets": {"name": "pywavelets", "version": "1.3.0", "file_name": "PyWavelets-1.3.0-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["distutils", "numpy", "matplotlib", "scipy"], "imports": ["pywt"], "unvendored_tests": true}, "pywavelets-tests": {"name": "pywavelets-tests", "version": "1.3.0", "depends": ["pywavelets"], "imports": [], "file_name": "pywavelets-tests.tar", "install_dir": "site"}, "pyyaml": {"name": "pyyaml", "version": "6.0", "file_name": "PyYAML-6.0-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["yaml"]}, "regex": {"name": "regex", "version": "2022.3.15", "file_name": "regex-2022.3.15-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["regex"], "unvendored_tests": true}, "regex-tests": {"name": "regex-tests", "version": "2022.3.15", "depends": ["regex"], "imports": [], "file_name": "regex-tests.tar", "install_dir": "site"}, "retrying": {"name": "retrying", "version": "1.3.3", "file_name": "retrying-1.3.3-py3-none-any.whl", "install_dir": "site", "depends": ["six"], "imports": ["retrying"]}, "scikit-image": {"name": "scikit-image", "version": "0.19.2", "file_name": "scikit_image-0.19.2-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["distutils", "packaging", "numpy", "scipy", "matplotlib", "networkx", "pillow", "imageio", "pywavelets"], "imports": ["skimage"], "unvendored_tests": true}, "scikit-image-tests": {"name": "scikit-image-tests", "version": "0.19.2", "depends": ["scikit-image"], "imports": [], "file_name": "scikit-image-tests.tar", "install_dir": "site"}, "scikit-learn": {"name": "scikit-learn", "version": "1.0.2", "file_name": "scikit_learn-1.0.2-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["numpy", "scipy", "joblib", "threadpoolctl"], "imports": ["sklearn", "sklearn.calibration", "sklearn.cluster", "sklearn.compose", "sklearn.covariance", "sklearn.cross_decomposition", "sklearn.datasets", "sklearn.decomposition", "sklearn.discriminant_analysis", "sklearn.dummy", "sklearn.ensemble", "sklearn.exceptions", "sklearn.externals", "sklearn.feature_extraction", "sklearn.feature_selection", "sklearn.gaussian_process", "sklearn.impute", "sklearn.isotonic", "sklearn.kernel_approximation", "sklearn.kernel_ridge", "sklearn.linear_model", "sklearn.manifold", "sklearn.metrics", "sklearn.mixture", "sklearn.model_selection", "sklearn.multiclass", "sklearn.multioutput", "sklearn.naive_bayes", "sklearn.neighbors", "sklearn.neural_network", "sklearn.pipeline", "sklearn.preprocessing", "sklearn.random_projection", "sklearn.semi_supervised", "sklearn.svm", "sklearn.tree", "sklearn.utils"], "unvendored_tests": true}, "scikit-learn-tests": {"name": "scikit-learn-tests", "version": "1.0.2", "depends": ["scikit-learn"], "imports": [], "file_name": "scikit-learn-tests.tar", "install_dir": "site"}, "scipy": {"name": "scipy", "version": "1.8.0", "file_name": "scipy-1.8.0-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["numpy", "clapack"], "imports": ["scipy", "scipy.cluster", "scipy.cluster.vq", "scipy.cluster.hierarchy", "scipy.constants", "scipy.fft", "scipy.fftpack", "scipy.integrate", "scipy.interpolate", "scipy.io", "scipy.io.arff", "scipy.io.matlab", "scipy.io.wavfile", "scipy.linalg", "scipy.linalg.blas", "scipy.linalg.cython_blas", "scipy.linalg.lapack", "scipy.linalg.cython_lapack", "scipy.linalg.interpolative", "scipy.misc", "scipy.ndimage", "scipy.odr", "scipy.optimize", "scipy.signal", "scipy.signal.windows", "scipy.sparse", "scipy.sparse.linalg", "scipy.sparse.csgraph", "scipy.spatial", "scipy.spatial.distance", "scipy.spatial.transform", "scipy.special", "scipy.stats", "scipy.stats.contingency", "scipy.stats.distributions", "scipy.stats.mstats", "scipy.stats.qmc"], "unvendored_tests": true}, "scipy-tests": {"name": "scipy-tests", "version": "1.8.0", "depends": ["scipy"], "imports": [], "file_name": "scipy-tests.tar", "install_dir": "site"}, "setuptools": {"name": "setuptools", "version": "62.0.0", "file_name": "setuptools-62.0.0-py3-none-any.whl", "install_dir": "site", "depends": ["distutils", "pyparsing"], "imports": ["setuptools", "pkg_resources"]}, "sharedlib-test": {"name": "sharedlib-test", "version": "1.0", "file_name": "sharedlib-test-1.0.zip", "install_dir": "site", "shared_library": true, "depends": [], "imports": ["sharedlib-test"]}, "sharedlib-test-py": {"name": "sharedlib-test-py", "version": "1.0", "file_name": "sharedlib_test_py-1.0-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["sharedlib-test"], "imports": ["sharedlib_test"]}, "six": {"name": "six", "version": "1.16.0", "file_name": "six-1.16.0-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["six"]}, "soupsieve": {"name": "soupsieve", "version": "2.3.2", "file_name": "soupsieve-2.3.2-py3-none-any.whl", "install_dir": "site", "depends": ["beautifulsoup4"], "imports": ["soupsieve"]}, "sqlalchemy": {"name": "sqlalchemy", "version": "1.4.35", "file_name": "SQLAlchemy-1.4.35-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["sqlalchemy"], "unvendored_tests": true}, "sqlalchemy-tests": {"name": "sqlalchemy-tests", "version": "1.4.35", "depends": ["sqlalchemy"], "imports": [], "file_name": "sqlalchemy-tests.tar", "install_dir": "site"}, "ssl": {"name": "ssl", "version": "1.0.0", "file_name": "ssl-1.0.0.zip", "install_dir": "site", "shared_library": true, "depends": ["openssl"], "imports": ["ssl"]}, "statsmodels": {"name": "statsmodels", "version": "0.13.2", "file_name": "statsmodels-0.13.2-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["distutils", "numpy", "scipy", "pandas", "patsy", "packaging"], "imports": ["statsmodels", "statsmodels.api"], "unvendored_tests": true}, "statsmodels-tests": {"name": "statsmodels-tests", "version": "0.13.2", "depends": ["statsmodels"], "imports": [], "file_name": "statsmodels-tests.tar", "install_dir": "site"}, "swiglpk": {"name": "swiglpk", "version": "5.0.3", "file_name": "swiglpk-5.0.2-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["swiglpk"]}, "sympy": {"name": "sympy", "version": "1.10.1", "file_name": "sympy-1.10.1-py3-none-any.whl", "install_dir": "site", "depends": ["distutils", "mpmath"], "imports": ["sympy"], "unvendored_tests": true}, "sympy-tests": {"name": "sympy-tests", "version": "1.10.1", "depends": ["sympy"], "imports": [], "file_name": "sympy-tests.tar", "install_dir": "site"}, "test": {"name": "test", "version": "1.0", "file_name": "test.tar", "install_dir": "lib", "depends": [], "imports": ["test"]}, "threadpoolctl": {"name": "threadpoolctl", "version": "3.1.0", "file_name": "threadpoolctl-3.1.0-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["threadpoolctl"]}, "tomli": {"name": "tomli", "version": "2.0.1", "file_name": "tomli-2.0.1-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["tomli"]}, "tomli-w": {"name": "tomli-w", "version": "1.0.0", "file_name": "tomli_w-1.0.0-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["tomli_w"]}, "toolz": {"name": "toolz", "version": "0.11.2", "file_name": "toolz-0.11.2-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["toolz"], "unvendored_tests": true}, "toolz-tests": {"name": "toolz-tests", "version": "0.11.2", "depends": ["toolz"], "imports": [], "file_name": "toolz-tests.tar", "install_dir": "site"}, "tqdm": {"name": "tqdm", "version": "4.64.0", "file_name": "tqdm-4.64.0-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["tqdm"]}, "traits": {"name": "traits", "version": "6.3.2", "file_name": "traits-6.3.2-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["traits"], "unvendored_tests": true}, "traits-tests": {"name": "traits-tests", "version": "6.3.2", "depends": ["traits"], "imports": [], "file_name": "traits-tests.tar", "install_dir": "site"}, "typing-extensions": {"name": "typing-extensions", "version": "4.1.1", "file_name": "typing_extensions-4.1.1-py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["typing_extensions"]}, "uncertainties": {"name": "uncertainties", "version": "3.1.6", "file_name": "uncertainties-3.1.6-py2.py3-none-any.whl", "install_dir": "site", "depends": ["future"], "imports": ["uncertainties"], "unvendored_tests": true}, "uncertainties-tests": {"name": "uncertainties-tests", "version": "3.1.6", "depends": ["uncertainties"], "imports": [], "file_name": "uncertainties-tests.tar", "install_dir": "site"}, "unyt": {"name": "unyt", "version": "2.8.0", "file_name": "unyt-2.8.0-py2.py3-none-any.whl", "install_dir": "site", "depends": ["numpy", "sympy"], "imports": ["unyt"], "unvendored_tests": true}, "unyt-tests": {"name": "unyt-tests", "version": "2.8.0", "depends": ["unyt"], "imports": [], "file_name": "unyt-tests.tar", "install_dir": "site"}, "webencodings": {"name": "webencodings", "version": "0.5.1", "file_name": "webencodings-0.5.1-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["webencodings"]}, "wrapt": {"name": "wrapt", "version": "1.14.0", "file_name": "wrapt-1.14.0-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": [], "imports": ["wrapt"]}, "xlrd": {"name": "xlrd", "version": "2.0.1", "file_name": "xlrd-2.0.1-py2.py3-none-any.whl", "install_dir": "site", "depends": [], "imports": ["xlrd"]}, "yt": {"name": "yt", "version": "4.0.2", "file_name": "yt-4.0.2-cp310-cp310-emscripten_wasm32.whl", "install_dir": "site", "depends": ["numpy", "matplotlib", "sympy", "setuptools", "packaging", "unyt", "cmyt", "colorspacious", "tqdm", "tomli", "tomli-w"], "imports": ["yt"]}, "zarr": {"name": "zarr", "version": "2.11.3", "file_name": "zarr-2.11.3-py3-none-any.whl", "install_dir": "site", "depends": ["numpy", "asciitree", "numcodecs"], "imports": ["zarr"], "unvendored_tests": true}, "zarr-tests": {"name": "zarr-tests", "version": "2.11.3", "depends": ["zarr"], "imports": [], "file_name": "zarr-tests.tar", "install_dir": "site"}}}
diff --git a/static/pyodide/packaging-21.3-py3-none-any.whl b/static/pyodide/packaging-21.3-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..20f71df85509ff1f45885093b9a18c68d44803d7
Binary files /dev/null and b/static/pyodide/packaging-21.3-py3-none-any.whl differ
diff --git a/static/pyodide/pandas-1.4.2-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/pandas-1.4.2-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..e7f924d1e6d0fd718f264fbd2a7e074f41bf564b
--- /dev/null
+++ b/static/pyodide/pandas-1.4.2-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f72d05f570c615b7ef99c98be97a4631ac73267318e8e595edddd46142504add
+size 5210117
diff --git a/static/pyodide/pandas-tests.tar b/static/pyodide/pandas-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..08cd100c6cf20d05d57fefc69587de01cb1da959
--- /dev/null
+++ b/static/pyodide/pandas-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:097cf3ca66750c137b076f9c406cb20bc0d13f5d9756a00fe1dd05683b3baa77
+size 12922880
diff --git a/static/pyodide/parso-0.8.3-py2.py3-none-any.whl b/static/pyodide/parso-0.8.3-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..95cdcacb249a1113d262e9f5e29b4bc35d185e46
--- /dev/null
+++ b/static/pyodide/parso-0.8.3-py2.py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ce547e13dc33e13d966d483eb85afd242266b8563d12f0fe0a773b04e35fe4b1
+size 100781
diff --git a/static/pyodide/patsy-0.5.2-py2.py3-none-any.whl b/static/pyodide/patsy-0.5.2-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..c0c78d0d53d5fa02ea73b0c4e0626c685507e11d
--- /dev/null
+++ b/static/pyodide/patsy-0.5.2-py2.py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b97ab5c2e4bf32d8c0c21637121a56134eae05f42ec86f3492ee9b81741b4736
+size 121345
diff --git a/static/pyodide/patsy-tests.tar b/static/pyodide/patsy-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..d99d93eda94725228cd04dd7b1ff0f67c18f602a
--- /dev/null
+++ b/static/pyodide/patsy-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e0cbd323a57af216509671dd4f68828f4004241bb1087f161b337029db3808c3
+size 368640
diff --git a/static/pyodide/pluggy-1.0.0-py2.py3-none-any.whl b/static/pyodide/pluggy-1.0.0-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..c6eeba0e828a3ca9634e14e080bd1def87466f3f
Binary files /dev/null and b/static/pyodide/pluggy-1.0.0-py2.py3-none-any.whl differ
diff --git a/static/pyodide/py-1.11.0-py2.py3-none-any.whl b/static/pyodide/py-1.11.0-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..1d3c28074ff9d73e1340763227168ecdfd477679
Binary files /dev/null and b/static/pyodide/py-1.11.0-py2.py3-none-any.whl differ
diff --git a/static/pyodide/pycparser-2.21-py2.py3-none-any.whl b/static/pyodide/pycparser-2.21-py2.py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..7730e30689249de09bd41227ea0b9dbc62564dd5
--- /dev/null
+++ b/static/pyodide/pycparser-2.21-py2.py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7b89602a55758565fede773cf6f6300cbd6d3ae11ccdaea7fe0f5d2a8ddf9dbf
+size 118697
diff --git a/static/pyodide/pydantic-1.9.0-py3-none-any.whl b/static/pyodide/pydantic-1.9.0-py3-none-any.whl
new file mode 100644
index 0000000000000000000000000000000000000000..ef1a0d85c63ac4dea24f90c9188ae3082c072870
--- /dev/null
+++ b/static/pyodide/pydantic-1.9.0-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:657f3b25b3307e8384a51732a709b34136065f11b102e78e7e677a9a594208f5
+size 140268
diff --git a/static/pyodide/pyerfa-2.0.0.1-cp310-cp310-emscripten_wasm32.whl b/static/pyodide/pyerfa-2.0.0.1-cp310-cp310-emscripten_wasm32.whl
new file mode 100644
index 0000000000000000000000000000000000000000..52c556e2f984be63c88d41bc250e0ed8ab19354a
--- /dev/null
+++ b/static/pyodide/pyerfa-2.0.0.1-cp310-cp310-emscripten_wasm32.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:23b0b13246b1aff81637714f55fd357dbb8d66ec7800981cccbb6b675e289cbd
+size 243450
diff --git a/static/pyodide/pyerfa-tests.tar b/static/pyodide/pyerfa-tests.tar
new file mode 100644
index 0000000000000000000000000000000000000000..ad810d8a262a1b905406fe4c76f44c4c74aa0886
--- /dev/null
+++ b/static/pyodide/pyerfa-tests.tar
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fa193743029a70fe81966b2f723d45dfa756b4269e20998e05c4578456bfec26
+size 194560
diff --git a/static/pyodide/pyodide.asm.data b/static/pyodide/pyodide.asm.data
new file mode 100644
index 0000000000000000000000000000000000000000..626afdd26a18b543d5f90e8b09d6c2ddce0c0ba9
--- /dev/null
+++ b/static/pyodide/pyodide.asm.data
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:06cefad52c91c65dffc25406eb4db04fc02715377745171c6cba0a0887a20098
+size 5394245
diff --git a/static/pyodide/pyodide.asm.js b/static/pyodide/pyodide.asm.js
new file mode 100644
index 0000000000000000000000000000000000000000..dc9551b50999e3c9abb0c822bf4935278ddf1020
--- /dev/null
+++ b/static/pyodide/pyodide.asm.js
@@ -0,0 +1,21 @@
+ "use strict";
+ let setImmediate = globalThis.setImmediate;
+ let clearImmediate = globalThis.clearImmediate;
+ let baseName, fpcGOT, dyncallGOT, fpVal, dcVal;
+
+
+var _createPyodideModule = (function() {
+ var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;
+ if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename;
+ return (
+function(_createPyodideModule) {
+ _createPyodideModule = _createPyodideModule || {};
+
+var Module=typeof _createPyodideModule!=="undefined"?_createPyodideModule:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});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 process==="undefined"&&typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}var PACKAGE_NAME="build/pyodide.asm.data";var REMOTE_PACKAGE_BASE="pyodide.asm.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){if(typeof process==="object"){require("fs").readFile(packageName,function(err,contents){if(err){errback(err)}else{callback(contents.buffer)}});return}var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","lib",true,true);Module["FS_createPath"]("/lib","python3.10",true,true);Module["FS_createPath"]("/lib/python3.10","asyncio",true,true);Module["FS_createPath"]("/lib/python3.10","collections",true,true);Module["FS_createPath"]("/lib/python3.10","concurrent",true,true);Module["FS_createPath"]("/lib/python3.10/concurrent","futures",true,true);Module["FS_createPath"]("/lib/python3.10","ctypes",true,true);Module["FS_createPath"]("/lib/python3.10/ctypes","macholib",true,true);Module["FS_createPath"]("/lib/python3.10","tzdata-2022.1.dist-info",true,true);Module["FS_createPath"]("/lib/python3.10","email",true,true);Module["FS_createPath"]("/lib/python3.10/email","mime",true,true);Module["FS_createPath"]("/lib/python3.10","encodings",true,true);Module["FS_createPath"]("/lib/python3.10","html",true,true);Module["FS_createPath"]("/lib/python3.10","http",true,true);Module["FS_createPath"]("/lib/python3.10","importlib",true,true);Module["FS_createPath"]("/lib/python3.10/importlib","metadata",true,true);Module["FS_createPath"]("/lib/python3.10","json",true,true);Module["FS_createPath"]("/lib/python3.10","logging",true,true);Module["FS_createPath"]("/lib/python3.10","multiprocessing",true,true);Module["FS_createPath"]("/lib/python3.10/multiprocessing","dummy",true,true);Module["FS_createPath"]("/lib/python3.10","pydoc_data",true,true);Module["FS_createPath"]("/lib/python3.10","site-packages",true,true);Module["FS_createPath"]("/lib/python3.10","sqlite3",true,true);Module["FS_createPath"]("/lib/python3.10","tzdata",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata","zoneinfo",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Africa",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","America",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo/America","Argentina",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo/America","Indiana",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo/America","Kentucky",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo/America","North_Dakota",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Antarctica",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Arctic",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Asia",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Atlantic",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Australia",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Brazil",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Canada",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Chile",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Etc",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Europe",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Indian",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Mexico",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","Pacific",true,true);Module["FS_createPath"]("/lib/python3.10/tzdata/zoneinfo","US",true,true);Module["FS_createPath"]("/lib/python3.10","unittest",true,true);Module["FS_createPath"]("/lib/python3.10","urllib",true,true);Module["FS_createPath"]("/lib/python3.10","wsgiref",true,true);Module["FS_createPath"]("/lib/python3.10","xml",true,true);Module["FS_createPath"]("/lib/python3.10/xml","dom",true,true);Module["FS_createPath"]("/lib/python3.10/xml","etree",true,true);Module["FS_createPath"]("/lib/python3.10/xml","parsers",true,true);Module["FS_createPath"]("/lib/python3.10/xml","sax",true,true);Module["FS_createPath"]("/lib/python3.10","xmlrpc",true,true);Module["FS_createPath"]("/lib/python3.10","zoneinfo",true,true);function processPackageData(arrayBuffer){assert(arrayBuffer,"Loading data file failed.");assert(arrayBuffer instanceof ArrayBuffer,"bad input to processPackageData");var byteArray=new Uint8Array(arrayBuffer);var curr;var compressedData={"data":null,"cachedOffset":5390149,"cachedIndexes":[-1,-1],"cachedChunks":[null,null],"offsets":[0,1427,2589,3776,5322,6637,8053,9276,10176,11137,12037,13094,14287,15472,16494,17323,18687,19737,20743,21819,23063,24239,25564,26462,27523,28434,29550,30720,31889,33260,34562,35714,36757,37642,38556,39405,40881,42064,43063,44511,45497,46782,48199,49345,50556,51705,52993,54186,55445,56403,57319,58451,59379,60319,61186,62220,63435,64443,65350,66410,67290,68152,69248,70240,70978,72073,73044,74230,75235,76159,77200,78140,79045,79823,81151,82438,83559,84511,85683,86886,87862,88983,90211,91364,92318,93465,94498,95846,97112,97969,99164,99954,101058,102163,103080,104391,105594,106853,107597,108449,109217,110251,111158,112222,113491,114697,115935,116752,117792,118857,120082,121036,121961,122714,123447,124077,124771,125704,126285,126853,127634,128257,128767,129516,130347,131218,132051,132685,133827,134670,135352,136305,137212,137913,138757,139639,140404,141476,142880,144347,145447,146812,148275,149759,151035,152365,153818,155039,156248,157580,158904,160457,161772,163231,164657,165771,166740,168099,169547,170802,171678,172949,174299,175657,176688,177894,178942,179971,180976,182125,183331,184479,185632,186701,187802,188819,190113,191113,192241,193335,194561,195558,196718,197809,199167,200293,201409,202328,203387,204599,205864,206896,208016,209064,210096,210963,212164,213454,214797,216111,217205,218323,219455,220622,221904,223178,224320,225196,226346,227347,228599,230007,231429,232655,233807,234810,235532,236763,237939,238968,240353,241680,243024,244070,245249,246365,247345,248336,249377,250475,251332,252127,253112,254067,254818,255713,257145,258394,259698,260873,261858,262885,263781,264697,265605,266793,267875,268833,269948,270897,272095,273214,274147,274800,275551,276257,277314,278561,279770,280747,281817,282862,283938,284994,285982,286950,288083,289170,290196,291255,292336,293438,294291,295302,296315,297405,298488,299556,300404,301418,302454,303415,304427,305458,306686,308063,309083,310073,311333,312450,313776,315160,316388,317578,318615,319791,321046,322218,323363,324099,324837,325621,326554,327696,328859,329930,330716,331743,332623,333675,334571,335423,336286,337591,339188,340471,341374,342388,343446,345026,346586,347470,348703,349798,350777,351908,352990,354121,355451,356852,358009,359255,360509,361780,363165,364490,365769,367115,368258,369681,370881,371831,372875,374112,375288,376404,377670,378639,379566,380757,381718,383076,384217,385466,386597,388240,389307,390442,391536,392636,393826,394797,396024,397312,398622,399711,400760,401906,403141,404316,405520,406687,408039,409203,410389,411278,412215,413156,414155,415232,416153,417307,418578,419560,420718,422230,423604,424850,426253,427724,429046,430069,431130,432244,433256,434404,435525,436486,437487,438762,439928,441431,442524,443879,445181,446477,447678,449156,450211,451294,452741,454156,455070,456239,457435,458447,459517,460942,462208,463398,464577,465951,467319,468502,469760,470919,472123,473397,474650,476010,477191,478368,479361,480585,481739,482748,484116,485334,486032,487222,488810,490141,491382,492824,494024,495379,496720,497642,498940,500062,500960,502053,502940,504060,504942,506226,507562,508770,509943,510840,511766,512881,514058,515151,516095,517210,518226,519229,520426,521534,522584,523644,524748,525759,527062,528066,528992,530014,531274,532461,533547,534754,535698,536840,537943,539093,540196,541206,542471,543658,544989,546213,547358,548499,549769,551207,552359,553500,554713,556034,557358,558619,560022,561329,562662,563734,564915,566028,567061,568330,569364,570636,571730,572448,573517,574893,576013,577280,578587,579976,581138,582434,583657,584765,586101,587554,588755,589914,590994,592367,593576,594777,595712,597082,598407,599705,600961,602247,603544,604958,606195,607481,608840,609922,610972,612145,613236,614738,615817,616754,617559,618292,619114,620329,621554,622788,623678,624883,626021,627193,628240,629094,630186,631448,632584,633801,634992,636022,637147,638126,639350,640493,641275,642351,643422,644643,645574,646664,648087,649543,651012,652618,654063,655473,656895,658245,659461,660737,662145,663447,664719,666047,667264,668491,669694,670835,672174,673531,674719,676011,677312,678447,679732,681017,682399,683664,684853,686135,687550,688817,690082,691347,692060,693274,694341,695471,696764,698056,699237,700377,701630,702902,704040,705481,706683,708037,709047,710123,711344,712504,713651,714861,715946,717452,718833,719764,721042,722484,723908,725212,726438,727644,728759,730029,731460,732712,734007,735256,736406,737691,738830,739961,741010,742098,743208,744362,745647,746530,747750,748875,749923,751184,752329,753509,754852,756098,757197,758272,759326,760679,762063,763314,764729,765988,767020,768212,769249,770502,771795,773001,774006,775123,776090,777254,778449,779782,780831,782072,783336,784288,785401,786754,787996,789154,790372,791545,792720,793884,795020,796308,797418,798254,799148,800407,801786,802972,803891,804848,806260,807745,809198,810062,811352,812461,813399,814258,815508,816838,817972,819458,820779,821736,822711,823912,825093,826132,827281,828579,829566,830534,831354,832648,833832,834967,836537,837898,839133,840254,841420,842634,843695,844829,845879,847123,848420,849587,850595,851702,852900,854179,855492,856709,857852,858299,859270,860309,861462,862702,863913,865447,866700,867675,868809,870091,871403,872706,873913,875021,876102,877284,878583,879963,881485,882847,883983,885335,886599,887836,889356,890921,892072,893254,894372,895003,896250,897361,898497,899294,900575,901549,902208,903318,904374,905560,906565,907931,909291,910545,911742,912807,914268,915482,916883,918146,919327,920300,921360,922626,923779,925079,926247,927695,928946,930103,931359,932602,933902,935534,937207,938503,940024,941473,942834,943866,945106,946479,947567,948911,949916,951037,952276,953813,954618,956014,957391,958478,959695,960939,962226,963240,964209,965233,966204,967326,968411,969471,970621,971735,972793,973780,974935,976050,977098,978206,979591,980924,982268,983571,984475,985762,986978,988283,989506,990681,992047,993531,994822,995890,997035,997937,999087,1000089,1001210,1002499,1003829,1005064,1006199,1007549,1008624,1009791,1011032,1012176,1013398,1014564,1015572,1016762,1018138,1019273,1020478,1021604,1022677,1023827,1025013,1026232,1027462,1028715,1029794,1030908,1031986,1033193,1034310,1035491,1036758,1037877,1039005,1040150,1041256,1042096,1043129,1044233,1045256,1046448,1047508,1048585,1049625,1050554,1051662,1052773,1053628,1054641,1055582,1056560,1057677,1058762,1060007,1061493,1062824,1063982,1064949,1066179,1067300,1068382,1069719,1070673,1071685,1072893,1074060,1075125,1076004,1077121,1078173,1079287,1080329,1081378,1082041,1083268,1084403,1085619,1086478,1087394,1088573,1089552,1090819,1091897,1092916,1093989,1095127,1096307,1097246,1098150,1099225,1100240,1101361,1102457,1103689,1104836,1106047,1107472,1108672,1109882,1111002,1112251,1113385,1114491,1115475,1116836,1118060,1119256,1120099,1121302,1122092,1122815,1123570,1124084,1124657,1125219,1125722,1126242,1126812,1127367,1127916,1128503,1129085,1129625,1130175,1130774,1131328,1131921,1132512,1133127,1134411,1135563,1136845,1137970,1138967,1140384,1141678,1142715,1143762,1144995,1146232,1147523,1148503,1149275,1150359,1151297,1152512,1153627,1154667,1155712,1156904,1158140,1159340,1160485,1161451,1162594,1163634,1164589,1165681,1166502,1167160,1168155,1169217,1170211,1171183,1172238,1173173,1173985,1174744,1175672,1176694,1177587,1178496,1179362,1180095,1181100,1181902,1182844,1184009,1185086,1186509,1187751,1189020,1190192,1191391,1192659,1193724,1194701,1195794,1197001,1198290,1199237,1199908,1200717,1201903,1203391,1204524,1205495,1206277,1207370,1208305,1209308,1210360,1211446,1212517,1213603,1214779,1216058,1217004,1218092,1219550,1220942,1222299,1223653,1225091,1226481,1227813,1229028,1230156,1231127,1232284,1233554,1234727,1235661,1236588,1237671,1238823,1239971,1241138,1242421,1243854,1245037,1246280,1247612,1249009,1250253,1251071,1252180,1253445,1254569,1255762,1256942,1258253,1259640,1260919,1262498,1263147,1264193,1265131,1265929,1267287,1268376,1269495,1270728,1271694,1272955,1273888,1274911,1276206,1277780,1278884,1280125,1281099,1282271,1283266,1284519,1285490,1286796,1287882,1288874,1289759,1290713,1291687,1292854,1294014,1294953,1295877,1297126,1298541,1299678,1300811,1301870,1303090,1304260,1305440,1306561,1307531,1308902,1310310,1311361,1312819,1314130,1315562,1317055,1318144,1319525,1320688,1321567,1322867,1323889,1324936,1325967,1327090,1327847,1328926,1330200,1331402,1332768,1333880,1335278,1336456,1337785,1338878,1339973,1340841,1342117,1343392,1344487,1345374,1346442,1347579,1348698,1349823,1351113,1352241,1353383,1354470,1355340,1356333,1357124,1357793,1359222,1360804,1362226,1363338,1364571,1365749,1366974,1368162,1369385,1370719,1372014,1373242,1374216,1375419,1376689,1377667,1378739,1379745,1380898,1382204,1383397,1384401,1385581,1386614,1387688,1388998,1390206,1391422,1392848,1394253,1395524,1396817,1398238,1399481,1400775,1401853,1402707,1403935,1405306,1406544,1407736,1408776,1409923,1411075,1412344,1413278,1414216,1415236,1416335,1417275,1418379,1419480,1420822,1421905,1422882,1423715,1424680,1425791,1426730,1427735,1428722,1429772,1431002,1432587,1434125,1435653,1437060,1438096,1438896,1439963,1440987,1441836,1442692,1443889,1444801,1445916,1446971,1448245,1449591,1450493,1451743,1453060,1454104,1454980,1455807,1456534,1457794,1458706,1459712,1460737,1461833,1462664,1463864,1465171,1466543,1467897,1469132,1470469,1471566,1472817,1474027,1475530,1476545,1477809,1478854,1479906,1480863,1482147,1483528,1484916,1485794,1486857,1488028,1489453,1490624,1491867,1492962,1494016,1495047,1496325,1497626,1499129,1500481,1501941,1503349,1504940,1506366,1507965,1509286,1510495,1511716,1512842,1514140,1515314,1516498,1517874,1519167,1520500,1521738,1522770,1524028,1524815,1525715,1526965,1528229,1529622,1531109,1532440,1533441,1534499,1535530,1536705,1537874,1538872,1540013,1541112,1541964,1542816,1543939,1545527,1546850,1547951,1549046,1550326,1551639,1552711,1554196,1555634,1556838,1558083,1559295,1560619,1561779,1563096,1564618,1565708,1566927,1567928,1568720,1569753,1570688,1571576,1572573,1573303,1574197,1575151,1576678,1577744,1579108,1580282,1581283,1582177,1583421,1584653,1586123,1587362,1588649,1590100,1591528,1592878,1594055,1594968,1595972,1597093,1598168,1598971,1599978,1601207,1602319,1603178,1604059,1605255,1606490,1607729,1608982,1610274,1611662,1612881,1614182,1615400,1616619,1617817,1618725,1620029,1621565,1622641,1623879,1625244,1626599,1627831,1629030,1630301,1631510,1632742,1633920,1635094,1636241,1637385,1638509,1639484,1640563,1641380,1642281,1643453,1644656,1645969,1647175,1648245,1649135,1650250,1651035,1651976,1653091,1654244,1655545,1656785,1657909,1659095,1660306,1661432,1662495,1663620,1664825,1666037,1667057,1668376,1669509,1670823,1672052,1673150,1674342,1675522,1676424,1677425,1678610,1679841,1681010,1682410,1683564,1684679,1685696,1686923,1688147,1689462,1690694,1691914,1693220,1694651,1695902,1697135,1698221,1699357,1700435,1701698,1702957,1704164,1705466,1706781,1708132,1709301,1710615,1711809,1712990,1714264,1715285,1716718,1717981,1719022,1720199,1721388,1722548,1723493,1724540,1726099,1727266,1728463,1729661,1730833,1732087,1733316,1734624,1735977,1737384,1738806,1740001,1741333,1742561,1743818,1744941,1746155,1747191,1748297,1749243,1750240,1751044,1752172,1753570,1755050,1756105,1757296,1758669,1759823,1760831,1761621,1762417,1763078,1764352,1765710,1767052,1768478,1769726,1770836,1772030,1773321,1774483,1775553,1776938,1778017,1779005,1780157,1781365,1782710,1783874,1784941,1785915,1787216,1788479,1789819,1791001,1792066,1793375,1794725,1796013,1797067,1798391,1799879,1801199,1802351,1803661,1804858,1806131,1807440,1808737,1809754,1811019,1812523,1813993,1815189,1815758,1816327,1817423,1818383,1819490,1820342,1821394,1822491,1823763,1825004,1826204,1827460,1828523,1829607,1831213,1832435,1833683,1834965,1836142,1837360,1838507,1839708,1840950,1842136,1843373,1844560,1845634,1846865,1848006,1849307,1850561,1851817,1853037,1854330,1855371,1856653,1858129,1859389,1860521,1861740,1863133,1864346,1865344,1866326,1867485,1868752,1869926,1870948,1872049,1873201,1874326,1875500,1876915,1877872,1879276,1880557,1881805,1883307,1884421,1885452,1886313,1887341,1888298,1889105,1890091,1891284,1892288,1893091,1893993,1894927,1895637,1896428,1897405,1898472,1899390,1900659,1901477,1902920,1904330,1905870,1907066,1908364,1909457,1910518,1911569,1912742,1913817,1914877,1916031,1917339,1918749,1919866,1920690,1921441,1922284,1923169,1924269,1925707,1926880,1927978,1929259,1930158,1930912,1932222,1933478,1934385,1935620,1936854,1938038,1939125,1940644,1941842,1943173,1944312,1945500,1946484,1947530,1948701,1949694,1950916,1952292,1953517,1954552,1955839,1956899,1958037,1958814,1959825,1960620,1961709,1962789,1964191,1965560,1966538,1967740,1968943,1969972,1971351,1972703,1974017,1975352,1976659,1977718,1979117,1980668,1981999,1983481,1984676,1985771,1986970,1988428,1989614,1990964,1992196,1993389,1994218,1995390,1996753,1997609,1998718,1999749,2001180,2002048,2003282,2004284,2005302,2006332,2007353,2008683,2009656,2010747,2012087,2013350,2014540,2015931,2017196,2018454,2019723,2020915,2022327,2023633,2024671,2025955,2026806,2027728,2028766,2030022,2031229,2032350,2033458,2034374,2035024,2036098,2037035,2038087,2039139,2040119,2041141,2042047,2043036,2044089,2045074,2046077,2047167,2048237,2049274,2050140,2051129,2052234,2053558,2054809,2055929,2056738,2057648,2058620,2059613,2060395,2061563,2062522,2063487,2064347,2065163,2066452,2067406,2068134,2069389,2070622,2071777,2072884,2074186,2075553,2076732,2077866,2079172,2080555,2081956,2083461,2084648,2085818,2087051,2088268,2089588,2091123,2092145,2093380,2094784,2095856,2096992,2098118,2099162,2100197,2101284,2102321,2103541,2104664,2105578,2106721,2107770,2109021,2110228,2111443,2112596,2113888,2115066,2116099,2117173,2118318,2119469,2120592,2121537,2122518,2123376,2124233,2125399,2126633,2127681,2128783,2130045,2131225,2132379,2133403,2134432,2135522,2136507,2137492,2138722,2139955,2140881,2142498,2143760,2145245,2146461,2147676,2148615,2149462,2150414,2151345,2152285,2153561,2154980,2156335,2157656,2158974,2160186,2161397,2162772,2164046,2165384,2166704,2167843,2168894,2169845,2171003,2172498,2173835,2175071,2176135,2177468,2178835,2179919,2180900,2182217,2183506,2185084,2186227,2187400,2188637,2189782,2191026,2192121,2193422,2194681,2195963,2197332,2198584,2199647,2201032,2202371,2203598,2204914,2206046,2207414,2208677,2209818,2210817,2211915,2213064,2214261,2215408,2216793,2218122,2219565,2221086,2222220,2223570,2224804,2226043,2227283,2228595,2230101,2231412,2232640,2233637,2234823,2236215,2237250,2238639,2239619,2240614,2241578,2242764,2244002,2245511,2246624,2247751,2248834,2249962,2251214,2252508,2253491,2254573,2255543,2256377,2257440,2258655,2259800,2261018,2262401,2263639,2264838,2266042,2267257,2268435,2269464,2270575,2271670,2272737,2273903,2275145,2276107,2277005,2278035,2279121,2280145,2281121,2282118,2282843,2284037,2285483,2286754,2288013,2288973,2290213,2291652,2293001,2294307,2295547,2296761,2297848,2299128,2300374,2301798,2303240,2304429,2305416,2306798,2307916,2309233,2310532,2311759,2312902,2314101,2315150,2316189,2317439,2318444,2319781,2321065,2322317,2323525,2324703,2325908,2327330,2328759,2329907,2330996,2332136,2333373,2334540,2335720,2336820,2337889,2339198,2340326,2341708,2343129,2343972,2345298,2346634,2347811,2349086,2350531,2351761,2352988,2354117,2355086,2355995,2357193,2358675,2359957,2361026,2362211,2363614,2364912,2366141,2367279,2368430,2369683,2370827,2372061,2373272,2374471,2375656,2376976,2378173,2379410,2380490,2381464,2382590,2383563,2384394,2385367,2386567,2387751,2389010,2389764,2390691,2391878,2393141,2394062,2395173,2396367,2397482,2398720,2399724,2400532,2401934,2403208,2404600,2405799,2407253,2408367,2409652,2410933,2412209,2413423,2414493,2415462,2416796,2418118,2419138,2420095,2421253,2422473,2423503,2424499,2425463,2426537,2427512,2428794,2430005,2430997,2432127,2433307,2434533,2435777,2436820,2438090,2439282,2440369,2441474,2442568,2443453,2444340,2445529,2446255,2447251,2447900,2449032,2450288,2451658,2452755,2453759,2455092,2456312,2457436,2458612,2459688,2460842,2462114,2463345,2464170,2465035,2466635,2467661,2468987,2470287,2471632,2472998,2474434,2475996,2477601,2479178,2480716,2482037,2483016,2484054,2485059,2485939,2486837,2487718,2488595,2489437,2490617,2491497,2492680,2493414,2494736,2495857,2496924,2498324,2499696,2500935,2502187,2503229,2504188,2505360,2506546,2507462,2508573,2509730,2510902,2512022,2513064,2514150,2515190,2516230,2517448,2518493,2519639,2520882,2521841,2522978,2524109,2525148,2526128,2527206,2528383,2529513,2530400,2531338,2532378,2533513,2534554,2535674,2536775,2537920,2539195,2540211,2541318,2542185,2543321,2544435,2545830,2547112,2548389,2549648,2550687,2551801,2553005,2553950,2555025,2556010,2557372,2558482,2559735,2560582,2561436,2562621,2563692,2564646,2565840,2567060,2568435,2569772,2570943,2571938,2572959,2574092,2575125,2576474,2577668,2578994,2580299,2581459,2582809,2584054,2585319,2586322,2587431,2588604,2589579,2590695,2591880,2592937,2594206,2595210,2596141,2597195,2598126,2599125,2600400,2601369,2602634,2604050,2605433,2606801,2607903,2608990,2610192,2611536,2612772,2613803,2614948,2616231,2617206,2617994,2619e3,2620065,2621280,2622529,2623690,2624851,2625871,2627007,2628092,2628733,2629918,2630884,2632107,2633106,2634532,2635581,2636772,2637852,2639099,2640217,2641446,2642672,2643744,2644775,2645787,2646957,2647982,2649355,2650684,2651987,2653256,2654313,2655354,2656533,2657460,2658615,2659786,2660843,2662197,2663517,2664731,2666002,2667159,2667925,2668997,2669942,2671304,2672626,2673799,2675143,2676256,2677167,2678554,2679781,2680949,2682314,2683568,2684938,2686103,2687313,2688534,2689724,2690892,2692135,2693372,2694387,2695239,2696462,2697180,2697741,2698973,2700160,2701172,2702110,2703122,2704280,2705344,2706382,2707532,2708556,2709724,2710869,2711920,2712964,2714229,2715382,2716610,2717784,2719019,2720232,2721341,2722604,2723808,2725027,2726194,2727419,2728585,2729639,2730753,2732005,2733163,2734168,2735348,2735953,2736854,2737993,2739217,2740520,2741817,2742981,2744173,2745442,2746548,2747606,2748667,2749980,2751050,2752146,2753218,2754483,2755652,2756911,2758207,2759502,2760906,2762013,2762829,2764092,2764722,2765559,2766832,2768006,2768994,2769949,2770615,2771404,2772164,2772956,2773769,2774743,2775706,2776618,2777981,2779132,2780358,2781171,2782230,2783312,2784324,2785649,2786938,2788096,2789470,2790528,2791733,2793008,2794172,2795278,2796454,2797572,2798718,2800062,2801165,2802345,2803561,2804821,2806018,2807274,2808347,2809400,2810603,2811649,2812792,2813754,2815071,2816245,2817501,2818629,2819973,2821483,2822841,2824243,2825628,2826972,2828485,2829702,2830898,2832310,2833322,2834366,2835487,2836600,2837599,2838550,2839305,2840604,2841621,2842662,2843714,2844653,2846066,2847418,2848709,2849910,2851395,2852943,2854391,2855276,2856036,2857238,2858575,2859894,2861216,2862436,2863737,2865066,2866194,2867393,2868759,2870188,2871561,2872950,2874261,2875310,2876621,2877868,2879123,2880384,2881649,2882845,2884277,2885618,2886911,2888242,2889429,2890965,2892366,2893650,2894970,2896535,2897965,2899429,2900451,2901216,2901808,2902495,2903461,2904525,2905562,2906637,2907842,2908882,2910271,2911597,2912932,2914177,2915351,2916426,2917374,2918326,2919657,2920629,2921478,2922636,2923641,2924680,2925702,2926756,2927919,2928872,2930070,2931352,2932232,2933258,2934499,2935173,2936450,2937500,2938731,2939976,2941047,2942012,2943208,2944295,2945306,2946217,2947655,2948815,2950044,2951223,2952580,2954016,2955370,2956613,2958070,2959015,2959907,2960953,2962071,2963012,2964377,2965541,2966921,2968197,2969394,2970606,2971634,2972964,2974502,2975764,2977220,2978577,2980136,2981549,2982658,2983875,2985272,2986476,2987628,2988713,2990052,2991107,2992138,2993239,2994494,2995587,2996727,2997991,2999282,3000500,3002076,3003377,3004664,3005875,3007086,3008050,3009220,3010151,3011125,3012302,3013472,3014963,3016223,3017508,3018822,3020048,3021274,3022541,3023956,3025335,3026424,3027886,3029136,3030270,3031547,3032727,3033994,3035464,3036597,3037698,3038990,3040348,3041479,3042763,3043860,3045137,3046516,3047856,3048962,3050015,3051023,3051876,3052991,3054352,3055893,3057176,3058508,3059685,3060882,3062020,3063071,3064269,3065111,3066269,3067521,3068573,3069717,3071015,3071921,3073145,3074290,3075444,3076738,3077848,3079079,3080188,3081137,3082544,3083777,3085014,3086175,3087478,3088783,3090084,3091468,3092877,3094185,3095490,3096725,3098169,3099632,3101082,3102519,3103819,3105106,3106516,3107796,3109206,3110484,3111751,3113e3,3114424,3115873,3116951,3118259,3119027,3119825,3120612,3121333,3122e3,3122951,3123767,3124926,3125787,3126817,3127978,3128813,3129830,3130666,3131520,3132307,3133193,3133948,3135064,3136072,3136748,3137467,3138192,3138799,3139660,3140691,3141569,3142424,3143265,3144192,3144988,3145935,3146572,3147194,3147968,3148996,3149821,3150509,3151122,3151798,3152508,3153382,3154360,3155022,3155744,3156354,3157074,3157802,3158825,3159673,3160516,3161341,3162266,3162969,3164022,3165037,3165804,3166600,3167568,3168334,3169074,3170180,3171178,3171850,3172696,3173594,3174176,3175019,3176111,3176885,3177695,3178676,3179462,3180092,3181168,3182195,3182868,3183666,3184620,3185296,3186193,3187280,3188043,3188863,3189837,3190620,3191286,3192395,3193420,3194086,3194926,3195904,3196680,3197747,3198790,3199507,3200366,3201422,3202166,3203260,3204302,3205054,3205862,3206838,3207630,3208351,3209464,3210463,3211144,3211993,3212926,3213676,3214624,3215756,3216817,3217650,3218450,3219355,3220078,3221124,3222217,3223249,3224134,3224964,3225610,3226655,3227311,3228128,3228879,3229958,3230894,3231560,3232238,3233101,3233722,3234777,3235740,3236489,3237265,3237982,3238827,3239496,3240581,3241439,3242227,3243082,3243957,3244693,3245666,3246392,3247241,3247931,3248776,3249482,3250264,3251405,3252027,3252722,3253468,3254511,3255438,3256103,3256810,3257505,3258160,3258997,3259962,3260710,3261431,3262060,3262809,3263483,3264564,3265290,3266094,3266848,3267961,3268838,3269503,3270261,3271132,3271839,3272814,3273793,3274493,3275286,3275977,3276596,3277318,3278341,3279087,3279837,3280666,3281699,3282478,3283182,3283813,3284673,3285451,3286498,3287435,3288111,3289038,3289673,3290361,3291186,3292092,3292852,3293573,3294430,3295409,3296135,3296847,3297586,3298381,3299188,3300232,3301146,3301822,3302605,3303247,3303870,3304694,3305561,3306274,3306989,3307762,3308751,3309486,3310171,3310789,3311510,3312207,3313219,3314010,3314755,3315374,3315978,3316653,3317664,3318683,3319441,3320181,3320980,3321637,3322743,3323443,3324253,3325051,3326131,3327044,3327712,3328420,3329281,3330079,3331048,3332029,3332739,3333562,3334356,3334989,3335732,3336627,3337436,3338161,3339029,3340052,3340768,3341502,3342141,3342996,3343743,3344821,3345710,3346385,3347338,3347966,3348655,3349522,3350324,3351180,3351859,3352880,3353861,3354549,3355224,3355974,3356602,3357484,3358555,3359367,3360089,3360878,3361663,3362374,3363316,3364081,3364896,3365589,3366624,3367587,3368238,3368924,3369747,3370360,3371282,3372335,3373100,3373881,3374651,3375511,3376195,3377155,3377965,3378732,3379514,3380615,3381494,3382160,3382952,3383780,3384516,3385595,3386568,3387232,3388083,3388833,3389664,3390545,3391451,3392352,3392992,3394e3,3394997,3395716,3396397,3397211,3397842,3398726,3399799,3400612,3401334,3402144,3402975,3403661,3404619,3405574,3406328,3407025,3407970,3408891,3409561,3410481,3411307,3411978,3412735,3413712,3414406,3415237,3416028,3416640,3417376,3418249,3419106,3419725,3420668,3421694,3422417,3423156,3423794,3424618,3425370,3426479,3427398,3428079,3428974,3429670,3430523,3431392,3432215,3432927,3433559,3434406,3435378,3436115,3436786,3437367,3438019,3438741,3439779,3440638,3441323,3441992,3442571,3443322,3444219,3445105,3445868,3446609,3447575,3448535,3449194,3449986,3450780,3451498,3452376,3453362,3454041,3454870,3455499,3456210,3457060,3458162,3459009,3459760,3460454,3461191,3462141,3463144,3464046,3464879,3465657,3466405,3467315,3468031,3468610,3469180,3469756,3470304,3471320,3472373,3473347,3474031,3474734,3475581,3476242,3477358,3478415,3479390,3480467,3481440,3482312,3482895,3483484,3484084,3485135,3486141,3486820,3487541,3488413,3489067,3490002,3491045,3491795,3492510,3493254,3493986,3494701,3495818,3496835,3497502,3498183,3498902,3499666,3500755,3501769,3502428,3503090,3504043,3504776,3505713,3506799,3507598,3508343,3509079,3509752,3510402,3511414,3512451,3513184,3513845,3514788,3515408,3516238,3517327,3518202,3518912,3519703,3520552,3521255,3522274,3523291,3524053,3524720,3525510,3526222,3527065,3528090,3529027,3529709,3530493,3531317,3532021,3533061,3534098,3534835,3535496,3536308,3537037,3537954,3539005,3539917,3540606,3541342,3541943,3542545,3543624,3544650,3545327,3545987,3546711,3547634,3548682,3549442,3550149,3551055,3551716,3552577,3553666,3554538,3555246,3556025,3556756,3557856,3558867,3559529,3560205,3561114,3561776,3562684,3563734,3564732,3565410,3566256,3567011,3567670,3568464,3569518,3570415,3571098,3571966,3572814,3573416,3574449,3575480,3576181,3576930,3577821,3578536,3579225,3580233,3581190,3581864,3582711,3583604,3584173,3585070,3586006,3586728,3587512,3588279,3588928,3589691,3590441,3591158,3591922,3592721,3593465,3594095,3594831,3595551,3596231,3596957,3597710,3598421,3599384,3600215,3600877,3601598,3602508,3603472,3604433,3605184,3606081,3606772,3607460,3608407,3609124,3610092,3610790,3611510,3612201,3613018,3613819,3614699,3615648,3616398,3617279,3617983,3618882,3619811,3620562,3621548,3622227,3622986,3623720,3624427,3625496,3626407,3627550,3628550,3629229,3629980,3630884,3631721,3632618,3633388,3634251,3634936,3635643,3636651,3637550,3638617,3639322,3640069,3640838,3641541,3642598,3643501,3644492,3645288,3645977,3646694,3647567,3648558,3649661,3650576,3651623,3652523,3653208,3654256,3655111,3655765,3656774,3657823,3658582,3659380,3660142,3660982,3661583,3662767,3663994,3665167,3666118,3667093,3668120,3668943,3669760,3670830,3671711,3672415,3673149,3673882,3674938,3675875,3676909,3677883,3678889,3679771,3680736,3681665,3682259,3683010,3684034,3685019,3686255,3687230,3688578,3689741,3691024,3691901,3692811,3694064,3695217,3696475,3697704,3698940,3700125,3701272,3702176,3703024,3703986,3704898,3705823,3706734,3707695,3708577,3709525,3710412,3711339,3712227,3713168,3714086,3714927,3715724,3716571,3717515,3718430,3719335,3720247,3721147,3721996,3722901,3723832,3724731,3725595,3726860,3728219,3729526,3730508,3731254,3732275,3733323,3734405,3735397,3736786,3738124,3739529,3740817,3742170,3743609,3745124,3746565,3747784,3749e3,3750204,3751336,3752565,3753578,3754687,3755735,3757035,3758370,3759543,3760899,3762027,3763230,3764453,3765750,3766823,3767826,3769043,3770230,3771393,3772393,3773438,3774831,3776179,3777542,3778882,3780169,3781546,3782683,3784057,3785354,3786572,3788084,3789544,3790669,3791873,3792817,3793901,3794804,3795879,3797026,3797865,3798909,3800194,3801423,3802448,3803616,3804548,3805640,3806717,3807834,3808858,3809850,3810920,3812133,3813334,3814184,3815606,3816567,3817716,3819282,3820621,3822127,3823533,3824619,3825762,3826952,3828150,3829500,3830591,3832078,3833508,3834965,3836439,3837794,3838731,3839923,3841098,3842288,3843454,3844802,3846075,3847251,3848413,3849653,3850966,3852342,3853599,3854774,3855765,3857012,3858166,3859416,3860448,3861731,3862887,3864182,3865492,3866898,3867993,3869137,3870352,3871618,3872822,3873778,3874849,3875840,3876958,3878019,3879323,3880314,3881399,3882590,3883759,3884958,3886308,3887552,3888726,3890104,3891206,3892442,3893839,3894902,3896106,3897388,3898869,3900185,3901360,3902728,3904169,3905202,3906416,3907733,3908763,3909963,3911114,3912057,3912993,3914267,3915477,3916626,3917768,3918933,3920026,3921127,3922428,3923621,3924819,3926026,3927332,3928690,3929830,3930982,3932169,3933290,3934427,3935536,3936581,3937729,3938924,3940177,3941400,3942501,3943729,3944846,3945863,3947170,3948431,3949647,3950839,3952042,3953002,3954134,3955297,3956495,3957727,3958851,3960116,3961401,3962522,3963685,3964746,3966030,3967333,3968702,3970063,3971240,3972552,3973864,3975316,3976633,3977928,3978935,3980122,3981452,3982638,3983935,3984822,3985923,3987112,3988287,3989458,3990786,3992034,3993075,3994023,3995014,3995698,3996801,3997950,3999094,4000676,4001891,4003290,4004640,4005867,4007169,4008405,4009421,4010474,4011746,4013107,4014391,4015591,4016737,4017921,4019207,4020233,4021594,4022730,4024017,4025220,4026427,4027736,4028725,4030053,4030858,4031927,4033156,4034295,4035411,4036681,4037676,4038649,4039933,4041104,4042026,4042846,4043954,4045208,4046751,4048077,4049417,4050708,4052038,4052969,4054190,4055146,4056272,4056888,4057786,4058843,4059912,4060918,4062025,4063282,4064366,4065433,4066989,4068079,4069445,4070590,4071651,4072934,4074110,4075247,4076461,4077714,4078994,4080314,4081503,4082735,4084124,4085241,4086467,4087548,4088818,4090011,4091119,4092306,4093488,4094714,4095965,4097237,4098436,4099710,4100845,4102231,4103617,4104717,4105650,4106811,4107755,4108838,4110104,4111144,4112294,4113460,4114549,4115640,4116848,4117844,4119043,4120068,4120983,4121864,4123097,4124079,4125080,4126295,4127469,4128581,4129800,4130701,4131832,4133163,4134480,4135700,4136605,4137866,4139165,4140513,4141840,4142893,4143920,4144900,4146054,4147129,4148338,4149449,4150492,4151586,4152748,4153922,4155048,4156268,4157551,4158542,4159329,4160457,4161549,4162648,4163791,4164840,4166165,4167444,4168755,4169703,4170711,4171820,4172885,4173689,4174826,4175769,4176752,4177860,4178915,4179926,4180892,4182073,4183110,4184380,4185538,4186951,4188007,4189296,4190320,4191374,4192436,4193600,4194943,4196048,4197034,4198082,4199107,4200351,4201613,4202738,4203812,4204912,4206115,4207323,4208414,4209485,4210915,4212126,4213214,4214359,4215747,4216853,4217789,4218859,4220258,4221262,4222155,4223085,4224066,4225328,4226315,4227484,4228734,4229985,4231361,4232556,4233803,4235126,4236168,4236990,4238041,4239001,4240335,4241484,4242793,4243824,4245009,4246298,4247547,4248823,4250131,4251261,4252337,4253405,4254354,4255381,4256412,4257471,4258459,4259476,4260418,4261495,4262433,4263461,4264227,4265265,4266306,4267216,4268086,4268914,4269833,4270694,4271600,4272534,4273469,4274392,4275304,4276123,4277086,4278044,4279059,4280151,4281198,4282319,4283248,4284204,4285227,4286288,4287275,4288482,4289515,4290642,4291727,4292868,4294020,4295098,4296124,4297191,4298262,4299262,4300285,4301242,4302274,4303309,4304237,4305254,4306239,4307241,4308183,4309226,4310103,4311006,4311992,4312974,4313817,4314752,4315820,4316802,4317708,4318591,4319500,4320508,4321502,4322457,4323299,4324184,4325135,4326075,4327003,4327797,4328677,4329654,4330791,4331760,4332872,4333885,4334882,4335928,4336900,4337766,4338703,4339633,4340569,4341599,4342618,4343590,4344531,4345526,4346529,4347452,4348365,4349404,4350392,4351384,4352410,4353484,4354541,4355518,4356556,4357643,4358707,4359861,4360915,4361923,4362869,4363955,4364938,4365872,4366710,4367744,4368954,4370183,4371373,4372504,4373605,4374620,4375562,4376579,4377613,4378713,4379758,4380865,4381948,4383048,4384279,4385466,4386487,4387484,4388482,4389425,4390461,4391249,4391990,4392986,4393947,4394696,4395210,4395951,4396687,4397501,4398346,4399105,4400015,4400858,4401686,4402624,4403434,4404478,4405597,4406615,4407684,4408765,4409863,4411009,4411931,4412958,4413973,4415088,4416107,4417269,4418287,4419469,4420545,4421707,4422825,4424033,4425095,4426142,4427199,4428288,4429349,4430427,4431486,4432364,4433182,4434121,4435046,4435883,4437020,4438144,4439253,4440285,4440826,4441242,4441733,4442749,4443728,4444899,4446040,4446933,4447958,4449039,4450025,4450964,4451896,4452644,4453532,4454552,4455579,4456485,4457529,4458651,4459601,4460632,4461632,4462642,4463613,4464570,4465536,4466559,4467608,4468622,4469753,4470681,4471692,4472520,4473488,4474442,4475386,4476419,4477371,4478361,4479271,4480260,4481236,4482209,4483125,4483988,4484892,4485837,4486836,4487884,4488918,4489783,4490723,4491706,4492594,4493493,4494543,4495528,4496521,4497461,4498245,4499233,4500062,4500880,4501719,4502711,4503635,4504634,4505639,4506699,4507648,4508676,4509676,4510665,4511641,4512602,4513594,4514453,4515269,4516088,4517015,4517812,4518688,4519585,4520418,4521329,4522255,4523061,4523627,4524267,4525117,4526064,4527019,4527978,4528837,4529967,4530950,4531374,4532142,4533254,4534203,4535379,4536435,4537628,4538615,4539643,4540831,4541922,4543021,4544199,4545276,4546385,4547543,4548724,4549604,4550257,4550956,4551979,4552890,4553962,4554861,4555933,4557014,4558207,4559184,4560280,4561465,4562412,4563533,4564696,4565768,4566905,4567891,4569001,4569976,4570910,4571774,4572639,4573458,4574324,4575194,4576126,4576994,4577977,4578997,4580025,4581122,4581961,4582493,4583582,4584561,4585724,4586758,4587508,4588095,4588727,4589752,4590804,4591916,4593e3,4594086,4595100,4596038,4597027,4597781,4598276,4598842,4599468,4600498,4601623,4602675,4603655,4604864,4606387,4607822,4609189,4610404,4611855,4613174,4614435,4615543,4616962,4618309,4619655,4621002,4622182,4623192,4624563,4625962,4627221,4628544,4629819,4631152,4632402,4633739,4634904,4636720,4638605,4640238,4641300,4642473,4643533,4644369,4645266,4646410,4647609,4648705,4649920,4650548,4651523,4652565,4653381,4654562,4655738,4656864,4657933,4658795,4660037,4661099,4662378,4663243,4664297,4665350,4666587,4667672,4668878,4669982,4671092,4672180,4673340,4674236,4674965,4675870,4677001,4678118,4679142,4680226,4681214,4682275,4683278,4684268,4685257,4686227,4687347,4688482,4689570,4690450,4691141,4692176,4693091,4694131,4695276,4696392,4697545,4698979,4700576,4702149,4703541,4705164,4706880,4708440,4710047,4711680,4713025,4714646,4716185,4717668,4719236,4720955,4722517,4724142,4725761,4727106,4727793,4729147,4730375,4731591,4732338,4732669,4733402,4734772,4735905,4737245,4738369,4739674,4740785,4742094,4743483,4744623,4745957,4747348,4748668,4749906,4751298,4752669,4754030,4755319,4756539,4757808,4759206,4760540,4761829,4763021,4764341,4765661,4767073,4768462,4769801,4770976,4772327,4773598,4774773,4776009,4777216,4778580,4779906,4781268,4782596,4783828,4785007,4786429,4787800,4789073,4790350,4791140,4791748,4792369,4793011,4793968,4794971,4795697,4796985,4798005,4799132,4800432,4801743,4802882,4804208,4804917,4806115,4807345,4808463,4809553,4810924,4812090,4813380,4814723,4816038,4817214,4818354,4819600,4820715,4821922,4822870,4824143,4825505,4826884,4828124,4828961,4830283,4831587,4833033,4833749,4834987,4836252,4837238,4838329,4839387,4840297,4841217,4842453,4843454,4844737,4846136,4847481,4848830,4850338,4851630,4853067,4853973,4854334,4854812,4855994,4857337,4858125,4859493,4860478,4861620,4862795,4864114,4865443,4866856,4868260,4869461,4870695,4871697,4873016,4874412,4875416,4876610,4877782,4879149,4880416,4881695,4882777,4884110,4885211,4885878,4887176,4888139,4889342,4890299,4891130,4892038,4893126,4894590,4895904,4897224,4898526,4900003,4901530,4902970,4903986,4905464,4906485,4907474,4908747,4909919,4911029,4912138,4913285,4914771,4915969,4917068,4918302,4919252,4920054,4921125,4922283,4923398,4924575,4925697,4926616,4927707,4928565,4929518,4930488,4931299,4932407,4933307,4934148,4935222,4936396,4937368,4938545,4939927,4941165,4942180,4943290,4944665,4945712,4946698,4947835,4948876,4949959,4951138,4952427,4953424,4954278,4955252,4956219,4957600,4958847,4959875,4960955,4962088,4963340,4964408,4965431,4966464,4967632,4968704,4969749,4970965,4972212,4973162,4974283,4975533,4976844,4977836,4979111,4980444,4981560,4982631,4983701,4984592,4985557,4986581,4987926,4989198,4990613,4992108,4993281,4994400,4995715,4996662,4997767,4999007,5000050,5001021,5002123,5003318,5004459,5005424,5006410,5007761,5009067,5010172,5011360,5012494,5013923,5015045,5016081,5017335,5018582,5019157,5020345,5021407,5022548,5023683,5025031,5026034,5026897,5027746,5028450,5029675,5030847,5032027,5033329,5034662,5036008,5037437,5038669,5039390,5040390,5041331,5042719,5044133,5045321,5046496,5047897,5049128,5050420,5051768,5053223,5054514,5055753,5056845,5057742,5058695,5060077,5061522,5062944,5064382,5065655,5066960,5068051,5069210,5070301,5071283,5072575,5073912,5075310,5076634,5077912,5079093,5080142,5081439,5082526,5083779,5085126,5086278,5087357,5088416,5089696,5090875,5092072,5093234,5094401,5095699,5097162,5098336,5099382,5100595,5101701,5102803,5103949,5105150,5106453,5107504,5108175,5108896,5109690,5110792,5111847,5113248,5114613,5115730,5116838,5117965,5119161,5120448,5121476,5122610,5123538,5124842,5126359,5127576,5129021,5130301,5131578,5132850,5134103,5135470,5136602,5138047,5139630,5140828,5141629,5142963,5144222,5145423,5146872,5148091,5149382,5150857,5152263,5153538,5154449,5155596,5156720,5157944,5159423,5160681,5161680,5162988,5164250,5165707,5166687,5167859,5168791,5169813,5170768,5171741,5172847,5173994,5174954,5175976,5177083,5178011,5179120,5180102,5181257,5182211,5183410,5184471,5185865,5186866,5187789,5188708,5189936,5191072,5192161,5193158,5194205,5194985,5196095,5197233,5198141,5199017,5200202,5201372,5202527,5203170,5204082,5205197,5206163,5207158,5208067,5209203,5210392,5211502,5212505,5213406,5214232,5215354,5216426,5217245,5218386,5219543,5220565,5221316,5222392,5223492,5224390,5225620,5226545,5227232,5228394,5229451,5230621,5232073,5233458,5234656,5235795,5237374,5238451,5239337,5240390,5241148,5242338,5243608,5245058,5246412,5247675,5248855,5249659,5250781,5251912,5252880,5254039,5254778,5255781,5256878,5257927,5259005,5259967,5260993,5262276,5263148,5264146,5265487,5266735,5268041,5269055,5270080,5271210,5272317,5273014,5274147,5275171,5276440,5277391,5278463,5279518,5280636,5281627,5282909,5284345,5285536,5286844,5288086,5289244,5290332,5291423,5292200,5293362,5294147,5295177,5296184,5297499,5298768,5299982,5301078,5302331,5303167,5304227,5305436,5306445,5307658,5308736,5309770,5310539,5311565,5312727,5313909,5315089,5316251,5317351,5318140,5319614,5321082,5322505,5323838,5325043,5325854,5327058,5328353,5329554,5330479,5331777,5332732,5333648,5334828,5335988,5337201,5338335,5339653,5340838,5342096,5343195,5344423,5345815,5346934,5348229,5349461,5350792,5352052,5353221,5354259,5355408,5356607,5357888,5359061,5360324,5361457,5362584,5363824,5365012,5366130,5367122,5368214,5369539,5370798,5372206,5373470,5374815,5376198,5377328,5378337,5379502,5380702,5382013,5383134,5384252,5385442,5386603,5388042,5389105],"sizes":[1427,1162,1187,1546,1315,1416,1223,900,961,900,1057,1193,1185,1022,829,1364,1050,1006,1076,1244,1176,1325,898,1061,911,1116,1170,1169,1371,1302,1152,1043,885,914,849,1476,1183,999,1448,986,1285,1417,1146,1211,1149,1288,1193,1259,958,916,1132,928,940,867,1034,1215,1008,907,1060,880,862,1096,992,738,1095,971,1186,1005,924,1041,940,905,778,1328,1287,1121,952,1172,1203,976,1121,1228,1153,954,1147,1033,1348,1266,857,1195,790,1104,1105,917,1311,1203,1259,744,852,768,1034,907,1064,1269,1206,1238,817,1040,1065,1225,954,925,753,733,630,694,933,581,568,781,623,510,749,831,871,833,634,1142,843,682,953,907,701,844,882,765,1072,1404,1467,1100,1365,1463,1484,1276,1330,1453,1221,1209,1332,1324,1553,1315,1459,1426,1114,969,1359,1448,1255,876,1271,1350,1358,1031,1206,1048,1029,1005,1149,1206,1148,1153,1069,1101,1017,1294,1e3,1128,1094,1226,997,1160,1091,1358,1126,1116,919,1059,1212,1265,1032,1120,1048,1032,867,1201,1290,1343,1314,1094,1118,1132,1167,1282,1274,1142,876,1150,1001,1252,1408,1422,1226,1152,1003,722,1231,1176,1029,1385,1327,1344,1046,1179,1116,980,991,1041,1098,857,795,985,955,751,895,1432,1249,1304,1175,985,1027,896,916,908,1188,1082,958,1115,949,1198,1119,933,653,751,706,1057,1247,1209,977,1070,1045,1076,1056,988,968,1133,1087,1026,1059,1081,1102,853,1011,1013,1090,1083,1068,848,1014,1036,961,1012,1031,1228,1377,1020,990,1260,1117,1326,1384,1228,1190,1037,1176,1255,1172,1145,736,738,784,933,1142,1163,1071,786,1027,880,1052,896,852,863,1305,1597,1283,903,1014,1058,1580,1560,884,1233,1095,979,1131,1082,1131,1330,1401,1157,1246,1254,1271,1385,1325,1279,1346,1143,1423,1200,950,1044,1237,1176,1116,1266,969,927,1191,961,1358,1141,1249,1131,1643,1067,1135,1094,1100,1190,971,1227,1288,1310,1089,1049,1146,1235,1175,1204,1167,1352,1164,1186,889,937,941,999,1077,921,1154,1271,982,1158,1512,1374,1246,1403,1471,1322,1023,1061,1114,1012,1148,1121,961,1001,1275,1166,1503,1093,1355,1302,1296,1201,1478,1055,1083,1447,1415,914,1169,1196,1012,1070,1425,1266,1190,1179,1374,1368,1183,1258,1159,1204,1274,1253,1360,1181,1177,993,1224,1154,1009,1368,1218,698,1190,1588,1331,1241,1442,1200,1355,1341,922,1298,1122,898,1093,887,1120,882,1284,1336,1208,1173,897,926,1115,1177,1093,944,1115,1016,1003,1197,1108,1050,1060,1104,1011,1303,1004,926,1022,1260,1187,1086,1207,944,1142,1103,1150,1103,1010,1265,1187,1331,1224,1145,1141,1270,1438,1152,1141,1213,1321,1324,1261,1403,1307,1333,1072,1181,1113,1033,1269,1034,1272,1094,718,1069,1376,1120,1267,1307,1389,1162,1296,1223,1108,1336,1453,1201,1159,1080,1373,1209,1201,935,1370,1325,1298,1256,1286,1297,1414,1237,1286,1359,1082,1050,1173,1091,1502,1079,937,805,733,822,1215,1225,1234,890,1205,1138,1172,1047,854,1092,1262,1136,1217,1191,1030,1125,979,1224,1143,782,1076,1071,1221,931,1090,1423,1456,1469,1606,1445,1410,1422,1350,1216,1276,1408,1302,1272,1328,1217,1227,1203,1141,1339,1357,1188,1292,1301,1135,1285,1285,1382,1265,1189,1282,1415,1267,1265,1265,713,1214,1067,1130,1293,1292,1181,1140,1253,1272,1138,1441,1202,1354,1010,1076,1221,1160,1147,1210,1085,1506,1381,931,1278,1442,1424,1304,1226,1206,1115,1270,1431,1252,1295,1249,1150,1285,1139,1131,1049,1088,1110,1154,1285,883,1220,1125,1048,1261,1145,1180,1343,1246,1099,1075,1054,1353,1384,1251,1415,1259,1032,1192,1037,1253,1293,1206,1005,1117,967,1164,1195,1333,1049,1241,1264,952,1113,1353,1242,1158,1218,1173,1175,1164,1136,1288,1110,836,894,1259,1379,1186,919,957,1412,1485,1453,864,1290,1109,938,859,1250,1330,1134,1486,1321,957,975,1201,1181,1039,1149,1298,987,968,820,1294,1184,1135,1570,1361,1235,1121,1166,1214,1061,1134,1050,1244,1297,1167,1008,1107,1198,1279,1313,1217,1143,447,971,1039,1153,1240,1211,1534,1253,975,1134,1282,1312,1303,1207,1108,1081,1182,1299,1380,1522,1362,1136,1352,1264,1237,1520,1565,1151,1182,1118,631,1247,1111,1136,797,1281,974,659,1110,1056,1186,1005,1366,1360,1254,1197,1065,1461,1214,1401,1263,1181,973,1060,1266,1153,1300,1168,1448,1251,1157,1256,1243,1300,1632,1673,1296,1521,1449,1361,1032,1240,1373,1088,1344,1005,1121,1239,1537,805,1396,1377,1087,1217,1244,1287,1014,969,1024,971,1122,1085,1060,1150,1114,1058,987,1155,1115,1048,1108,1385,1333,1344,1303,904,1287,1216,1305,1223,1175,1366,1484,1291,1068,1145,902,1150,1002,1121,1289,1330,1235,1135,1350,1075,1167,1241,1144,1222,1166,1008,1190,1376,1135,1205,1126,1073,1150,1186,1219,1230,1253,1079,1114,1078,1207,1117,1181,1267,1119,1128,1145,1106,840,1033,1104,1023,1192,1060,1077,1040,929,1108,1111,855,1013,941,978,1117,1085,1245,1486,1331,1158,967,1230,1121,1082,1337,954,1012,1208,1167,1065,879,1117,1052,1114,1042,1049,663,1227,1135,1216,859,916,1179,979,1267,1078,1019,1073,1138,1180,939,904,1075,1015,1121,1096,1232,1147,1211,1425,1200,1210,1120,1249,1134,1106,984,1361,1224,1196,843,1203,790,723,755,514,573,562,503,520,570,555,549,587,582,540,550,599,554,593,591,615,1284,1152,1282,1125,997,1417,1294,1037,1047,1233,1237,1291,980,772,1084,938,1215,1115,1040,1045,1192,1236,1200,1145,966,1143,1040,955,1092,821,658,995,1062,994,972,1055,935,812,759,928,1022,893,909,866,733,1005,802,942,1165,1077,1423,1242,1269,1172,1199,1268,1065,977,1093,1207,1289,947,671,809,1186,1488,1133,971,782,1093,935,1003,1052,1086,1071,1086,1176,1279,946,1088,1458,1392,1357,1354,1438,1390,1332,1215,1128,971,1157,1270,1173,934,927,1083,1152,1148,1167,1283,1433,1183,1243,1332,1397,1244,818,1109,1265,1124,1193,1180,1311,1387,1279,1579,649,1046,938,798,1358,1089,1119,1233,966,1261,933,1023,1295,1574,1104,1241,974,1172,995,1253,971,1306,1086,992,885,954,974,1167,1160,939,924,1249,1415,1137,1133,1059,1220,1170,1180,1121,970,1371,1408,1051,1458,1311,1432,1493,1089,1381,1163,879,1300,1022,1047,1031,1123,757,1079,1274,1202,1366,1112,1398,1178,1329,1093,1095,868,1276,1275,1095,887,1068,1137,1119,1125,1290,1128,1142,1087,870,993,791,669,1429,1582,1422,1112,1233,1178,1225,1188,1223,1334,1295,1228,974,1203,1270,978,1072,1006,1153,1306,1193,1004,1180,1033,1074,1310,1208,1216,1426,1405,1271,1293,1421,1243,1294,1078,854,1228,1371,1238,1192,1040,1147,1152,1269,934,938,1020,1099,940,1104,1101,1342,1083,977,833,965,1111,939,1005,987,1050,1230,1585,1538,1528,1407,1036,800,1067,1024,849,856,1197,912,1115,1055,1274,1346,902,1250,1317,1044,876,827,727,1260,912,1006,1025,1096,831,1200,1307,1372,1354,1235,1337,1097,1251,1210,1503,1015,1264,1045,1052,957,1284,1381,1388,878,1063,1171,1425,1171,1243,1095,1054,1031,1278,1301,1503,1352,1460,1408,1591,1426,1599,1321,1209,1221,1126,1298,1174,1184,1376,1293,1333,1238,1032,1258,787,900,1250,1264,1393,1487,1331,1001,1058,1031,1175,1169,998,1141,1099,852,852,1123,1588,1323,1101,1095,1280,1313,1072,1485,1438,1204,1245,1212,1324,1160,1317,1522,1090,1219,1001,792,1033,935,888,997,730,894,954,1527,1066,1364,1174,1001,894,1244,1232,1470,1239,1287,1451,1428,1350,1177,913,1004,1121,1075,803,1007,1229,1112,859,881,1196,1235,1239,1253,1292,1388,1219,1301,1218,1219,1198,908,1304,1536,1076,1238,1365,1355,1232,1199,1271,1209,1232,1178,1174,1147,1144,1124,975,1079,817,901,1172,1203,1313,1206,1070,890,1115,785,941,1115,1153,1301,1240,1124,1186,1211,1126,1063,1125,1205,1212,1020,1319,1133,1314,1229,1098,1192,1180,902,1001,1185,1231,1169,1400,1154,1115,1017,1227,1224,1315,1232,1220,1306,1431,1251,1233,1086,1136,1078,1263,1259,1207,1302,1315,1351,1169,1314,1194,1181,1274,1021,1433,1263,1041,1177,1189,1160,945,1047,1559,1167,1197,1198,1172,1254,1229,1308,1353,1407,1422,1195,1332,1228,1257,1123,1214,1036,1106,946,997,804,1128,1398,1480,1055,1191,1373,1154,1008,790,796,661,1274,1358,1342,1426,1248,1110,1194,1291,1162,1070,1385,1079,988,1152,1208,1345,1164,1067,974,1301,1263,1340,1182,1065,1309,1350,1288,1054,1324,1488,1320,1152,1310,1197,1273,1309,1297,1017,1265,1504,1470,1196,569,569,1096,960,1107,852,1052,1097,1272,1241,1200,1256,1063,1084,1606,1222,1248,1282,1177,1218,1147,1201,1242,1186,1237,1187,1074,1231,1141,1301,1254,1256,1220,1293,1041,1282,1476,1260,1132,1219,1393,1213,998,982,1159,1267,1174,1022,1101,1152,1125,1174,1415,957,1404,1281,1248,1502,1114,1031,861,1028,957,807,986,1193,1004,803,902,934,710,791,977,1067,918,1269,818,1443,1410,1540,1196,1298,1093,1061,1051,1173,1075,1060,1154,1308,1410,1117,824,751,843,885,1100,1438,1173,1098,1281,899,754,1310,1256,907,1235,1234,1184,1087,1519,1198,1331,1139,1188,984,1046,1171,993,1222,1376,1225,1035,1287,1060,1138,777,1011,795,1089,1080,1402,1369,978,1202,1203,1029,1379,1352,1314,1335,1307,1059,1399,1551,1331,1482,1195,1095,1199,1458,1186,1350,1232,1193,829,1172,1363,856,1109,1031,1431,868,1234,1002,1018,1030,1021,1330,973,1091,1340,1263,1190,1391,1265,1258,1269,1192,1412,1306,1038,1284,851,922,1038,1256,1207,1121,1108,916,650,1074,937,1052,1052,980,1022,906,989,1053,985,1003,1090,1070,1037,866,989,1105,1324,1251,1120,809,910,972,993,782,1168,959,965,860,816,1289,954,728,1255,1233,1155,1107,1302,1367,1179,1134,1306,1383,1401,1505,1187,1170,1233,1217,1320,1535,1022,1235,1404,1072,1136,1126,1044,1035,1087,1037,1220,1123,914,1143,1049,1251,1207,1215,1153,1292,1178,1033,1074,1145,1151,1123,945,981,858,857,1166,1234,1048,1102,1262,1180,1154,1024,1029,1090,985,985,1230,1233,926,1617,1262,1485,1216,1215,939,847,952,931,940,1276,1419,1355,1321,1318,1212,1211,1375,1274,1338,1320,1139,1051,951,1158,1495,1337,1236,1064,1333,1367,1084,981,1317,1289,1578,1143,1173,1237,1145,1244,1095,1301,1259,1282,1369,1252,1063,1385,1339,1227,1316,1132,1368,1263,1141,999,1098,1149,1197,1147,1385,1329,1443,1521,1134,1350,1234,1239,1240,1312,1506,1311,1228,997,1186,1392,1035,1389,980,995,964,1186,1238,1509,1113,1127,1083,1128,1252,1294,983,1082,970,834,1063,1215,1145,1218,1383,1238,1199,1204,1215,1178,1029,1111,1095,1067,1166,1242,962,898,1030,1086,1024,976,997,725,1194,1446,1271,1259,960,1240,1439,1349,1306,1240,1214,1087,1280,1246,1424,1442,1189,987,1382,1118,1317,1299,1227,1143,1199,1049,1039,1250,1005,1337,1284,1252,1208,1178,1205,1422,1429,1148,1089,1140,1237,1167,1180,1100,1069,1309,1128,1382,1421,843,1326,1336,1177,1275,1445,1230,1227,1129,969,909,1198,1482,1282,1069,1185,1403,1298,1229,1138,1151,1253,1144,1234,1211,1199,1185,1320,1197,1237,1080,974,1126,973,831,973,1200,1184,1259,754,927,1187,1263,921,1111,1194,1115,1238,1004,808,1402,1274,1392,1199,1454,1114,1285,1281,1276,1214,1070,969,1334,1322,1020,957,1158,1220,1030,996,964,1074,975,1282,1211,992,1130,1180,1226,1244,1043,1270,1192,1087,1105,1094,885,887,1189,726,996,649,1132,1256,1370,1097,1004,1333,1220,1124,1176,1076,1154,1272,1231,825,865,1600,1026,1326,1300,1345,1366,1436,1562,1605,1577,1538,1321,979,1038,1005,880,898,881,877,842,1180,880,1183,734,1322,1121,1067,1400,1372,1239,1252,1042,959,1172,1186,916,1111,1157,1172,1120,1042,1086,1040,1040,1218,1045,1146,1243,959,1137,1131,1039,980,1078,1177,1130,887,938,1040,1135,1041,1120,1101,1145,1275,1016,1107,867,1136,1114,1395,1282,1277,1259,1039,1114,1204,945,1075,985,1362,1110,1253,847,854,1185,1071,954,1194,1220,1375,1337,1171,995,1021,1133,1033,1349,1194,1326,1305,1160,1350,1245,1265,1003,1109,1173,975,1116,1185,1057,1269,1004,931,1054,931,999,1275,969,1265,1416,1383,1368,1102,1087,1202,1344,1236,1031,1145,1283,975,788,1006,1065,1215,1249,1161,1161,1020,1136,1085,641,1185,966,1223,999,1426,1049,1191,1080,1247,1118,1229,1226,1072,1031,1012,1170,1025,1373,1329,1303,1269,1057,1041,1179,927,1155,1171,1057,1354,1320,1214,1271,1157,766,1072,945,1362,1322,1173,1344,1113,911,1387,1227,1168,1365,1254,1370,1165,1210,1221,1190,1168,1243,1237,1015,852,1223,718,561,1232,1187,1012,938,1012,1158,1064,1038,1150,1024,1168,1145,1051,1044,1265,1153,1228,1174,1235,1213,1109,1263,1204,1219,1167,1225,1166,1054,1114,1252,1158,1005,1180,605,901,1139,1224,1303,1297,1164,1192,1269,1106,1058,1061,1313,1070,1096,1072,1265,1169,1259,1296,1295,1404,1107,816,1263,630,837,1273,1174,988,955,666,789,760,792,813,974,963,912,1363,1151,1226,813,1059,1082,1012,1325,1289,1158,1374,1058,1205,1275,1164,1106,1176,1118,1146,1344,1103,1180,1216,1260,1197,1256,1073,1053,1203,1046,1143,962,1317,1174,1256,1128,1344,1510,1358,1402,1385,1344,1513,1217,1196,1412,1012,1044,1121,1113,999,951,755,1299,1017,1041,1052,939,1413,1352,1291,1201,1485,1548,1448,885,760,1202,1337,1319,1322,1220,1301,1329,1128,1199,1366,1429,1373,1389,1311,1049,1311,1247,1255,1261,1265,1196,1432,1341,1293,1331,1187,1536,1401,1284,1320,1565,1430,1464,1022,765,592,687,966,1064,1037,1075,1205,1040,1389,1326,1335,1245,1174,1075,948,952,1331,972,849,1158,1005,1039,1022,1054,1163,953,1198,1282,880,1026,1241,674,1277,1050,1231,1245,1071,965,1196,1087,1011,911,1438,1160,1229,1179,1357,1436,1354,1243,1457,945,892,1046,1118,941,1365,1164,1380,1276,1197,1212,1028,1330,1538,1262,1456,1357,1559,1413,1109,1217,1397,1204,1152,1085,1339,1055,1031,1101,1255,1093,1140,1264,1291,1218,1576,1301,1287,1211,1211,964,1170,931,974,1177,1170,1491,1260,1285,1314,1226,1226,1267,1415,1379,1089,1462,1250,1134,1277,1180,1267,1470,1133,1101,1292,1358,1131,1284,1097,1277,1379,1340,1106,1053,1008,853,1115,1361,1541,1283,1332,1177,1197,1138,1051,1198,842,1158,1252,1052,1144,1298,906,1224,1145,1154,1294,1110,1231,1109,949,1407,1233,1237,1161,1303,1305,1301,1384,1409,1308,1305,1235,1444,1463,1450,1437,1300,1287,1410,1280,1410,1278,1267,1249,1424,1449,1078,1308,768,798,787,721,667,951,816,1159,861,1030,1161,835,1017,836,854,787,886,755,1116,1008,676,719,725,607,861,1031,878,855,841,927,796,947,637,622,774,1028,825,688,613,676,710,874,978,662,722,610,720,728,1023,848,843,825,925,703,1053,1015,767,796,968,766,740,1106,998,672,846,898,582,843,1092,774,810,981,786,630,1076,1027,673,798,954,676,897,1087,763,820,974,783,666,1109,1025,666,840,978,776,1067,1043,717,859,1056,744,1094,1042,752,808,976,792,721,1113,999,681,849,933,750,948,1132,1061,833,800,905,723,1046,1093,1032,885,830,646,1045,656,817,751,1079,936,666,678,863,621,1055,963,749,776,717,845,669,1085,858,788,855,875,736,973,726,849,690,845,706,782,1141,622,695,746,1043,927,665,707,695,655,837,965,748,721,629,749,674,1081,726,804,754,1113,877,665,758,871,707,975,979,700,793,691,619,722,1023,746,750,829,1033,779,704,631,860,778,1047,937,676,927,635,688,825,906,760,721,857,979,726,712,739,795,807,1044,914,676,783,642,623,824,867,713,715,773,989,735,685,618,721,697,1012,791,745,619,604,675,1011,1019,758,740,799,657,1106,700,810,798,1080,913,668,708,861,798,969,981,710,823,794,633,743,895,809,725,868,1023,716,734,639,855,747,1078,889,675,953,628,689,867,802,856,679,1021,981,688,675,750,628,882,1071,812,722,789,785,711,942,765,815,693,1035,963,651,686,823,613,922,1053,765,781,770,860,684,960,810,767,782,1101,879,666,792,828,736,1079,973,664,851,750,831,881,906,901,640,1008,997,719,681,814,631,884,1073,813,722,810,831,686,958,955,754,697,945,921,670,920,826,671,757,977,694,831,791,612,736,873,857,619,943,1026,723,739,638,824,752,1109,919,681,895,696,853,869,823,712,632,847,972,737,671,581,652,722,1038,859,685,669,579,751,897,886,763,741,966,960,659,792,794,718,878,986,679,829,629,711,850,1102,847,751,694,737,950,1003,902,833,778,748,910,716,579,570,576,548,1016,1053,974,684,703,847,661,1116,1057,975,1077,973,872,583,589,600,1051,1006,679,721,872,654,935,1043,750,715,744,732,715,1117,1017,667,681,719,764,1089,1014,659,662,953,733,937,1086,799,745,736,673,650,1012,1037,733,661,943,620,830,1089,875,710,791,849,703,1019,1017,762,667,790,712,843,1025,937,682,784,824,704,1040,1037,737,661,812,729,917,1051,912,689,736,601,602,1079,1026,677,660,724,923,1048,760,707,906,661,861,1089,872,708,779,731,1100,1011,662,676,909,662,908,1050,998,678,846,755,659,794,1054,897,683,868,848,602,1033,1031,701,749,891,715,689,1008,957,674,847,893,569,897,936,722,784,767,649,763,750,717,764,799,744,630,736,720,680,726,753,711,963,831,662,721,910,964,961,751,897,691,688,947,717,968,698,720,691,817,801,880,949,750,881,704,899,929,751,986,679,759,734,707,1069,911,1143,1e3,679,751,904,837,897,770,863,685,707,1008,899,1067,705,747,769,703,1057,903,991,796,689,717,873,991,1103,915,1047,900,685,1048,855,654,1009,1049,759,798,762,840,601,1184,1227,1173,951,975,1027,823,817,1070,881,704,734,733,1056,937,1034,974,1006,882,965,929,594,751,1024,985,1236,975,1348,1163,1283,877,910,1253,1153,1258,1229,1236,1185,1147,904,848,962,912,925,911,961,882,948,887,927,888,941,918,841,797,847,944,915,905,912,900,849,905,931,899,864,1265,1359,1307,982,746,1021,1048,1082,992,1389,1338,1405,1288,1353,1439,1515,1441,1219,1216,1204,1132,1229,1013,1109,1048,1300,1335,1173,1356,1128,1203,1223,1297,1073,1003,1217,1187,1163,1e3,1045,1393,1348,1363,1340,1287,1377,1137,1374,1297,1218,1512,1460,1125,1204,944,1084,903,1075,1147,839,1044,1285,1229,1025,1168,932,1092,1077,1117,1024,992,1070,1213,1201,850,1422,961,1149,1566,1339,1506,1406,1086,1143,1190,1198,1350,1091,1487,1430,1457,1474,1355,937,1192,1175,1190,1166,1348,1273,1176,1162,1240,1313,1376,1257,1175,991,1247,1154,1250,1032,1283,1156,1295,1310,1406,1095,1144,1215,1266,1204,956,1071,991,1118,1061,1304,991,1085,1191,1169,1199,1350,1244,1174,1378,1102,1236,1397,1063,1204,1282,1481,1316,1175,1368,1441,1033,1214,1317,1030,1200,1151,943,936,1274,1210,1149,1142,1165,1093,1101,1301,1193,1198,1207,1306,1358,1140,1152,1187,1121,1137,1109,1045,1148,1195,1253,1223,1101,1228,1117,1017,1307,1261,1216,1192,1203,960,1132,1163,1198,1232,1124,1265,1285,1121,1163,1061,1284,1303,1369,1361,1177,1312,1312,1452,1317,1295,1007,1187,1330,1186,1297,887,1101,1189,1175,1171,1328,1248,1041,948,991,684,1103,1149,1144,1582,1215,1399,1350,1227,1302,1236,1016,1053,1272,1361,1284,1200,1146,1184,1286,1026,1361,1136,1287,1203,1207,1309,989,1328,805,1069,1229,1139,1116,1270,995,973,1284,1171,922,820,1108,1254,1543,1326,1340,1291,1330,931,1221,956,1126,616,898,1057,1069,1006,1107,1257,1084,1067,1556,1090,1366,1145,1061,1283,1176,1137,1214,1253,1280,1320,1189,1232,1389,1117,1226,1081,1270,1193,1108,1187,1182,1226,1251,1272,1199,1274,1135,1386,1386,1100,933,1161,944,1083,1266,1040,1150,1166,1089,1091,1208,996,1199,1025,915,881,1233,982,1001,1215,1174,1112,1219,901,1131,1331,1317,1220,905,1261,1299,1348,1327,1053,1027,980,1154,1075,1209,1111,1043,1094,1162,1174,1126,1220,1283,991,787,1128,1092,1099,1143,1049,1325,1279,1311,948,1008,1109,1065,804,1137,943,983,1108,1055,1011,966,1181,1037,1270,1158,1413,1056,1289,1024,1054,1062,1164,1343,1105,986,1048,1025,1244,1262,1125,1074,1100,1203,1208,1091,1071,1430,1211,1088,1145,1388,1106,936,1070,1399,1004,893,930,981,1262,987,1169,1250,1251,1376,1195,1247,1323,1042,822,1051,960,1334,1149,1309,1031,1185,1289,1249,1276,1308,1130,1076,1068,949,1027,1031,1059,988,1017,942,1077,938,1028,766,1038,1041,910,870,828,919,861,906,934,935,923,912,819,963,958,1015,1092,1047,1121,929,956,1023,1061,987,1207,1033,1127,1085,1141,1152,1078,1026,1067,1071,1e3,1023,957,1032,1035,928,1017,985,1002,942,1043,877,903,986,982,843,935,1068,982,906,883,909,1008,994,955,842,885,951,940,928,794,880,977,1137,969,1112,1013,997,1046,972,866,937,930,936,1030,1019,972,941,995,1003,923,913,1039,988,992,1026,1074,1057,977,1038,1087,1064,1154,1054,1008,946,1086,983,934,838,1034,1210,1229,1190,1131,1101,1015,942,1017,1034,1100,1045,1107,1083,1100,1231,1187,1021,997,998,943,1036,788,741,996,961,749,514,741,736,814,845,759,910,843,828,938,810,1044,1119,1018,1069,1081,1098,1146,922,1027,1015,1115,1019,1162,1018,1182,1076,1162,1118,1208,1062,1047,1057,1089,1061,1078,1059,878,818,939,925,837,1137,1124,1109,1032,541,416,491,1016,979,1171,1141,893,1025,1081,986,939,932,748,888,1020,1027,906,1044,1122,950,1031,1e3,1010,971,957,966,1023,1049,1014,1131,928,1011,828,968,954,944,1033,952,990,910,989,976,973,916,863,904,945,999,1048,1034,865,940,983,888,899,1050,985,993,940,784,988,829,818,839,992,924,999,1005,1060,949,1028,1e3,989,976,961,992,859,816,819,927,797,876,897,833,911,926,806,566,640,850,947,955,959,859,1130,983,424,768,1112,949,1176,1056,1193,987,1028,1188,1091,1099,1178,1077,1109,1158,1181,880,653,699,1023,911,1072,899,1072,1081,1193,977,1096,1185,947,1121,1163,1072,1137,986,1110,975,934,864,865,819,866,870,932,868,983,1020,1028,1097,839,532,1089,979,1163,1034,750,587,632,1025,1052,1112,1084,1086,1014,938,989,754,495,566,626,1030,1125,1052,980,1209,1523,1435,1367,1215,1451,1319,1261,1108,1419,1347,1346,1347,1180,1010,1371,1399,1259,1323,1275,1333,1250,1337,1165,1816,1885,1633,1062,1173,1060,836,897,1144,1199,1096,1215,628,975,1042,816,1181,1176,1126,1069,862,1242,1062,1279,865,1054,1053,1237,1085,1206,1104,1110,1088,1160,896,729,905,1131,1117,1024,1084,988,1061,1003,990,989,970,1120,1135,1088,880,691,1035,915,1040,1145,1116,1153,1434,1597,1573,1392,1623,1716,1560,1607,1633,1345,1621,1539,1483,1568,1719,1562,1625,1619,1345,687,1354,1228,1216,747,331,733,1370,1133,1340,1124,1305,1111,1309,1389,1140,1334,1391,1320,1238,1392,1371,1361,1289,1220,1269,1398,1334,1289,1192,1320,1320,1412,1389,1339,1175,1351,1271,1175,1236,1207,1364,1326,1362,1328,1232,1179,1422,1371,1273,1277,790,608,621,642,957,1003,726,1288,1020,1127,1300,1311,1139,1326,709,1198,1230,1118,1090,1371,1166,1290,1343,1315,1176,1140,1246,1115,1207,948,1273,1362,1379,1240,837,1322,1304,1446,716,1238,1265,986,1091,1058,910,920,1236,1001,1283,1399,1345,1349,1508,1292,1437,906,361,478,1182,1343,788,1368,985,1142,1175,1319,1329,1413,1404,1201,1234,1002,1319,1396,1004,1194,1172,1367,1267,1279,1082,1333,1101,667,1298,963,1203,957,831,908,1088,1464,1314,1320,1302,1477,1527,1440,1016,1478,1021,989,1273,1172,1110,1109,1147,1486,1198,1099,1234,950,802,1071,1158,1115,1177,1122,919,1091,858,953,970,811,1108,900,841,1074,1174,972,1177,1382,1238,1015,1110,1375,1047,986,1137,1041,1083,1179,1289,997,854,974,967,1381,1247,1028,1080,1133,1252,1068,1023,1033,1168,1072,1045,1216,1247,950,1121,1250,1311,992,1275,1333,1116,1071,1070,891,965,1024,1345,1272,1415,1495,1173,1119,1315,947,1105,1240,1043,971,1102,1195,1141,965,986,1351,1306,1105,1188,1134,1429,1122,1036,1254,1247,575,1188,1062,1141,1135,1348,1003,863,849,704,1225,1172,1180,1302,1333,1346,1429,1232,721,1e3,941,1388,1414,1188,1175,1401,1231,1292,1348,1455,1291,1239,1092,897,953,1382,1445,1422,1438,1273,1305,1091,1159,1091,982,1292,1337,1398,1324,1278,1181,1049,1297,1087,1253,1347,1152,1079,1059,1280,1179,1197,1162,1167,1298,1463,1174,1046,1213,1106,1102,1146,1201,1303,1051,671,721,794,1102,1055,1401,1365,1117,1108,1127,1196,1287,1028,1134,928,1304,1517,1217,1445,1280,1277,1272,1253,1367,1132,1445,1583,1198,801,1334,1259,1201,1449,1219,1291,1475,1406,1275,911,1147,1124,1224,1479,1258,999,1308,1262,1457,980,1172,932,1022,955,973,1106,1147,960,1022,1107,928,1109,982,1155,954,1199,1061,1394,1001,923,919,1228,1136,1089,997,1047,780,1110,1138,908,876,1185,1170,1155,643,912,1115,966,995,909,1136,1189,1110,1003,901,826,1122,1072,819,1141,1157,1022,751,1076,1100,898,1230,925,687,1162,1057,1170,1452,1385,1198,1139,1579,1077,886,1053,758,1190,1270,1450,1354,1263,1180,804,1122,1131,968,1159,739,1003,1097,1049,1078,962,1026,1283,872,998,1341,1248,1306,1014,1025,1130,1107,697,1133,1024,1269,951,1072,1055,1118,991,1282,1436,1191,1308,1242,1158,1088,1091,777,1162,785,1030,1007,1315,1269,1214,1096,1253,836,1060,1209,1009,1213,1078,1034,769,1026,1162,1182,1180,1162,1100,789,1474,1468,1423,1333,1205,811,1204,1295,1201,925,1298,955,916,1180,1160,1213,1134,1318,1185,1258,1099,1228,1392,1119,1295,1232,1331,1260,1169,1038,1149,1199,1281,1173,1263,1133,1127,1240,1188,1118,992,1092,1325,1259,1408,1264,1345,1383,1130,1009,1165,1200,1311,1121,1118,1190,1161,1439,1063,1044],"successes":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]};compressedData["data"]=byteArray;assert(typeof Module["LZ4"]==="object","LZ4 not present - was your app build with -s LZ4=1 ?");Module["LZ4"].loadPackage({"metadata":metadata,"compressedData":compressedData},true);Module["removeRunDependency"]("datafile_build/pyodide.asm.data")}Module["addRunDependency"]("datafile_build/pyodide.asm.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":"/lib/python3.10/__future__.py","start":0,"end":5155},{"filename":"/lib/python3.10/__phello__.foo.py","start":5155,"end":5219},{"filename":"/lib/python3.10/_aix_support.py","start":5219,"end":8489},{"filename":"/lib/python3.10/_bootsubprocess.py","start":8489,"end":11164},{"filename":"/lib/python3.10/_collections_abc.py","start":11164,"end":43113},{"filename":"/lib/python3.10/_compat_pickle.py","start":43113,"end":51862},{"filename":"/lib/python3.10/_compression.py","start":51862,"end":57543},{"filename":"/lib/python3.10/_markupbase.py","start":57543,"end":72196},{"filename":"/lib/python3.10/_py_abc.py","start":72196,"end":78385},{"filename":"/lib/python3.10/_pydecimal.py","start":78385,"end":307061},{"filename":"/lib/python3.10/_pyio.py","start":307061,"end":401624},{"filename":"/lib/python3.10/_sitebuiltins.py","start":401624,"end":404752},{"filename":"/lib/python3.10/_strptime.py","start":404752,"end":430029},{"filename":"/lib/python3.10/_threading_local.py","start":430029,"end":437249},{"filename":"/lib/python3.10/_weakrefset.py","start":437249,"end":443172},{"filename":"/lib/python3.10/abc.py","start":443172,"end":449694},{"filename":"/lib/python3.10/aifc.py","start":449694,"end":482299},{"filename":"/lib/python3.10/antigravity.py","start":482299,"end":482799},{"filename":"/lib/python3.10/argparse.py","start":482799,"end":580783},{"filename":"/lib/python3.10/ast.py","start":580783,"end":640355},{"filename":"/lib/python3.10/asynchat.py","start":640355,"end":651840},{"filename":"/lib/python3.10/asyncore.py","start":651840,"end":672073},{"filename":"/lib/python3.10/base64.py","start":672073,"end":692920},{"filename":"/lib/python3.10/bdb.py","start":692920,"end":725147},{"filename":"/lib/python3.10/binhex.py","start":725147,"end":739931},{"filename":"/lib/python3.10/bisect.py","start":739931,"end":743066},{"filename":"/lib/python3.10/bz2.py","start":743066,"end":754913},{"filename":"/lib/python3.10/cProfile.py","start":754913,"end":761248},{"filename":"/lib/python3.10/calendar.py","start":761248,"end":785723},{"filename":"/lib/python3.10/cgi.py","start":785723,"end":819822},{"filename":"/lib/python3.10/cgitb.py","start":819822,"end":831918},{"filename":"/lib/python3.10/chunk.py","start":831918,"end":837353},{"filename":"/lib/python3.10/cmd.py","start":837353,"end":852213},{"filename":"/lib/python3.10/code.py","start":852213,"end":862835},{"filename":"/lib/python3.10/codecs.py","start":862835,"end":899507},{"filename":"/lib/python3.10/codeop.py","start":899507,"end":906075},{"filename":"/lib/python3.10/colorsys.py","start":906075,"end":910092},{"filename":"/lib/python3.10/compileall.py","start":910092,"end":930335},{"filename":"/lib/python3.10/configparser.py","start":930335,"end":984965},{"filename":"/lib/python3.10/contextlib.py","start":984965,"end":1010847},{"filename":"/lib/python3.10/contextvars.py","start":1010847,"end":1010976},{"filename":"/lib/python3.10/copy.py","start":1010976,"end":1019654},{"filename":"/lib/python3.10/copyreg.py","start":1019654,"end":1027080},{"filename":"/lib/python3.10/crypt.py","start":1027080,"end":1030899},{"filename":"/lib/python3.10/csv.py","start":1030899,"end":1046929},{"filename":"/lib/python3.10/dataclasses.py","start":1046929,"end":1103316},{"filename":"/lib/python3.10/datetime.py","start":1103316,"end":1191375},{"filename":"/lib/python3.10/decimal.py","start":1191375,"end":1191695},{"filename":"/lib/python3.10/difflib.py","start":1191695,"end":1275002},{"filename":"/lib/python3.10/dis.py","start":1275002,"end":1295022},{"filename":"/lib/python3.10/doctest.py","start":1295022,"end":1399813},{"filename":"/lib/python3.10/enum.py","start":1399813,"end":1439644},{"filename":"/lib/python3.10/filecmp.py","start":1439644,"end":1449822},{"filename":"/lib/python3.10/fileinput.py","start":1449822,"end":1466062},{"filename":"/lib/python3.10/fnmatch.py","start":1466062,"end":1472066},{"filename":"/lib/python3.10/fractions.py","start":1472066,"end":1500308},{"filename":"/lib/python3.10/ftplib.py","start":1500308,"end":1535804},{"filename":"/lib/python3.10/functools.py","start":1535804,"end":1573880},{"filename":"/lib/python3.10/genericpath.py","start":1573880,"end":1578855},{"filename":"/lib/python3.10/getopt.py","start":1578855,"end":1586344},{"filename":"/lib/python3.10/getpass.py","start":1586344,"end":1592334},{"filename":"/lib/python3.10/gettext.py","start":1592334,"end":1619600},{"filename":"/lib/python3.10/glob.py","start":1619600,"end":1627488},{"filename":"/lib/python3.10/graphlib.py","start":1627488,"end":1637061},{"filename":"/lib/python3.10/gzip.py","start":1637061,"end":1658910},{"filename":"/lib/python3.10/hashlib.py","start":1658910,"end":1669139},{"filename":"/lib/python3.10/heapq.py","start":1669139,"end":1692016},{"filename":"/lib/python3.10/hmac.py","start":1692016,"end":1699733},{"filename":"/lib/python3.10/imaplib.py","start":1699733,"end":1754599},{"filename":"/lib/python3.10/imghdr.py","start":1754599,"end":1758407},{"filename":"/lib/python3.10/imp.py","start":1758407,"end":1768998},{"filename":"/lib/python3.10/inspect.py","start":1768998,"end":1892738},{"filename":"/lib/python3.10/io.py","start":1892738,"end":1896934},{"filename":"/lib/python3.10/ipaddress.py","start":1896934,"end":1971720},{"filename":"/lib/python3.10/keyword.py","start":1971720,"end":1972781},{"filename":"/lib/python3.10/linecache.py","start":1972781,"end":1978436},{"filename":"/lib/python3.10/locale.py","start":1978436,"end":2056560},{"filename":"/lib/python3.10/lzma.py","start":2056560,"end":2069837},{"filename":"/lib/python3.10/mailbox.py","start":2069837,"end":2148631},{"filename":"/lib/python3.10/mailcap.py","start":2148631,"end":2156784},{"filename":"/lib/python3.10/mimetypes.py","start":2156784,"end":2179408},{"filename":"/lib/python3.10/modulefinder.py","start":2179408,"end":2203809},{"filename":"/lib/python3.10/netrc.py","start":2203809,"end":2209556},{"filename":"/lib/python3.10/nntplib.py","start":2209556,"end":2250579},{"filename":"/lib/python3.10/ntpath.py","start":2250579,"end":2278985},{"filename":"/lib/python3.10/nturl2path.py","start":2278985,"end":2281872},{"filename":"/lib/python3.10/numbers.py","start":2281872,"end":2292210},{"filename":"/lib/python3.10/opcode.py","start":2292210,"end":2298112},{"filename":"/lib/python3.10/operator.py","start":2298112,"end":2308863},{"filename":"/lib/python3.10/optparse.py","start":2308863,"end":2369232},{"filename":"/lib/python3.10/os.py","start":2369232,"end":2408746},{"filename":"/lib/python3.10/pathlib.py","start":2408746,"end":2458272},{"filename":"/lib/python3.10/pdb.py","start":2458272,"end":2521373},{"filename":"/lib/python3.10/pickle.py","start":2521373,"end":2586319},{"filename":"/lib/python3.10/pickletools.py","start":2586319,"end":2679805},{"filename":"/lib/python3.10/pipes.py","start":2679805,"end":2688719},{"filename":"/lib/python3.10/pkgutil.py","start":2688719,"end":2713295},{"filename":"/lib/python3.10/platform.py","start":2713295,"end":2755243},{"filename":"/lib/python3.10/plistlib.py","start":2755243,"end":2783491},{"filename":"/lib/python3.10/poplib.py","start":2783491,"end":2798689},{"filename":"/lib/python3.10/posixpath.py","start":2798689,"end":2814911},{"filename":"/lib/python3.10/pprint.py","start":2814911,"end":2839355},{"filename":"/lib/python3.10/profile.py","start":2839355,"end":2862226},{"filename":"/lib/python3.10/pstats.py","start":2862226,"end":2891552},{"filename":"/lib/python3.10/pty.py","start":2891552,"end":2896765},{"filename":"/lib/python3.10/py_compile.py","start":2896765,"end":2904602},{"filename":"/lib/python3.10/pyclbr.py","start":2904602,"end":2915998},{"filename":"/lib/python3.10/pydoc.py","start":2915998,"end":3025532},{"filename":"/lib/python3.10/queue.py","start":3025532,"end":3037015},{"filename":"/lib/python3.10/quopri.py","start":3037015,"end":3044283},{"filename":"/lib/python3.10/random.py","start":3044283,"end":3077504},{"filename":"/lib/python3.10/re.py","start":3077504,"end":3093364},{"filename":"/lib/python3.10/reprlib.py","start":3093364,"end":3098631},{"filename":"/lib/python3.10/rlcompleter.py","start":3098631,"end":3106448},{"filename":"/lib/python3.10/runpy.py","start":3106448,"end":3118686},{"filename":"/lib/python3.10/sched.py","start":3118686,"end":3125037},{"filename":"/lib/python3.10/secrets.py","start":3125037,"end":3127073},{"filename":"/lib/python3.10/selectors.py","start":3127073,"end":3146609},{"filename":"/lib/python3.10/shelve.py","start":3146609,"end":3155169},{"filename":"/lib/python3.10/shlex.py","start":3155169,"end":3168670},{"filename":"/lib/python3.10/shutil.py","start":3168670,"end":3220918},{"filename":"/lib/python3.10/signal.py","start":3220918,"end":3223356},{"filename":"/lib/python3.10/site.py","start":3223356,"end":3245943},{"filename":"/lib/python3.10/smtpd.py","start":3245943,"end":3281066},{"filename":"/lib/python3.10/smtplib.py","start":3281066,"end":3326484},{"filename":"/lib/python3.10/sndhdr.py","start":3326484,"end":3333583},{"filename":"/lib/python3.10/socket.py","start":3333583,"end":3370316},{"filename":"/lib/python3.10/sre_parse.py","start":3370316,"end":3410546},{"filename":"/lib/python3.10/socketserver.py","start":3410546,"end":3437842},{"filename":"/lib/python3.10/sre_compile.py","start":3437842,"end":3464537},{"filename":"/lib/python3.10/sre_constants.py","start":3464537,"end":3471691},{"filename":"/lib/python3.10/ssl.py","start":3471691,"end":3523807},{"filename":"/lib/python3.10/stat.py","start":3523807,"end":3529292},{"filename":"/lib/python3.10/statistics.py","start":3529292,"end":3572357},{"filename":"/lib/python3.10/string.py","start":3572357,"end":3582923},{"filename":"/lib/python3.10/stringprep.py","start":3582923,"end":3595840},{"filename":"/lib/python3.10/struct.py","start":3595840,"end":3596097},{"filename":"/lib/python3.10/subprocess.py","start":3596097,"end":3679831},{"filename":"/lib/python3.10/sunau.py","start":3679831,"end":3697989},{"filename":"/lib/python3.10/symtable.py","start":3697989,"end":3708187},{"filename":"/lib/python3.10/sysconfig.py","start":3708187,"end":3735796},{"filename":"/lib/python3.10/tabnanny.py","start":3735796,"end":3747204},{"filename":"/lib/python3.10/tarfile.py","start":3747204,"end":3842378},{"filename":"/lib/python3.10/telnetlib.py","start":3842378,"end":3865632},{"filename":"/lib/python3.10/tempfile.py","start":3865632,"end":3894089},{"filename":"/lib/python3.10/textwrap.py","start":3894089,"end":3913861},{"filename":"/lib/python3.10/this.py","start":3913861,"end":3914864},{"filename":"/lib/python3.10/threading.py","start":3914864,"end":3971764},{"filename":"/lib/python3.10/timeit.py","start":3971764,"end":3985259},{"filename":"/lib/python3.10/token.py","start":3985259,"end":3987645},{"filename":"/lib/python3.10/tokenize.py","start":3987645,"end":4013566},{"filename":"/lib/python3.10/trace.py","start":4013566,"end":4042761},{"filename":"/lib/python3.10/traceback.py","start":4042761,"end":4068979},{"filename":"/lib/python3.10/tracemalloc.py","start":4068979,"end":4087026},{"filename":"/lib/python3.10/tty.py","start":4087026,"end":4087905},{"filename":"/lib/python3.10/types.py","start":4087905,"end":4098022},{"filename":"/lib/python3.10/typing.py","start":4098022,"end":4189299},{"filename":"/lib/python3.10/uu.py","start":4189299,"end":4196258},{"filename":"/lib/python3.10/uuid.py","start":4196258,"end":4223582},{"filename":"/lib/python3.10/warnings.py","start":4223582,"end":4243270},{"filename":"/lib/python3.10/wave.py","start":4243270,"end":4261274},{"filename":"/lib/python3.10/weakref.py","start":4261274,"end":4282834},{"filename":"/lib/python3.10/xdrlib.py","start":4282834,"end":4288747},{"filename":"/lib/python3.10/zipapp.py","start":4288747,"end":4296282},{"filename":"/lib/python3.10/zipfile.py","start":4296282,"end":4384813},{"filename":"/lib/python3.10/zipimport.py","start":4384813,"end":4414954},{"filename":"/lib/python3.10/LICENSE.txt","start":4414954,"end":4428885},{"filename":"/lib/python3.10/_sysconfigdata__emscripten_wasm32-emscripten.py","start":4428885,"end":4457667},{"filename":"/lib/python3.10/asyncio/__init__.py","start":4457667,"end":4458775},{"filename":"/lib/python3.10/asyncio/__main__.py","start":4458775,"end":4462118},{"filename":"/lib/python3.10/asyncio/base_events.py","start":4462118,"end":4535569},{"filename":"/lib/python3.10/asyncio/base_futures.py","start":4535569,"end":4538143},{"filename":"/lib/python3.10/asyncio/base_subprocess.py","start":4538143,"end":4546986},{"filename":"/lib/python3.10/asyncio/base_tasks.py","start":4546986,"end":4549453},{"filename":"/lib/python3.10/asyncio/constants.py","start":4549453,"end":4550341},{"filename":"/lib/python3.10/asyncio/coroutines.py","start":4550341,"end":4559138},{"filename":"/lib/python3.10/asyncio/events.py","start":4559138,"end":4586362},{"filename":"/lib/python3.10/asyncio/exceptions.py","start":4586362,"end":4587995},{"filename":"/lib/python3.10/asyncio/format_helpers.py","start":4587995,"end":4590399},{"filename":"/lib/python3.10/asyncio/futures.py","start":4590399,"end":4604413},{"filename":"/lib/python3.10/asyncio/locks.py","start":4604413,"end":4618e3},{"filename":"/lib/python3.10/asyncio/log.py","start":4618e3,"end":4618124},{"filename":"/lib/python3.10/asyncio/mixins.py","start":4618124,"end":4618927},{"filename":"/lib/python3.10/asyncio/proactor_events.py","start":4618927,"end":4651183},{"filename":"/lib/python3.10/asyncio/protocols.py","start":4651183,"end":4658319},{"filename":"/lib/python3.10/asyncio/queues.py","start":4658319,"end":4666329},{"filename":"/lib/python3.10/asyncio/runners.py","start":4666329,"end":4668433},{"filename":"/lib/python3.10/asyncio/selector_events.py","start":4668433,"end":4707935},{"filename":"/lib/python3.10/asyncio/sslproto.py","start":4707935,"end":4735119},{"filename":"/lib/python3.10/asyncio/staggered.py","start":4735119,"end":4741111},{"filename":"/lib/python3.10/asyncio/streams.py","start":4741111,"end":4766883},{"filename":"/lib/python3.10/asyncio/subprocess.py","start":4766883,"end":4774288},{"filename":"/lib/python3.10/asyncio/tasks.py","start":4774288,"end":4806128},{"filename":"/lib/python3.10/asyncio/threads.py","start":4806128,"end":4806918},{"filename":"/lib/python3.10/asyncio/transports.py","start":4806918,"end":4817404},{"filename":"/lib/python3.10/asyncio/trsock.py","start":4817404,"end":4823280},{"filename":"/lib/python3.10/asyncio/unix_events.py","start":4823280,"end":4874880},{"filename":"/lib/python3.10/asyncio/windows_events.py","start":4874880,"end":4907884},{"filename":"/lib/python3.10/asyncio/windows_utils.py","start":4907884,"end":4912944},{"filename":"/lib/python3.10/collections/__init__.py","start":4912944,"end":4964172},{"filename":"/lib/python3.10/collections/abc.py","start":4964172,"end":4964291},{"filename":"/lib/python3.10/concurrent/__init__.py","start":4964291,"end":4964329},{"filename":"/lib/python3.10/concurrent/futures/__init__.py","start":4964329,"end":4965883},{"filename":"/lib/python3.10/concurrent/futures/_base.py","start":4965883,"end":4988460},{"filename":"/lib/python3.10/concurrent/futures/process.py","start":4988460,"end":5018667},{"filename":"/lib/python3.10/concurrent/futures/thread.py","start":5018667,"end":5027438},{"filename":"/lib/python3.10/ctypes/__init__.py","start":5027438,"end":5045426},{"filename":"/lib/python3.10/ctypes/_aix.py","start":5045426,"end":5058001},{"filename":"/lib/python3.10/ctypes/_endian.py","start":5058001,"end":5060001},{"filename":"/lib/python3.10/ctypes/util.py","start":5060001,"end":5073880},{"filename":"/lib/python3.10/ctypes/wintypes.py","start":5073880,"end":5079508},{"filename":"/lib/python3.10/ctypes/macholib/README.ctypes","start":5079508,"end":5079804},{"filename":"/lib/python3.10/ctypes/macholib/__init__.py","start":5079804,"end":5079958},{"filename":"/lib/python3.10/ctypes/macholib/dyld.py","start":5079958,"end":5085241},{"filename":"/lib/python3.10/ctypes/macholib/dylib.py","start":5085241,"end":5087069},{"filename":"/lib/python3.10/ctypes/macholib/fetch_macholib","start":5087069,"end":5087153},{"filename":"/lib/python3.10/ctypes/macholib/fetch_macholib.bat","start":5087153,"end":5087228},{"filename":"/lib/python3.10/ctypes/macholib/framework.py","start":5087228,"end":5089429},{"filename":"/lib/python3.10/tzdata-2022.1.dist-info/LICENSE","start":5089429,"end":5090021},{"filename":"/lib/python3.10/tzdata-2022.1.dist-info/LICENSE_APACHE","start":5090021,"end":5101378},{"filename":"/lib/python3.10/tzdata-2022.1.dist-info/METADATA","start":5101378,"end":5102791},{"filename":"/lib/python3.10/tzdata-2022.1.dist-info/WHEEL","start":5102791,"end":5102901},{"filename":"/lib/python3.10/tzdata-2022.1.dist-info/top_level.txt","start":5102901,"end":5102908},{"filename":"/lib/python3.10/tzdata-2022.1.dist-info/RECORD","start":5102908,"end":5159434},{"filename":"/lib/python3.10/tzdata-2022.1.dist-info/INSTALLER","start":5159434,"end":5159438},{"filename":"/lib/python3.10/tzdata-2022.1.dist-info/REQUESTED","start":5159438,"end":5159438},{"filename":"/lib/python3.10/email/__init__.py","start":5159438,"end":5161204},{"filename":"/lib/python3.10/email/_encoded_words.py","start":5161204,"end":5169728},{"filename":"/lib/python3.10/email/_header_value_parser.py","start":5169728,"end":5276687},{"filename":"/lib/python3.10/email/_parseaddr.py","start":5276687,"end":5294414},{"filename":"/lib/python3.10/email/_policybase.py","start":5294414,"end":5309487},{"filename":"/lib/python3.10/email/architecture.rst","start":5309487,"end":5319048},{"filename":"/lib/python3.10/email/base64mime.py","start":5319048,"end":5322607},{"filename":"/lib/python3.10/email/charset.py","start":5322607,"end":5339735},{"filename":"/lib/python3.10/email/contentmanager.py","start":5339735,"end":5350290},{"filename":"/lib/python3.10/email/encoders.py","start":5350290,"end":5352076},{"filename":"/lib/python3.10/email/errors.py","start":5352076,"end":5355811},{"filename":"/lib/python3.10/email/feedparser.py","start":5355811,"end":5378591},{"filename":"/lib/python3.10/email/generator.py","start":5378591,"end":5398787},{"filename":"/lib/python3.10/email/header.py","start":5398787,"end":5422889},{"filename":"/lib/python3.10/email/headerregistry.py","start":5422889,"end":5443702},{"filename":"/lib/python3.10/email/iterators.py","start":5443702,"end":5445837},{"filename":"/lib/python3.10/email/message.py","start":5445837,"end":5492897},{"filename":"/lib/python3.10/email/parser.py","start":5492897,"end":5497938},{"filename":"/lib/python3.10/email/policy.py","start":5497938,"end":5508321},{"filename":"/lib/python3.10/email/quoprimime.py","start":5508321,"end":5518179},{"filename":"/lib/python3.10/email/utils.py","start":5518179,"end":5531601},{"filename":"/lib/python3.10/email/mime/__init__.py","start":5531601,"end":5531601},{"filename":"/lib/python3.10/email/mime/application.py","start":5531601,"end":5532922},{"filename":"/lib/python3.10/email/mime/audio.py","start":5532922,"end":5535661},{"filename":"/lib/python3.10/email/mime/base.py","start":5535661,"end":5536577},{"filename":"/lib/python3.10/email/mime/image.py","start":5536577,"end":5538406},{"filename":"/lib/python3.10/email/mime/message.py","start":5538406,"end":5539723},{"filename":"/lib/python3.10/email/mime/multipart.py","start":5539723,"end":5541344},{"filename":"/lib/python3.10/email/mime/nonmultipart.py","start":5541344,"end":5542035},{"filename":"/lib/python3.10/email/mime/text.py","start":5542035,"end":5543472},{"filename":"/lib/python3.10/encodings/__init__.py","start":5543472,"end":5549092},{"filename":"/lib/python3.10/encodings/aliases.py","start":5549092,"end":5564769},{"filename":"/lib/python3.10/encodings/ascii.py","start":5564769,"end":5566017},{"filename":"/lib/python3.10/encodings/base64_codec.py","start":5566017,"end":5567550},{"filename":"/lib/python3.10/encodings/big5.py","start":5567550,"end":5568569},{"filename":"/lib/python3.10/encodings/big5hkscs.py","start":5568569,"end":5569608},{"filename":"/lib/python3.10/encodings/bz2_codec.py","start":5569608,"end":5571857},{"filename":"/lib/python3.10/encodings/charmap.py","start":5571857,"end":5573941},{"filename":"/lib/python3.10/encodings/cp037.py","start":5573941,"end":5587062},{"filename":"/lib/python3.10/encodings/cp1006.py","start":5587062,"end":5600630},{"filename":"/lib/python3.10/encodings/cp1026.py","start":5600630,"end":5613743},{"filename":"/lib/python3.10/encodings/cp1125.py","start":5613743,"end":5648340},{"filename":"/lib/python3.10/encodings/cp1140.py","start":5648340,"end":5661445},{"filename":"/lib/python3.10/encodings/cp1250.py","start":5661445,"end":5675131},{"filename":"/lib/python3.10/encodings/cp1251.py","start":5675131,"end":5688492},{"filename":"/lib/python3.10/encodings/cp1252.py","start":5688492,"end":5702003},{"filename":"/lib/python3.10/encodings/cp1253.py","start":5702003,"end":5715097},{"filename":"/lib/python3.10/encodings/cp1254.py","start":5715097,"end":5728599},{"filename":"/lib/python3.10/encodings/cp1255.py","start":5728599,"end":5741065},{"filename":"/lib/python3.10/encodings/cp1256.py","start":5741065,"end":5753879},{"filename":"/lib/python3.10/encodings/cp1257.py","start":5753879,"end":5767253},{"filename":"/lib/python3.10/encodings/cp1258.py","start":5767253,"end":5780617},{"filename":"/lib/python3.10/encodings/cp273.py","start":5780617,"end":5794749},{"filename":"/lib/python3.10/encodings/cp424.py","start":5794749,"end":5806804},{"filename":"/lib/python3.10/encodings/cp437.py","start":5806804,"end":5841368},{"filename":"/lib/python3.10/encodings/cp500.py","start":5841368,"end":5854489},{"filename":"/lib/python3.10/encodings/cp720.py","start":5854489,"end":5868175},{"filename":"/lib/python3.10/encodings/cp737.py","start":5868175,"end":5902856},{"filename":"/lib/python3.10/encodings/cp775.py","start":5902856,"end":5937332},{"filename":"/lib/python3.10/encodings/cp850.py","start":5937332,"end":5971437},{"filename":"/lib/python3.10/encodings/cp852.py","start":5971437,"end":6006439},{"filename":"/lib/python3.10/encodings/cp855.py","start":6006439,"end":6040289},{"filename":"/lib/python3.10/encodings/cp856.py","start":6040289,"end":6052712},{"filename":"/lib/python3.10/encodings/cp857.py","start":6052712,"end":6086620},{"filename":"/lib/python3.10/encodings/cp858.py","start":6086620,"end":6120635},{"filename":"/lib/python3.10/encodings/cp860.py","start":6120635,"end":6155316},{"filename":"/lib/python3.10/encodings/cp861.py","start":6155316,"end":6189949},{"filename":"/lib/python3.10/encodings/cp862.py","start":6189949,"end":6223319},{"filename":"/lib/python3.10/encodings/cp863.py","start":6223319,"end":6257571},{"filename":"/lib/python3.10/encodings/cp864.py","start":6257571,"end":6291234},{"filename":"/lib/python3.10/encodings/cp865.py","start":6291234,"end":6325852},{"filename":"/lib/python3.10/encodings/cp866.py","start":6325852,"end":6360248},{"filename":"/lib/python3.10/encodings/cp869.py","start":6360248,"end":6393213},{"filename":"/lib/python3.10/encodings/cp874.py","start":6393213,"end":6405808},{"filename":"/lib/python3.10/encodings/cp875.py","start":6405808,"end":6418662},{"filename":"/lib/python3.10/encodings/cp932.py","start":6418662,"end":6419685},{"filename":"/lib/python3.10/encodings/cp949.py","start":6419685,"end":6420708},{"filename":"/lib/python3.10/encodings/cp950.py","start":6420708,"end":6421731},{"filename":"/lib/python3.10/encodings/euc_jis_2004.py","start":6421731,"end":6422782},{"filename":"/lib/python3.10/encodings/euc_jisx0213.py","start":6422782,"end":6423833},{"filename":"/lib/python3.10/encodings/euc_jp.py","start":6423833,"end":6424860},{"filename":"/lib/python3.10/encodings/euc_kr.py","start":6424860,"end":6425887},{"filename":"/lib/python3.10/encodings/gb18030.py","start":6425887,"end":6426918},{"filename":"/lib/python3.10/encodings/gb2312.py","start":6426918,"end":6427945},{"filename":"/lib/python3.10/encodings/gbk.py","start":6427945,"end":6428960},{"filename":"/lib/python3.10/encodings/hex_codec.py","start":6428960,"end":6430468},{"filename":"/lib/python3.10/encodings/hp_roman8.py","start":6430468,"end":6443943},{"filename":"/lib/python3.10/encodings/hz.py","start":6443943,"end":6444954},{"filename":"/lib/python3.10/encodings/idna.py","start":6444954,"end":6454124},{"filename":"/lib/python3.10/encodings/iso2022_jp.py","start":6454124,"end":6455177},{"filename":"/lib/python3.10/encodings/iso2022_jp_1.py","start":6455177,"end":6456238},{"filename":"/lib/python3.10/encodings/iso2022_jp_2.py","start":6456238,"end":6457299},{"filename":"/lib/python3.10/encodings/iso2022_jp_2004.py","start":6457299,"end":6458372},{"filename":"/lib/python3.10/encodings/iso2022_jp_3.py","start":6458372,"end":6459433},{"filename":"/lib/python3.10/encodings/iso2022_jp_ext.py","start":6459433,"end":6460502},{"filename":"/lib/python3.10/encodings/iso2022_kr.py","start":6460502,"end":6461555},{"filename":"/lib/python3.10/encodings/iso8859_1.py","start":6461555,"end":6474731},{"filename":"/lib/python3.10/encodings/iso8859_10.py","start":6474731,"end":6488320},{"filename":"/lib/python3.10/encodings/iso8859_11.py","start":6488320,"end":6500655},{"filename":"/lib/python3.10/encodings/iso8859_13.py","start":6500655,"end":6513926},{"filename":"/lib/python3.10/encodings/iso8859_14.py","start":6513926,"end":6527578},{"filename":"/lib/python3.10/encodings/iso8859_15.py","start":6527578,"end":6540790},{"filename":"/lib/python3.10/encodings/iso8859_16.py","start":6540790,"end":6554347},{"filename":"/lib/python3.10/encodings/iso8859_2.py","start":6554347,"end":6567751},{"filename":"/lib/python3.10/encodings/iso8859_3.py","start":6567751,"end":6580840},{"filename":"/lib/python3.10/encodings/iso8859_4.py","start":6580840,"end":6594216},{"filename":"/lib/python3.10/encodings/iso8859_5.py","start":6594216,"end":6607231},{"filename":"/lib/python3.10/encodings/iso8859_6.py","start":6607231,"end":6618064},{"filename":"/lib/python3.10/encodings/iso8859_7.py","start":6618064,"end":6630908},{"filename":"/lib/python3.10/encodings/iso8859_8.py","start":6630908,"end":6641944},{"filename":"/lib/python3.10/encodings/iso8859_9.py","start":6641944,"end":6655100},{"filename":"/lib/python3.10/encodings/johab.py","start":6655100,"end":6656123},{"filename":"/lib/python3.10/encodings/koi8_r.py","start":6656123,"end":6669902},{"filename":"/lib/python3.10/encodings/koi8_t.py","start":6669902,"end":6683095},{"filename":"/lib/python3.10/encodings/koi8_u.py","start":6683095,"end":6696857},{"filename":"/lib/python3.10/encodings/kz1048.py","start":6696857,"end":6710580},{"filename":"/lib/python3.10/encodings/latin_1.py","start":6710580,"end":6711844},{"filename":"/lib/python3.10/encodings/mac_arabic.py","start":6711844,"end":6748311},{"filename":"/lib/python3.10/encodings/mac_croatian.py","start":6748311,"end":6761944},{"filename":"/lib/python3.10/encodings/mac_cyrillic.py","start":6761944,"end":6775398},{"filename":"/lib/python3.10/encodings/mac_farsi.py","start":6775398,"end":6790568},{"filename":"/lib/python3.10/encodings/mac_greek.py","start":6790568,"end":6804289},{"filename":"/lib/python3.10/encodings/mac_iceland.py","start":6804289,"end":6817787},{"filename":"/lib/python3.10/encodings/mac_latin2.py","start":6817787,"end":6831905},{"filename":"/lib/python3.10/encodings/mac_roman.py","start":6831905,"end":6845385},{"filename":"/lib/python3.10/encodings/mac_romanian.py","start":6845385,"end":6859046},{"filename":"/lib/python3.10/encodings/mac_turkish.py","start":6859046,"end":6872559},{"filename":"/lib/python3.10/encodings/mbcs.py","start":6872559,"end":6873770},{"filename":"/lib/python3.10/encodings/oem.py","start":6873770,"end":6874789},{"filename":"/lib/python3.10/encodings/palmos.py","start":6874789,"end":6888308},{"filename":"/lib/python3.10/encodings/ptcp154.py","start":6888308,"end":6902323},{"filename":"/lib/python3.10/encodings/punycode.py","start":6902323,"end":6909206},{"filename":"/lib/python3.10/encodings/quopri_codec.py","start":6909206,"end":6910731},{"filename":"/lib/python3.10/encodings/raw_unicode_escape.py","start":6910731,"end":6912063},{"filename":"/lib/python3.10/encodings/rot_13.py","start":6912063,"end":6914511},{"filename":"/lib/python3.10/encodings/shift_jis.py","start":6914511,"end":6915550},{"filename":"/lib/python3.10/encodings/shift_jis_2004.py","start":6915550,"end":6916609},{"filename":"/lib/python3.10/encodings/shift_jisx0213.py","start":6916609,"end":6917668},{"filename":"/lib/python3.10/encodings/tis_620.py","start":6917668,"end":6929968},{"filename":"/lib/python3.10/encodings/undefined.py","start":6929968,"end":6931267},{"filename":"/lib/python3.10/encodings/unicode_escape.py","start":6931267,"end":6932571},{"filename":"/lib/python3.10/encodings/utf_16.py","start":6932571,"end":6937807},{"filename":"/lib/python3.10/encodings/utf_16_be.py","start":6937807,"end":6938844},{"filename":"/lib/python3.10/encodings/utf_16_le.py","start":6938844,"end":6939881},{"filename":"/lib/python3.10/encodings/utf_32.py","start":6939881,"end":6945010},{"filename":"/lib/python3.10/encodings/utf_32_be.py","start":6945010,"end":6945940},{"filename":"/lib/python3.10/encodings/utf_32_le.py","start":6945940,"end":6946870},{"filename":"/lib/python3.10/encodings/utf_7.py","start":6946870,"end":6947816},{"filename":"/lib/python3.10/encodings/utf_8.py","start":6947816,"end":6948821},{"filename":"/lib/python3.10/encodings/utf_8_sig.py","start":6948821,"end":6952954},{"filename":"/lib/python3.10/encodings/uu_codec.py","start":6952954,"end":6955805},{"filename":"/lib/python3.10/encodings/zlib_codec.py","start":6955805,"end":6958009},{"filename":"/lib/python3.10/html/__init__.py","start":6958009,"end":6962765},{"filename":"/lib/python3.10/html/entities.py","start":6962765,"end":7038080},{"filename":"/lib/python3.10/html/parser.py","start":7038080,"end":7055472},{"filename":"/lib/python3.10/http/__init__.py","start":7055472,"end":7062205},{"filename":"/lib/python3.10/http/client.py","start":7062205,"end":7118923},{"filename":"/lib/python3.10/http/cookiejar.py","start":7118923,"end":7196330},{"filename":"/lib/python3.10/http/cookies.py","start":7196330,"end":7216812},{"filename":"/lib/python3.10/http/server.py","start":7216812,"end":7264083},{"filename":"/lib/python3.10/importlib/__init__.py","start":7264083,"end":7270172},{"filename":"/lib/python3.10/importlib/_abc.py","start":7270172,"end":7272024},{"filename":"/lib/python3.10/importlib/_adapters.py","start":7272024,"end":7273932},{"filename":"/lib/python3.10/importlib/_bootstrap.py","start":7273932,"end":7315399},{"filename":"/lib/python3.10/importlib/_bootstrap_external.py","start":7315399,"end":7379871},{"filename":"/lib/python3.10/importlib/_common.py","start":7379871,"end":7382945},{"filename":"/lib/python3.10/importlib/abc.py","start":7382945,"end":7397366},{"filename":"/lib/python3.10/importlib/machinery.py","start":7397366,"end":7398197},{"filename":"/lib/python3.10/importlib/readers.py","start":7398197,"end":7401784},{"filename":"/lib/python3.10/importlib/resources.py","start":7401784,"end":7407489},{"filename":"/lib/python3.10/importlib/util.py","start":7407489,"end":7418976},{"filename":"/lib/python3.10/importlib/metadata/__init__.py","start":7418976,"end":7448449},{"filename":"/lib/python3.10/importlib/metadata/_adapters.py","start":7448449,"end":7450311},{"filename":"/lib/python3.10/importlib/metadata/_collections.py","start":7450311,"end":7451054},{"filename":"/lib/python3.10/importlib/metadata/_functools.py","start":7451054,"end":7453555},{"filename":"/lib/python3.10/importlib/metadata/_itertools.py","start":7453555,"end":7454162},{"filename":"/lib/python3.10/importlib/metadata/_meta.py","start":7454162,"end":7455292},{"filename":"/lib/python3.10/importlib/metadata/_text.py","start":7455292,"end":7457490},{"filename":"/lib/python3.10/json/__init__.py","start":7457490,"end":7471509},{"filename":"/lib/python3.10/json/decoder.py","start":7471509,"end":7483981},{"filename":"/lib/python3.10/json/encoder.py","start":7483981,"end":7500054},{"filename":"/lib/python3.10/json/scanner.py","start":7500054,"end":7502479},{"filename":"/lib/python3.10/json/tool.py","start":7502479,"end":7505818},{"filename":"/lib/python3.10/logging/__init__.py","start":7505818,"end":7586023},{"filename":"/lib/python3.10/logging/config.py","start":7586023,"end":7622486},{"filename":"/lib/python3.10/logging/handlers.py","start":7622486,"end":7683115},{"filename":"/lib/python3.10/multiprocessing/__init__.py","start":7683115,"end":7684031},{"filename":"/lib/python3.10/multiprocessing/connection.py","start":7684031,"end":7716055},{"filename":"/lib/python3.10/multiprocessing/context.py","start":7716055,"end":7727312},{"filename":"/lib/python3.10/multiprocessing/forkserver.py","start":7727312,"end":7739454},{"filename":"/lib/python3.10/multiprocessing/heap.py","start":7739454,"end":7751080},{"filename":"/lib/python3.10/multiprocessing/managers.py","start":7751080,"end":7798582},{"filename":"/lib/python3.10/multiprocessing/pool.py","start":7798582,"end":7831137},{"filename":"/lib/python3.10/multiprocessing/popen_fork.py","start":7831137,"end":7833514},{"filename":"/lib/python3.10/multiprocessing/popen_forkserver.py","start":7833514,"end":7835744},{"filename":"/lib/python3.10/multiprocessing/popen_spawn_posix.py","start":7835744,"end":7837773},{"filename":"/lib/python3.10/multiprocessing/popen_spawn_win32.py","start":7837773,"end":7841784},{"filename":"/lib/python3.10/multiprocessing/process.py","start":7841784,"end":7853784},{"filename":"/lib/python3.10/multiprocessing/queues.py","start":7853784,"end":7865777},{"filename":"/lib/python3.10/multiprocessing/reduction.py","start":7865777,"end":7875289},{"filename":"/lib/python3.10/multiprocessing/resource_sharer.py","start":7875289,"end":7880421},{"filename":"/lib/python3.10/multiprocessing/resource_tracker.py","start":7880421,"end":7889396},{"filename":"/lib/python3.10/multiprocessing/shared_memory.py","start":7889396,"end":7907792},{"filename":"/lib/python3.10/multiprocessing/sharedctypes.py","start":7907792,"end":7914098},{"filename":"/lib/python3.10/multiprocessing/spawn.py","start":7914098,"end":7923394},{"filename":"/lib/python3.10/multiprocessing/synchronize.py","start":7923394,"end":7935004},{"filename":"/lib/python3.10/multiprocessing/util.py","start":7935004,"end":7949027},{"filename":"/lib/python3.10/multiprocessing/dummy/__init__.py","start":7949027,"end":7952088},{"filename":"/lib/python3.10/multiprocessing/dummy/connection.py","start":7952088,"end":7953686},{"filename":"/lib/python3.10/pydoc_data/__init__.py","start":7953686,"end":7953686},{"filename":"/lib/python3.10/pydoc_data/_pydoc.css","start":7953686,"end":7953782},{"filename":"/lib/python3.10/pydoc_data/topics.py","start":7953782,"end":8697388},{"filename":"/lib/python3.10/site-packages/README.txt","start":8697388,"end":8697507},{"filename":"/lib/python3.10/sqlite3/__init__.py","start":8697507,"end":8700043},{"filename":"/lib/python3.10/sqlite3/dbapi2.py","start":8700043,"end":8703366},{"filename":"/lib/python3.10/sqlite3/dump.py","start":8703366,"end":8706191},{"filename":"/lib/python3.10/tzdata/__init__.py","start":8706191,"end":8706443},{"filename":"/lib/python3.10/tzdata/zones","start":8706443,"end":8715493},{"filename":"/lib/python3.10/tzdata/zoneinfo/CET","start":8715493,"end":8716114},{"filename":"/lib/python3.10/tzdata/zoneinfo/CST6CDT","start":8716114,"end":8717065},{"filename":"/lib/python3.10/tzdata/zoneinfo/Cuba","start":8717065,"end":8718182},{"filename":"/lib/python3.10/tzdata/zoneinfo/EET","start":8718182,"end":8718679},{"filename":"/lib/python3.10/tzdata/zoneinfo/EST","start":8718679,"end":8718790},{"filename":"/lib/python3.10/tzdata/zoneinfo/EST5EDT","start":8718790,"end":8719741},{"filename":"/lib/python3.10/tzdata/zoneinfo/Egypt","start":8719741,"end":8721017},{"filename":"/lib/python3.10/tzdata/zoneinfo/Eire","start":8721017,"end":8722513},{"filename":"/lib/python3.10/tzdata/zoneinfo/Factory","start":8722513,"end":8722626},{"filename":"/lib/python3.10/tzdata/zoneinfo/GB","start":8722626,"end":8724225},{"filename":"/lib/python3.10/tzdata/zoneinfo/GB-Eire","start":8724225,"end":8725824},{"filename":"/lib/python3.10/tzdata/zoneinfo/GMT","start":8725824,"end":8725935},{"filename":"/lib/python3.10/tzdata/zoneinfo/GMT+0","start":8725935,"end":8726046},{"filename":"/lib/python3.10/tzdata/zoneinfo/GMT-0","start":8726046,"end":8726157},{"filename":"/lib/python3.10/tzdata/zoneinfo/GMT0","start":8726157,"end":8726268},{"filename":"/lib/python3.10/tzdata/zoneinfo/Greenwich","start":8726268,"end":8726379},{"filename":"/lib/python3.10/tzdata/zoneinfo/HST","start":8726379,"end":8726491},{"filename":"/lib/python3.10/tzdata/zoneinfo/Hongkong","start":8726491,"end":8727266},{"filename":"/lib/python3.10/tzdata/zoneinfo/Iceland","start":8727266,"end":8728019},{"filename":"/lib/python3.10/tzdata/zoneinfo/Iran","start":8728019,"end":8730023},{"filename":"/lib/python3.10/tzdata/zoneinfo/Israel","start":8730023,"end":8731097},{"filename":"/lib/python3.10/tzdata/zoneinfo/Jamaica","start":8731097,"end":8731436},{"filename":"/lib/python3.10/tzdata/zoneinfo/Japan","start":8731436,"end":8731649},{"filename":"/lib/python3.10/tzdata/zoneinfo/Kwajalein","start":8731649,"end":8731868},{"filename":"/lib/python3.10/tzdata/zoneinfo/Libya","start":8731868,"end":8732299},{"filename":"/lib/python3.10/tzdata/zoneinfo/MET","start":8732299,"end":8732920},{"filename":"/lib/python3.10/tzdata/zoneinfo/MST","start":8732920,"end":8733031},{"filename":"/lib/python3.10/tzdata/zoneinfo/MST7MDT","start":8733031,"end":8733982},{"filename":"/lib/python3.10/tzdata/zoneinfo/NZ","start":8733982,"end":8735025},{"filename":"/lib/python3.10/tzdata/zoneinfo/NZ-CHAT","start":8735025,"end":8735833},{"filename":"/lib/python3.10/tzdata/zoneinfo/Navajo","start":8735833,"end":8736875},{"filename":"/lib/python3.10/tzdata/zoneinfo/PRC","start":8736875,"end":8737268},{"filename":"/lib/python3.10/tzdata/zoneinfo/PST8PDT","start":8737268,"end":8738219},{"filename":"/lib/python3.10/tzdata/zoneinfo/Poland","start":8738219,"end":8739142},{"filename":"/lib/python3.10/tzdata/zoneinfo/Portugal","start":8739142,"end":8740596},{"filename":"/lib/python3.10/tzdata/zoneinfo/ROC","start":8740596,"end":8741107},{"filename":"/lib/python3.10/tzdata/zoneinfo/ROK","start":8741107,"end":8741522},{"filename":"/lib/python3.10/tzdata/zoneinfo/Singapore","start":8741522,"end":8741778},{"filename":"/lib/python3.10/tzdata/zoneinfo/Turkey","start":8741778,"end":8742978},{"filename":"/lib/python3.10/tzdata/zoneinfo/UCT","start":8742978,"end":8743089},{"filename":"/lib/python3.10/tzdata/zoneinfo/UTC","start":8743089,"end":8743200},{"filename":"/lib/python3.10/tzdata/zoneinfo/Universal","start":8743200,"end":8743311},{"filename":"/lib/python3.10/tzdata/zoneinfo/W-SU","start":8743311,"end":8744219},{"filename":"/lib/python3.10/tzdata/zoneinfo/WET","start":8744219,"end":8744713},{"filename":"/lib/python3.10/tzdata/zoneinfo/Zulu","start":8744713,"end":8744824},{"filename":"/lib/python3.10/tzdata/zoneinfo/__init__.py","start":8744824,"end":8744824},{"filename":"/lib/python3.10/tzdata/zoneinfo/iso3166.tab","start":8744824,"end":8749287},{"filename":"/lib/python3.10/tzdata/zoneinfo/leapseconds","start":8749287,"end":8752679},{"filename":"/lib/python3.10/tzdata/zoneinfo/tzdata.zi","start":8752679,"end":8865464},{"filename":"/lib/python3.10/tzdata/zoneinfo/zone.tab","start":8865464,"end":8884883},{"filename":"/lib/python3.10/tzdata/zoneinfo/zone1970.tab","start":8884883,"end":8902476},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Abidjan","start":8902476,"end":8902606},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Accra","start":8902606,"end":8902736},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Addis_Ababa","start":8902736,"end":8902927},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Algiers","start":8902927,"end":8903397},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Asmara","start":8903397,"end":8903588},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Asmera","start":8903588,"end":8903779},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Bamako","start":8903779,"end":8903909},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Bangui","start":8903909,"end":8904089},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Banjul","start":8904089,"end":8904219},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Bissau","start":8904219,"end":8904368},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Blantyre","start":8904368,"end":8904499},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Brazzaville","start":8904499,"end":8904679},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Bujumbura","start":8904679,"end":8904810},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Cairo","start":8904810,"end":8906086},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Casablanca","start":8906086,"end":8908005},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Ceuta","start":8908005,"end":8908567},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Conakry","start":8908567,"end":8908697},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Dakar","start":8908697,"end":8908827},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Dar_es_Salaam","start":8908827,"end":8909018},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Djibouti","start":8909018,"end":8909209},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Douala","start":8909209,"end":8909389},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/El_Aaiun","start":8909389,"end":8911219},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Freetown","start":8911219,"end":8911349},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Gaborone","start":8911349,"end":8911480},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Harare","start":8911480,"end":8911611},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Johannesburg","start":8911611,"end":8911801},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Juba","start":8911801,"end":8912259},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Kampala","start":8912259,"end":8912450},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Khartoum","start":8912450,"end":8912908},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Kigali","start":8912908,"end":8913039},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Kinshasa","start":8913039,"end":8913219},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Lagos","start":8913219,"end":8913399},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Libreville","start":8913399,"end":8913579},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Lome","start":8913579,"end":8913709},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Luanda","start":8913709,"end":8913889},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Lubumbashi","start":8913889,"end":8914020},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Lusaka","start":8914020,"end":8914151},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Malabo","start":8914151,"end":8914331},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Maputo","start":8914331,"end":8914462},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Maseru","start":8914462,"end":8914652},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Mbabane","start":8914652,"end":8914842},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Mogadishu","start":8914842,"end":8915033},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Monrovia","start":8915033,"end":8915197},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Nairobi","start":8915197,"end":8915388},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Ndjamena","start":8915388,"end":8915548},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Niamey","start":8915548,"end":8915728},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Nouakchott","start":8915728,"end":8915858},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Ouagadougou","start":8915858,"end":8915988},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Porto-Novo","start":8915988,"end":8916168},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Sao_Tome","start":8916168,"end":8916341},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Timbuktu","start":8916341,"end":8916471},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Tripoli","start":8916471,"end":8916902},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Tunis","start":8916902,"end":8917351},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/Windhoek","start":8917351,"end":8917989},{"filename":"/lib/python3.10/tzdata/zoneinfo/Africa/__init__.py","start":8917989,"end":8917989},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Adak","start":8917989,"end":8918958},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Anchorage","start":8918958,"end":8919935},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Anguilla","start":8919935,"end":8920112},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Antigua","start":8920112,"end":8920289},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Araguaina","start":8920289,"end":8920881},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Aruba","start":8920881,"end":8921058},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Asuncion","start":8921058,"end":8921942},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Atikokan","start":8921942,"end":8922091},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Atka","start":8922091,"end":8923060},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Bahia","start":8923060,"end":8923742},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Bahia_Banderas","start":8923742,"end":8924272},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Barbados","start":8924272,"end":8924550},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Belem","start":8924550,"end":8924944},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Belize","start":8924944,"end":8925989},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Blanc-Sablon","start":8925989,"end":8926166},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Boa_Vista","start":8926166,"end":8926596},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Bogota","start":8926596,"end":8926775},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Boise","start":8926775,"end":8927774},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Buenos_Aires","start":8927774,"end":8928482},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Cambridge_Bay","start":8928482,"end":8929250},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Campo_Grande","start":8929250,"end":8930202},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Cancun","start":8930202,"end":8930731},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Caracas","start":8930731,"end":8930921},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Catamarca","start":8930921,"end":8931629},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Cayenne","start":8931629,"end":8931780},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Cayman","start":8931780,"end":8931929},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Chicago","start":8931929,"end":8933683},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Chihuahua","start":8933683,"end":8934023},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Coral_Harbour","start":8934023,"end":8934172},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Cordoba","start":8934172,"end":8934880},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Costa_Rica","start":8934880,"end":8935112},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Creston","start":8935112,"end":8935352},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Cuiaba","start":8935352,"end":8936286},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Curacao","start":8936286,"end":8936463},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Danmarkshavn","start":8936463,"end":8936910},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Dawson","start":8936910,"end":8937939},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Dawson_Creek","start":8937939,"end":8938622},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Denver","start":8938622,"end":8939664},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Detroit","start":8939664,"end":8940563},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Dominica","start":8940563,"end":8940740},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Edmonton","start":8940740,"end":8941710},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Eirunepe","start":8941710,"end":8942146},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/El_Salvador","start":8942146,"end":8942322},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Ensenada","start":8942322,"end":8943347},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Fort_Nelson","start":8943347,"end":8944795},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Fort_Wayne","start":8944795,"end":8945326},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Fortaleza","start":8945326,"end":8945810},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Glace_Bay","start":8945810,"end":8946690},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Godthab","start":8946690,"end":8947155},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Goose_Bay","start":8947155,"end":8948735},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Grand_Turk","start":8948735,"end":8949588},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Grenada","start":8949588,"end":8949765},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Guadeloupe","start":8949765,"end":8949942},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Guatemala","start":8949942,"end":8950154},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Guayaquil","start":8950154,"end":8950333},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Guyana","start":8950333,"end":8950514},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Halifax","start":8950514,"end":8952186},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Havana","start":8952186,"end":8953303},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Hermosillo","start":8953303,"end":8953589},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Indianapolis","start":8953589,"end":8954120},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Inuvik","start":8954120,"end":8954821},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Iqaluit","start":8954821,"end":8955561},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Jamaica","start":8955561,"end":8955900},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Jujuy","start":8955900,"end":8956590},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Juneau","start":8956590,"end":8957556},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Knox_IN","start":8957556,"end":8958572},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Kralendijk","start":8958572,"end":8958749},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/La_Paz","start":8958749,"end":8958919},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Lima","start":8958919,"end":8959202},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Los_Angeles","start":8959202,"end":8960496},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Louisville","start":8960496,"end":8961738},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Lower_Princes","start":8961738,"end":8961915},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Maceio","start":8961915,"end":8962417},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Managua","start":8962417,"end":8962712},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Manaus","start":8962712,"end":8963124},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Marigot","start":8963124,"end":8963301},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Martinique","start":8963301,"end":8963479},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Matamoros","start":8963479,"end":8963916},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Mazatlan","start":8963916,"end":8964283},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Mendoza","start":8964283,"end":8964991},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Menominee","start":8964991,"end":8965908},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Merida","start":8965908,"end":8966211},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Metlakatla","start":8966211,"end":8966806},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Mexico_City","start":8966806,"end":8967218},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Miquelon","start":8967218,"end":8967768},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Moncton","start":8967768,"end":8969261},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Monterrey","start":8969261,"end":8969554},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Montevideo","start":8969554,"end":8970523},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Montreal","start":8970523,"end":8972240},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Montserrat","start":8972240,"end":8972417},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Nassau","start":8972417,"end":8974134},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/New_York","start":8974134,"end":8975878},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Nipigon","start":8975878,"end":8976713},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Nome","start":8976713,"end":8977688},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Noronha","start":8977688,"end":8978172},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Nuuk","start":8978172,"end":8978637},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Ojinaga","start":8978637,"end":8979121},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Panama","start":8979121,"end":8979270},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Pangnirtung","start":8979270,"end":8980039},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Paramaribo","start":8980039,"end":8980226},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Phoenix","start":8980226,"end":8980466},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Port-au-Prince","start":8980466,"end":8981031},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Port_of_Spain","start":8981031,"end":8981208},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Porto_Acre","start":8981208,"end":8981626},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Porto_Velho","start":8981626,"end":8982020},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Puerto_Rico","start":8982020,"end":8982197},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Punta_Arenas","start":8982197,"end":8983406},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Rainy_River","start":8983406,"end":8984241},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Rankin_Inlet","start":8984241,"end":8984933},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Recife","start":8984933,"end":8985417},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Regina","start":8985417,"end":8986055},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Resolute","start":8986055,"end":8986747},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Rio_Branco","start":8986747,"end":8987165},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Rosario","start":8987165,"end":8987873},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Santa_Isabel","start":8987873,"end":8988898},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Santarem","start":8988898,"end":8989307},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Santiago","start":8989307,"end":8990589},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Santo_Domingo","start":8990589,"end":8990906},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Sao_Paulo","start":8990906,"end":8991858},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Scoresbysund","start":8991858,"end":8992337},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Shiprock","start":8992337,"end":8993379},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Sitka","start":8993379,"end":8994335},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/St_Barthelemy","start":8994335,"end":8994512},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/St_Johns","start":8994512,"end":8996390},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/St_Kitts","start":8996390,"end":8996567},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/St_Lucia","start":8996567,"end":8996744},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/St_Thomas","start":8996744,"end":8996921},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/St_Vincent","start":8996921,"end":8997098},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Swift_Current","start":8997098,"end":8997466},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Tegucigalpa","start":8997466,"end":8997660},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Thule","start":8997660,"end":8998115},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Thunder_Bay","start":8998115,"end":8998996},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Tijuana","start":8998996,"end":9000021},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Toronto","start":9000021,"end":9001738},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Tortola","start":9001738,"end":9001915},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Vancouver","start":9001915,"end":9003245},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Virgin","start":9003245,"end":9003422},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Whitehorse","start":9003422,"end":9004451},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Winnipeg","start":9004451,"end":9005745},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Yakutat","start":9005745,"end":9006691},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Yellowknife","start":9006691,"end":9007420},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/__init__.py","start":9007420,"end":9007420},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/Buenos_Aires","start":9007420,"end":9008128},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/Catamarca","start":9008128,"end":9008836},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/ComodRivadavia","start":9008836,"end":9009544},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/Cordoba","start":9009544,"end":9010252},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/Jujuy","start":9010252,"end":9010942},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/La_Rioja","start":9010942,"end":9011659},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/Mendoza","start":9011659,"end":9012367},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/Rio_Gallegos","start":9012367,"end":9013075},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/Salta","start":9013075,"end":9013765},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/San_Juan","start":9013765,"end":9014482},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/San_Luis","start":9014482,"end":9015199},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/Tucuman","start":9015199,"end":9015925},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/Ushuaia","start":9015925,"end":9016633},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Argentina/__init__.py","start":9016633,"end":9016633},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Indiana/Indianapolis","start":9016633,"end":9017164},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Indiana/Knox","start":9017164,"end":9018180},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Indiana/Marengo","start":9018180,"end":9018747},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Indiana/Petersburg","start":9018747,"end":9019430},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Indiana/Tell_City","start":9019430,"end":9019952},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Indiana/Vevay","start":9019952,"end":9020321},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Indiana/Vincennes","start":9020321,"end":9020879},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Indiana/Winamac","start":9020879,"end":9021491},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Indiana/__init__.py","start":9021491,"end":9021491},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Kentucky/Louisville","start":9021491,"end":9022733},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Kentucky/Monticello","start":9022733,"end":9023705},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/Kentucky/__init__.py","start":9023705,"end":9023705},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/North_Dakota/Beulah","start":9023705,"end":9024748},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/North_Dakota/Center","start":9024748,"end":9025738},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/North_Dakota/New_Salem","start":9025738,"end":9026728},{"filename":"/lib/python3.10/tzdata/zoneinfo/America/North_Dakota/__init__.py","start":9026728,"end":9026728},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/Casey","start":9026728,"end":9026971},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/Davis","start":9026971,"end":9027168},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/DumontDUrville","start":9027168,"end":9027322},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/Macquarie","start":9027322,"end":9028298},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/Mawson","start":9028298,"end":9028450},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/McMurdo","start":9028450,"end":9029493},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/Palmer","start":9029493,"end":9030380},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/Rothera","start":9030380,"end":9030512},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/South_Pole","start":9030512,"end":9031555},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/Syowa","start":9031555,"end":9031688},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/Troll","start":9031688,"end":9031865},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/Vostok","start":9031865,"end":9031998},{"filename":"/lib/python3.10/tzdata/zoneinfo/Antarctica/__init__.py","start":9031998,"end":9031998},{"filename":"/lib/python3.10/tzdata/zoneinfo/Arctic/Longyearbyen","start":9031998,"end":9032674},{"filename":"/lib/python3.10/tzdata/zoneinfo/Arctic/__init__.py","start":9032674,"end":9032674},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Aden","start":9032674,"end":9032807},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Almaty","start":9032807,"end":9033416},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Amman","start":9033416,"end":9034338},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Anadyr","start":9034338,"end":9035081},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Aqtau","start":9035081,"end":9035687},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Aqtobe","start":9035687,"end":9036302},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Ashgabat","start":9036302,"end":9036677},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Ashkhabad","start":9036677,"end":9037052},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Atyrau","start":9037052,"end":9037668},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Baghdad","start":9037668,"end":9038298},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Bahrain","start":9038298,"end":9038450},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Baku","start":9038450,"end":9039194},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Bangkok","start":9039194,"end":9039346},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Barnaul","start":9039346,"end":9040099},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Beirut","start":9040099,"end":9040831},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Bishkek","start":9040831,"end":9041449},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Brunei","start":9041449,"end":9041603},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Calcutta","start":9041603,"end":9041823},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Chita","start":9041823,"end":9042573},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Choibalsan","start":9042573,"end":9043192},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Chongqing","start":9043192,"end":9043585},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Chungking","start":9043585,"end":9043978},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Colombo","start":9043978,"end":9044225},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Dacca","start":9044225,"end":9044456},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Damascus","start":9044456,"end":9045503},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Dhaka","start":9045503,"end":9045734},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Dili","start":9045734,"end":9045904},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Dubai","start":9045904,"end":9046037},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Dushanbe","start":9046037,"end":9046403},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Famagusta","start":9046403,"end":9047343},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Gaza","start":9047343,"end":9048583},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Harbin","start":9048583,"end":9048976},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Hebron","start":9048976,"end":9050234},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Ho_Chi_Minh","start":9050234,"end":9050470},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Hong_Kong","start":9050470,"end":9051245},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Hovd","start":9051245,"end":9051839},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Irkutsk","start":9051839,"end":9052599},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Istanbul","start":9052599,"end":9053799},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Jakarta","start":9053799,"end":9054047},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Jayapura","start":9054047,"end":9054218},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Jerusalem","start":9054218,"end":9055292},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Kabul","start":9055292,"end":9055451},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Kamchatka","start":9055451,"end":9056178},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Karachi","start":9056178,"end":9056444},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Kashgar","start":9056444,"end":9056577},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Kathmandu","start":9056577,"end":9056738},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Katmandu","start":9056738,"end":9056899},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Khandyga","start":9056899,"end":9057674},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Kolkata","start":9057674,"end":9057894},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Krasnoyarsk","start":9057894,"end":9058635},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Kuala_Lumpur","start":9058635,"end":9058891},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Kuching","start":9058891,"end":9059211},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Kuwait","start":9059211,"end":9059344},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Macao","start":9059344,"end":9060135},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Macau","start":9060135,"end":9060926},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Magadan","start":9060926,"end":9061677},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Makassar","start":9061677,"end":9061867},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Manila","start":9061867,"end":9062105},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Muscat","start":9062105,"end":9062238},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Nicosia","start":9062238,"end":9062835},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Novokuznetsk","start":9062835,"end":9063561},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Novosibirsk","start":9063561,"end":9064314},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Omsk","start":9064314,"end":9065055},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Oral","start":9065055,"end":9065680},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Phnom_Penh","start":9065680,"end":9065832},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Pontianak","start":9065832,"end":9066079},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Pyongyang","start":9066079,"end":9066262},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Qatar","start":9066262,"end":9066414},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Qostanay","start":9066414,"end":9067029},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Qyzylorda","start":9067029,"end":9067653},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Rangoon","start":9067653,"end":9067840},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Riyadh","start":9067840,"end":9067973},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Saigon","start":9067973,"end":9068209},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Sakhalin","start":9068209,"end":9068964},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Samarkand","start":9068964,"end":9069330},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Seoul","start":9069330,"end":9069745},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Shanghai","start":9069745,"end":9070138},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Singapore","start":9070138,"end":9070394},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Srednekolymsk","start":9070394,"end":9071136},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Taipei","start":9071136,"end":9071647},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Tashkent","start":9071647,"end":9072013},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Tbilisi","start":9072013,"end":9072642},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Tehran","start":9072642,"end":9074646},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Tel_Aviv","start":9074646,"end":9075720},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Thimbu","start":9075720,"end":9075874},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Thimphu","start":9075874,"end":9076028},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Tokyo","start":9076028,"end":9076241},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Tomsk","start":9076241,"end":9076994},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Ujung_Pandang","start":9076994,"end":9077184},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Ulaanbaatar","start":9077184,"end":9077778},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Ulan_Bator","start":9077778,"end":9078372},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Urumqi","start":9078372,"end":9078505},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Ust-Nera","start":9078505,"end":9079276},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Vientiane","start":9079276,"end":9079428},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Vladivostok","start":9079428,"end":9080170},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Yakutsk","start":9080170,"end":9080911},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Yangon","start":9080911,"end":9081098},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Yekaterinburg","start":9081098,"end":9081858},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/Yerevan","start":9081858,"end":9082566},{"filename":"/lib/python3.10/tzdata/zoneinfo/Asia/__init__.py","start":9082566,"end":9082566},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/Azores","start":9082566,"end":9084019},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/Bermuda","start":9084019,"end":9085043},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/Canary","start":9085043,"end":9085521},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/Cape_Verde","start":9085521,"end":9085696},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/Faeroe","start":9085696,"end":9086137},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/Faroe","start":9086137,"end":9086578},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/Jan_Mayen","start":9086578,"end":9087254},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/Madeira","start":9087254,"end":9088707},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/Reykjavik","start":9088707,"end":9089460},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/South_Georgia","start":9089460,"end":9089592},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/St_Helena","start":9089592,"end":9089722},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/Stanley","start":9089722,"end":9090511},{"filename":"/lib/python3.10/tzdata/zoneinfo/Atlantic/__init__.py","start":9090511,"end":9090511},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/ACT","start":9090511,"end":9091415},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Adelaide","start":9091415,"end":9092336},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Brisbane","start":9092336,"end":9092625},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Broken_Hill","start":9092625,"end":9093566},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Canberra","start":9093566,"end":9094470},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Currie","start":9094470,"end":9095473},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Darwin","start":9095473,"end":9095707},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Eucla","start":9095707,"end":9096021},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Hobart","start":9096021,"end":9097024},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/LHI","start":9097024,"end":9097716},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Lindeman","start":9097716,"end":9098041},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Lord_Howe","start":9098041,"end":9098733},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Melbourne","start":9098733,"end":9099637},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/NSW","start":9099637,"end":9100541},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/North","start":9100541,"end":9100775},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Perth","start":9100775,"end":9101081},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Queensland","start":9101081,"end":9101370},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/South","start":9101370,"end":9102291},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Sydney","start":9102291,"end":9103195},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Tasmania","start":9103195,"end":9104198},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Victoria","start":9104198,"end":9105102},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/West","start":9105102,"end":9105408},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/Yancowinna","start":9105408,"end":9106349},{"filename":"/lib/python3.10/tzdata/zoneinfo/Australia/__init__.py","start":9106349,"end":9106349},{"filename":"/lib/python3.10/tzdata/zoneinfo/Brazil/Acre","start":9106349,"end":9106767},{"filename":"/lib/python3.10/tzdata/zoneinfo/Brazil/DeNoronha","start":9106767,"end":9107251},{"filename":"/lib/python3.10/tzdata/zoneinfo/Brazil/East","start":9107251,"end":9108203},{"filename":"/lib/python3.10/tzdata/zoneinfo/Brazil/West","start":9108203,"end":9108615},{"filename":"/lib/python3.10/tzdata/zoneinfo/Brazil/__init__.py","start":9108615,"end":9108615},{"filename":"/lib/python3.10/tzdata/zoneinfo/Canada/Atlantic","start":9108615,"end":9110287},{"filename":"/lib/python3.10/tzdata/zoneinfo/Canada/Central","start":9110287,"end":9111581},{"filename":"/lib/python3.10/tzdata/zoneinfo/Canada/Eastern","start":9111581,"end":9113298},{"filename":"/lib/python3.10/tzdata/zoneinfo/Canada/Mountain","start":9113298,"end":9114268},{"filename":"/lib/python3.10/tzdata/zoneinfo/Canada/Newfoundland","start":9114268,"end":9116146},{"filename":"/lib/python3.10/tzdata/zoneinfo/Canada/Pacific","start":9116146,"end":9117476},{"filename":"/lib/python3.10/tzdata/zoneinfo/Canada/Saskatchewan","start":9117476,"end":9118114},{"filename":"/lib/python3.10/tzdata/zoneinfo/Canada/Yukon","start":9118114,"end":9119143},{"filename":"/lib/python3.10/tzdata/zoneinfo/Canada/__init__.py","start":9119143,"end":9119143},{"filename":"/lib/python3.10/tzdata/zoneinfo/Chile/Continental","start":9119143,"end":9120425},{"filename":"/lib/python3.10/tzdata/zoneinfo/Chile/EasterIsland","start":9120425,"end":9121527},{"filename":"/lib/python3.10/tzdata/zoneinfo/Chile/__init__.py","start":9121527,"end":9121527},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT","start":9121527,"end":9121638},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+0","start":9121638,"end":9121749},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+1","start":9121749,"end":9121862},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+10","start":9121862,"end":9121976},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+11","start":9121976,"end":9122090},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+12","start":9122090,"end":9122204},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+2","start":9122204,"end":9122317},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+3","start":9122317,"end":9122430},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+4","start":9122430,"end":9122543},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+5","start":9122543,"end":9122656},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+6","start":9122656,"end":9122769},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+7","start":9122769,"end":9122882},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+8","start":9122882,"end":9122995},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT+9","start":9122995,"end":9123108},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-0","start":9123108,"end":9123219},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-1","start":9123219,"end":9123333},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-10","start":9123333,"end":9123448},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-11","start":9123448,"end":9123563},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-12","start":9123563,"end":9123678},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-13","start":9123678,"end":9123793},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-14","start":9123793,"end":9123908},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-2","start":9123908,"end":9124022},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-3","start":9124022,"end":9124136},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-4","start":9124136,"end":9124250},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-5","start":9124250,"end":9124364},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-6","start":9124364,"end":9124478},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-7","start":9124478,"end":9124592},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-8","start":9124592,"end":9124706},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT-9","start":9124706,"end":9124820},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/GMT0","start":9124820,"end":9124931},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/Greenwich","start":9124931,"end":9125042},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/UCT","start":9125042,"end":9125153},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/UTC","start":9125153,"end":9125264},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/Universal","start":9125264,"end":9125375},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/Zulu","start":9125375,"end":9125486},{"filename":"/lib/python3.10/tzdata/zoneinfo/Etc/__init__.py","start":9125486,"end":9125486},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Amsterdam","start":9125486,"end":9126557},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Andorra","start":9126557,"end":9126946},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Astrakhan","start":9126946,"end":9127672},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Athens","start":9127672,"end":9128354},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Belfast","start":9128354,"end":9129953},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Belgrade","start":9129953,"end":9130431},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Berlin","start":9130431,"end":9131136},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Bratislava","start":9131136,"end":9131859},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Brussels","start":9131859,"end":9132962},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Bucharest","start":9132962,"end":9133623},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Budapest","start":9133623,"end":9134389},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Busingen","start":9134389,"end":9134886},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Chisinau","start":9134886,"end":9135641},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Copenhagen","start":9135641,"end":9136264},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Dublin","start":9136264,"end":9137760},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Gibraltar","start":9137760,"end":9138980},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Guernsey","start":9138980,"end":9140579},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Helsinki","start":9140579,"end":9141060},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Isle_of_Man","start":9141060,"end":9142659},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Istanbul","start":9142659,"end":9143859},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Jersey","start":9143859,"end":9145458},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Kaliningrad","start":9145458,"end":9146362},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Kiev","start":9146362,"end":9146920},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Kirov","start":9146920,"end":9147637},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Lisbon","start":9147637,"end":9149091},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Ljubljana","start":9149091,"end":9149569},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/London","start":9149569,"end":9151168},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Luxembourg","start":9151168,"end":9152255},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Madrid","start":9152255,"end":9153152},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Malta","start":9153152,"end":9154080},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Mariehamn","start":9154080,"end":9154561},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Minsk","start":9154561,"end":9155369},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Monaco","start":9155369,"end":9156483},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Moscow","start":9156483,"end":9157391},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Nicosia","start":9157391,"end":9157988},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Oslo","start":9157988,"end":9158664},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Paris","start":9158664,"end":9159769},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Podgorica","start":9159769,"end":9160247},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Prague","start":9160247,"end":9160970},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Riga","start":9160970,"end":9161664},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Rome","start":9161664,"end":9162611},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Samara","start":9162611,"end":9163343},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/San_Marino","start":9163343,"end":9164290},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Sarajevo","start":9164290,"end":9164768},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Saratov","start":9164768,"end":9165494},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Simferopol","start":9165494,"end":9166359},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Skopje","start":9166359,"end":9166837},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Sofia","start":9166837,"end":9167429},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Stockholm","start":9167429,"end":9167926},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Tallinn","start":9167926,"end":9168601},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Tirane","start":9168601,"end":9169205},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Tiraspol","start":9169205,"end":9169960},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Ulyanovsk","start":9169960,"end":9170720},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Uzhgorod","start":9170720,"end":9171259},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Vaduz","start":9171259,"end":9171756},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Vatican","start":9171756,"end":9172703},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Vienna","start":9172703,"end":9173361},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Vilnius","start":9173361,"end":9174037},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Volgograd","start":9174037,"end":9174772},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Warsaw","start":9174772,"end":9175695},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Zagreb","start":9175695,"end":9176173},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Zaporozhye","start":9176173,"end":9176742},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/Zurich","start":9176742,"end":9177239},{"filename":"/lib/python3.10/tzdata/zoneinfo/Europe/__init__.py","start":9177239,"end":9177239},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/Antananarivo","start":9177239,"end":9177430},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/Chagos","start":9177430,"end":9177582},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/Christmas","start":9177582,"end":9177715},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/Cocos","start":9177715,"end":9177855},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/Comoro","start":9177855,"end":9178046},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/Kerguelen","start":9178046,"end":9178179},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/Mahe","start":9178179,"end":9178312},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/Maldives","start":9178312,"end":9178464},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/Mauritius","start":9178464,"end":9178643},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/Mayotte","start":9178643,"end":9178834},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/Reunion","start":9178834,"end":9178967},{"filename":"/lib/python3.10/tzdata/zoneinfo/Indian/__init__.py","start":9178967,"end":9178967},{"filename":"/lib/python3.10/tzdata/zoneinfo/Mexico/BajaNorte","start":9178967,"end":9179992},{"filename":"/lib/python3.10/tzdata/zoneinfo/Mexico/BajaSur","start":9179992,"end":9180359},{"filename":"/lib/python3.10/tzdata/zoneinfo/Mexico/General","start":9180359,"end":9180771},{"filename":"/lib/python3.10/tzdata/zoneinfo/Mexico/__init__.py","start":9180771,"end":9180771},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Apia","start":9180771,"end":9181178},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Auckland","start":9181178,"end":9182221},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Bougainville","start":9182221,"end":9182422},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Chatham","start":9182422,"end":9183230},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Chuuk","start":9183230,"end":9183425},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Easter","start":9183425,"end":9184527},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Efate","start":9184527,"end":9184869},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Enderbury","start":9184869,"end":9185041},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Fakaofo","start":9185041,"end":9185194},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Fiji","start":9185194,"end":9185622},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Funafuti","start":9185622,"end":9185756},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Galapagos","start":9185756,"end":9185931},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Gambier","start":9185931,"end":9186063},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Guadalcanal","start":9186063,"end":9186197},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Guam","start":9186197,"end":9186547},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Honolulu","start":9186547,"end":9186768},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Johnston","start":9186768,"end":9186989},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Kanton","start":9186989,"end":9187161},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Kiritimati","start":9187161,"end":9187335},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Kosrae","start":9187335,"end":9187577},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Kwajalein","start":9187577,"end":9187796},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Majuro","start":9187796,"end":9188014},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Marquesas","start":9188014,"end":9188153},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Midway","start":9188153,"end":9188299},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Nauru","start":9188299,"end":9188482},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Niue","start":9188482,"end":9188636},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Norfolk","start":9188636,"end":9188883},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Noumea","start":9188883,"end":9189081},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Pago_Pago","start":9189081,"end":9189227},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Palau","start":9189227,"end":9189375},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Pitcairn","start":9189375,"end":9189528},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Pohnpei","start":9189528,"end":9189742},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Ponape","start":9189742,"end":9189956},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Port_Moresby","start":9189956,"end":9190110},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Rarotonga","start":9190110,"end":9190516},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Saipan","start":9190516,"end":9190866},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Samoa","start":9190866,"end":9191012},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Tahiti","start":9191012,"end":9191145},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Tarawa","start":9191145,"end":9191279},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Tongatapu","start":9191279,"end":9191516},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Truk","start":9191516,"end":9191711},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Wake","start":9191711,"end":9191845},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Wallis","start":9191845,"end":9191979},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/Yap","start":9191979,"end":9192174},{"filename":"/lib/python3.10/tzdata/zoneinfo/Pacific/__init__.py","start":9192174,"end":9192174},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/Alaska","start":9192174,"end":9193151},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/Aleutian","start":9193151,"end":9194120},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/Arizona","start":9194120,"end":9194360},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/Central","start":9194360,"end":9196114},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/East-Indiana","start":9196114,"end":9196645},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/Eastern","start":9196645,"end":9198389},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/Hawaii","start":9198389,"end":9198610},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/Indiana-Starke","start":9198610,"end":9199626},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/Michigan","start":9199626,"end":9200525},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/Mountain","start":9200525,"end":9201567},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/Pacific","start":9201567,"end":9202861},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/Samoa","start":9202861,"end":9203007},{"filename":"/lib/python3.10/tzdata/zoneinfo/US/__init__.py","start":9203007,"end":9203007},{"filename":"/lib/python3.10/unittest/__init__.py","start":9203007,"end":9206768},{"filename":"/lib/python3.10/unittest/__main__.py","start":9206768,"end":9207240},{"filename":"/lib/python3.10/unittest/_log.py","start":9207240,"end":9209986},{"filename":"/lib/python3.10/unittest/async_case.py","start":9209986,"end":9216207},{"filename":"/lib/python3.10/unittest/case.py","start":9216207,"end":9273769},{"filename":"/lib/python3.10/unittest/loader.py","start":9273769,"end":9296471},{"filename":"/lib/python3.10/unittest/main.py","start":9296471,"end":9307709},{"filename":"/lib/python3.10/unittest/mock.py","start":9307709,"end":9409795},{"filename":"/lib/python3.10/unittest/result.py","start":9409795,"end":9417264},{"filename":"/lib/python3.10/unittest/runner.py","start":9417264,"end":9425315},{"filename":"/lib/python3.10/unittest/signals.py","start":9425315,"end":9427718},{"filename":"/lib/python3.10/unittest/suite.py","start":9427718,"end":9441230},{"filename":"/lib/python3.10/unittest/util.py","start":9441230,"end":9446445},{"filename":"/lib/python3.10/urllib/__init__.py","start":9446445,"end":9446445},{"filename":"/lib/python3.10/urllib/error.py","start":9446445,"end":9449077},{"filename":"/lib/python3.10/urllib/parse.py","start":9449077,"end":9491355},{"filename":"/lib/python3.10/urllib/request.py","start":9491355,"end":9592745},{"filename":"/lib/python3.10/urllib/response.py","start":9592745,"end":9595106},{"filename":"/lib/python3.10/urllib/robotparser.py","start":9595106,"end":9604530},{"filename":"/lib/python3.10/wsgiref/__init__.py","start":9604530,"end":9605117},{"filename":"/lib/python3.10/wsgiref/handlers.py","start":9605117,"end":9626786},{"filename":"/lib/python3.10/wsgiref/headers.py","start":9626786,"end":9633552},{"filename":"/lib/python3.10/wsgiref/simple_server.py","start":9633552,"end":9638723},{"filename":"/lib/python3.10/wsgiref/util.py","start":9638723,"end":9644574},{"filename":"/lib/python3.10/wsgiref/validate.py","start":9644574,"end":9659673},{"filename":"/lib/python3.10/xml/__init__.py","start":9659673,"end":9660230},{"filename":"/lib/python3.10/xml/dom/NodeFilter.py","start":9660230,"end":9661166},{"filename":"/lib/python3.10/xml/dom/__init__.py","start":9661166,"end":9665185},{"filename":"/lib/python3.10/xml/dom/domreg.py","start":9665185,"end":9668636},{"filename":"/lib/python3.10/xml/dom/expatbuilder.py","start":9668636,"end":9704403},{"filename":"/lib/python3.10/xml/dom/minicompat.py","start":9704403,"end":9707770},{"filename":"/lib/python3.10/xml/dom/minidom.py","start":9707770,"end":9775836},{"filename":"/lib/python3.10/xml/dom/pulldom.py","start":9775836,"end":9787833},{"filename":"/lib/python3.10/xml/dom/xmlbuilder.py","start":9787833,"end":9800220},{"filename":"/lib/python3.10/xml/etree/ElementInclude.py","start":9800220,"end":9807102},{"filename":"/lib/python3.10/xml/etree/ElementPath.py","start":9807102,"end":9821109},{"filename":"/lib/python3.10/xml/etree/ElementTree.py","start":9821109,"end":9895045},{"filename":"/lib/python3.10/xml/etree/__init__.py","start":9895045,"end":9896650},{"filename":"/lib/python3.10/xml/etree/cElementTree.py","start":9896650,"end":9896732},{"filename":"/lib/python3.10/xml/parsers/__init__.py","start":9896732,"end":9896899},{"filename":"/lib/python3.10/xml/parsers/expat.py","start":9896899,"end":9897147},{"filename":"/lib/python3.10/xml/sax/__init__.py","start":9897147,"end":9900789},{"filename":"/lib/python3.10/xml/sax/_exceptions.py","start":9900789,"end":9905574},{"filename":"/lib/python3.10/xml/sax/expatreader.py","start":9905574,"end":9921301},{"filename":"/lib/python3.10/xml/sax/handler.py","start":9921301,"end":9936918},{"filename":"/lib/python3.10/xml/sax/saxutils.py","start":9936918,"end":9949173},{"filename":"/lib/python3.10/xml/sax/xmlreader.py","start":9949173,"end":9961857},{"filename":"/lib/python3.10/xmlrpc/__init__.py","start":9961857,"end":9961895},{"filename":"/lib/python3.10/xmlrpc/client.py","start":9961895,"end":10011286},{"filename":"/lib/python3.10/xmlrpc/server.py","start":10011286,"end":10047958},{"filename":"/lib/python3.10/zoneinfo/__init__.py","start":10047958,"end":10048661},{"filename":"/lib/python3.10/zoneinfo/_common.py","start":10048661,"end":10053946},{"filename":"/lib/python3.10/zoneinfo/_tzpath.py","start":10053946,"end":10059027},{"filename":"/lib/python3.10/zoneinfo/_zoneinfo.py","start":10059027,"end":10083345},{"filename":"/lib/python3.10/webbrowser.py","start":10083345,"end":10083712}],"remote_package_size":5394245,"package_uuid":"b90888e8-366e-4159-955c-b9020d3ab63f"})})();const API=Module.API;const Hiwire=Module.hiwire;const Tests=API.tests;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=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var 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};readAsync=function readAsync(filename,onload,onerror){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);nodeFS["readFile"](filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status,toThrow){if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}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 getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=Number(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}function convertJsFunctionToWasm(func,sig){if(typeof WebAssembly.Function==="function"){var typeNames={"i":"i32","j":"i64","f":"f32","d":"f64"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i>0]=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)}}function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for getValue: "+type)}return null}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>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=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=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}function AsciiToString(ptr){var str="";while(1){var ch=HEAPU8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var str="";for(var i=0;!(i>=maxBytesToRead/2);++i){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)break;str+=String.fromCharCode(codeUnit)}return str}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeStringToMemory(string,buffer,dontAddNull){warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var lastChar,end;if(dontAddNull){end=buffer+lengthBytesUTF8(string);lastChar=HEAP8[end]}stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end]=lastChar}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var TOTAL_STACK=5242880;var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||20971520;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":2147483648/65536})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable=new WebAssembly.Table({"initial":7364,"element":"anyfunc"});var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();SOCKFS.root=FS.mount(SOCKFS,{},null);PIPEFS.root=FS.mount(PIPEFS,{},null);callRuntimeCallbacks(__ATINIT__)}function preMain(){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 addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPreMain(cb){__ATMAIN__.unshift(cb)}function addOnExit(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"]={};Module["preloadedWasm"]={};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);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="pyodide.asm.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={"env":asmLibraryArg,"wasi_snapshot_preview1":asmLibraryArg,"GOT.mem":new Proxy(asmLibraryArg,GOTHandler),"GOT.func":new Proxy(asmLibraryArg,GOTHandler)};function receiveInstance(instance,module){var exports=instance.exports;exports=relocateExports(exports,1024);Module["asm"]=exports;var metadata=getDylinkMetadata(module);if(metadata.neededDynlibs){dynamicLibraries=metadata.neededDynlibs.concat(dynamicLibraries)}mergeLibSymbols(exports,"main");addOnInit(Module["asm"]["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"],result["module"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).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(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}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().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;var ASM_CONSTS={3106167:function(){throw new Error("intentionally triggered fatal error!")},3106224:function($0){Hiwire.get_value($0)()},3106247:function(){Module.UTF8ToString=UTF8ToString;Module.wasmTable=wasmTable},3106317:function(){throw new Error("Fatal pyodide error")},3106356:function(){throw new Error("Fatal pyodide error")},3106395:function(){throw new Error("Fatal pyodide error")},3106434:function(){throw new Error("Fatal pyodide error")},3106473:function(){throw new Error("Fatal pyodide error")},3106512:function(){throw new Error("Fatal pyodide error")},3106551:function(){throw new Error("Fatal pyodide error")},3106590:function(){throw new Error("Fatal pyodide error")},3106629:function(){throw new Error("Fatal pyodide error")},3106668:function(){throw new Error("Fatal pyodide error")},3106707:function(){throw new Error("Fatal pyodide error")},3106746:function(){throw new Error("Fatal pyodide error")},3106785:function($0){API._pyodide=Hiwire.pop_value($0)},3106826:function($0){if(!$0){AL.alcErr=40964;return 1}},3106874:function($0){err("bad name in alcGetProcAddress: "+UTF8ToString($0))},3106937:function($0){if(!AL.currentCtx){err("alGetProcAddress() called without a valid context");return 1}if(!$0){AL.currentCtx.err=40963;return 1}},3107085:function($0){err("bad name in alGetProcAddress: "+UTF8ToString($0))}};function JsArray_Check(idobj){let obj=Hiwire.get_value(idobj);if(Array.isArray(obj)){return true}let typeTag=Object.prototype.toString.call(obj);if(typeTag==="[object HTMLCollection]"||typeTag==="[object NodeList]"){return true}if(ArrayBuffer.isView(obj)&&obj.constructor.name!=="DataView"){return true}return false}function JsArray_Delete(idobj,idx){"use strict";try{let obj=Hiwire.get_value(idobj);if(idx<0||idx>=obj.length){return-1}obj.splice(idx,1)}catch(e){Module.handle_js_error(e);return-1}return 0}function JsArray_Get(idobj,idx){"use strict";try{let obj=Hiwire.get_value(idobj);let result=obj[idx];if(result===undefined&&!(idx in obj)){return 0}return Hiwire.new_value(result)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsArray_New(){"use strict";try{return Hiwire.new_value([])}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsArray_Push(idarr,idval){"use strict";try{Hiwire.get_value(idarr).push(Hiwire.get_value(idval))}catch(e){Module.handle_js_error(e);return-1}return 0}function JsArray_Push_unchecked(idarr,idval){Hiwire.get_value(idarr).push(Hiwire.get_value(idval))}function JsArray_Set(idobj,idx,idval){"use strict";try{Hiwire.get_value(idobj)[idx]=Hiwire.get_value(idval)}catch(e){Module.handle_js_error(e);return-1}return 0}function JsBuffer_DecodeString_js(jsbuffer_id,encoding){"use strict";try{let buffer=Hiwire.get_value(jsbuffer_id);let encoding_js;if(encoding){encoding_js=UTF8ToString(encoding)}let decoder=new TextDecoder(encoding_js,{fatal:!!1});let res;try{res=decoder.decode(buffer)}catch(e){if(e instanceof TypeError){return 0}throw e}return Hiwire.new_value(res)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsMap_New(){"use strict";try{return Hiwire.new_value(new Map)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsMap_Set(mapid,keyid,valueid){"use strict";try{let map=Hiwire.get_value(mapid);let key=Hiwire.get_value(keyid);let value=Hiwire.get_value(valueid);map.set(key,value)}catch(e){Module.handle_js_error(e);return-1}return 0}function JsObject_DeleteString(idobj,ptrkey){"use strict";try{let jsobj=Hiwire.get_value(idobj);let jskey=UTF8ToString(ptrkey);delete jsobj[jskey]}catch(e){Module.handle_js_error(e);return-1}return 0}function JsObject_Dir(idobj){"use strict";try{let jsobj=Hiwire.get_value(idobj);let result=[];do{result.push(...Object.getOwnPropertyNames(jsobj).filter(s=>{let c=s.charCodeAt(0);return c<48||c>57}))}while(jsobj=Object.getPrototypeOf(jsobj));return Hiwire.new_value(result)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsObject_Entries(idobj){"use strict";try{let jsobj=Hiwire.get_value(idobj);return Hiwire.new_value(Object.entries(jsobj))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsObject_GetString(idobj,ptrkey){"use strict";try{let jsobj=Hiwire.get_value(idobj);let jskey=UTF8ToString(ptrkey);let result=jsobj[jskey];if(result===undefined&&!(jskey in jsobj)){return 0}return Hiwire.new_value(result)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsObject_Keys(idobj){"use strict";try{let jsobj=Hiwire.get_value(idobj);return Hiwire.new_value(Object.keys(jsobj))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsObject_New(){"use strict";try{return Hiwire.new_value({})}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsObject_SetString(idobj,ptrkey,idval){"use strict";try{let jsobj=Hiwire.get_value(idobj);let jskey=UTF8ToString(ptrkey);let jsval=Hiwire.get_value(idval);jsobj[jskey]=jsval}catch(e){Module.handle_js_error(e);return-1}return 0}function JsObject_Values(idobj){"use strict";try{let jsobj=Hiwire.get_value(idobj);return Hiwire.new_value(Object.values(jsobj))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsProxy_subscript_js(idobj,idkey){"use strict";try{let obj=Hiwire.get_value(idobj);let key=Hiwire.get_value(idkey);let result=obj.get(key);if(result===undefined){if(obj.has&&typeof obj.has==="function"&&!obj.has(key)){return 0}}return Hiwire.new_value(result)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsSet_Add(mapid,keyid){"use strict";try{let set=Hiwire.get_value(mapid);let key=Hiwire.get_value(keyid);set.add(key)}catch(e){Module.handle_js_error(e);return-1}return 0}function JsSet_New(){"use strict";try{return Hiwire.new_value(new Set)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function JsString_InternFromCString(str){"use strict";try{let jsstring=UTF8ToString(str);return Hiwire.intern_object(jsstring)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function _JsArray_PostProcess_helper(jscontext,array){"use strict";try{return Hiwire.new_value(Hiwire.get_value(jscontext).dict_converter(Hiwire.get_value(array)))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function _JsArray_PushEntry_helper(array,key,value){"use strict";try{Hiwire.get_value(array).push([Hiwire.get_value(key),Hiwire.get_value(value)])}catch(e){Module.handle_js_error(e);return-1}return 0}function _Py_CheckEmscriptenSignals_Helper(){if(!Module.Py_EmscriptenSignalBuffer){return 0}try{let result=Module.Py_EmscriptenSignalBuffer[0];Module.Py_EmscriptenSignalBuffer[0]=0;return result}catch(e){return 0}}function _python2js_buffer_inner(buf,itemsize,ndim,format,shape,strides,suboffsets){"use strict";try{let converter=Module.get_converter(format,itemsize);let result=Module._python2js_buffer_recursive(buf,0,{ndim:ndim,format:format,itemsize:itemsize,shape:shape,strides:strides,suboffsets:suboffsets,converter:converter});return Hiwire.new_value(result)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function array_to_js(array,len){"use strict";try{return Hiwire.new_value(Array.from(HEAP32.subarray(array/4,array/4+len)))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function console_error(msg){let jsmsg=UTF8ToString(msg);console.error(jsmsg)}function console_error_obj(obj){console.error(Hiwire.get_value(obj))}function create_once_callable(obj){"use strict";try{_Py_IncRef(obj);let alreadyCalled=!!0;function wrapper(...args){if(alreadyCalled){throw new Error("OnceProxy can only be called once")}try{return Module.callPyObject(obj,...args)}finally{wrapper.destroy()}}wrapper.destroy=function(){if(alreadyCalled){throw new Error("OnceProxy has already been destroyed")}alreadyCalled=!!1;Module.finalizationRegistry.unregister(wrapper);_Py_DecRef(obj)};Module.finalizationRegistry.register(wrapper,[obj,undefined],wrapper);return Hiwire.new_value(wrapper)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function create_promise_handles(handle_result,handle_exception,done_callback_id){"use strict";try{if(handle_result){_Py_IncRef(handle_result)}if(handle_exception){_Py_IncRef(handle_exception)}let done_callback=x=>{};if(done_callback_id){done_callback=Hiwire.get_value(done_callback_id)}let used=!!0;function checkUsed(){if(used){throw new Error("One of the promise handles has already been called.")}}function destroy(){checkUsed();used=!!1;if(handle_result){_Py_DecRef(handle_result)}if(handle_exception){_Py_DecRef(handle_exception)}}function onFulfilled(res){checkUsed();try{if(handle_result){return Module.callPyObject(handle_result,res)}}finally{done_callback(res);destroy()}}function onRejected(err){checkUsed();try{if(handle_exception){return Module.callPyObject(handle_exception,err)}}finally{done_callback(undefined);destroy()}}onFulfilled.destroy=destroy;onRejected.destroy=destroy;return Hiwire.new_value([onFulfilled,onRejected])}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function destroy_proxies(proxies_id,msg_ptr){let msg=undefined;if(msg_ptr){msg=UTF8ToString(msg_ptr)}let proxies=Hiwire.get_value(proxies_id);for(let px of proxies){Module.pyproxy_destroy(px,msg)}}function destroy_proxies_js(proxies_id){"use strict";try{for(let proxy of Hiwire.get_value(proxies_id)){proxy.destroy()}}catch(e){Module.handle_js_error(e);return-1}return 0}function destroy_proxy(proxy_id,msg_ptr){let msg=undefined;if(msg_ptr){msg=UTF8ToString(msg_ptr)}Module.pyproxy_destroy(Module.hiwire.get_value(proxy_id),msg)}function em_call_init_function(f){return Module.wasmTable.get(f)()}function fail_test(){API.fail_test=true}function ffi_call(cif,fn,rvalue,avalue){var abi=HEAPU32[(cif>>2)+0];var nargs=HEAPU32[(cif>>2)+1];var nfixedargs=HEAPU32[(cif>>2)+6];var arg_types_ptr=HEAPU32[(cif>>2)+2];var rtype_unboxed=unbox_small_structs(HEAPU32[(cif>>2)+3]);var rtype_ptr=rtype_unboxed[0];var rtype_id=rtype_unboxed[1];var orig_stack_ptr=stackSave();var cur_stack_ptr=orig_stack_ptr;var args=[];var ret_by_arg=false;if(rtype_id===15){throw new Error("complex ret marshalling nyi")}if(rtype_id<0||rtype_id>15){throw new Error("Unexpected rtype "+rtype_id)}if(rtype_id===4||rtype_id===13){args.push(rvalue);ret_by_arg=true}for(var i=0;i>2)+i];var arg_unboxed=unbox_small_structs(HEAPU32[(arg_types_ptr>>2)+i]);var arg_type_ptr=arg_unboxed[0];var arg_type_id=arg_unboxed[1];switch(arg_type_id){case 1:case 10:case 9:case 14:args.push(HEAPU32[(arg_ptr>>2)+0]);break;case 2:args.push(HEAPF32[(arg_ptr>>2)+0]);break;case 3:args.push(HEAPF64[(arg_ptr>>3)+0]);break;case 5:args.push(HEAPU8[arg_ptr+0]);break;case 6:args.push(HEAP8[arg_ptr+0]);break;case 7:args.push(HEAPU16[(arg_ptr>>1)+0]);break;case 8:args.push(HEAP16[(arg_ptr>>1)+0]);break;case 11:case 12:args.push(BigInt(HEAPU32[(arg_ptr>>2)+0*2])|BigInt(HEAPU32[(arg_ptr>>2)+0*2+1])<>2)+0*2])|BigInt(HEAPU32[(arg_ptr>>2)+0*2+1])<>2)+1*2])|BigInt(HEAPU32[(arg_ptr>>2)+1*2+1])<>2)+0];var align=HEAPU16[(arg_type_ptr+4>>1)+0];cur_stack_ptr-=size,cur_stack_ptr&=~(align-1);HEAP8.subarray(cur_stack_ptr,cur_stack_ptr+size).set(HEAP8.subarray(arg_ptr,arg_ptr+size));args.push(cur_stack_ptr);break;case 15:throw new Error("complex marshalling nyi");default:throw new Error("Unexpected type "+arg_type_id)}}if(nfixedargs!=nargs){var struct_arg_info=[];for(var i=nargs-1;i>=nfixedargs;i--){var arg_ptr=HEAPU32[(avalue>>2)+i];var arg_unboxed=unbox_small_structs(HEAPU32[(arg_types_ptr>>2)+i]);var arg_type_ptr=arg_unboxed[0];var arg_type_id=arg_unboxed[1];switch(arg_type_id){case 5:case 6:cur_stack_ptr-=1,cur_stack_ptr&=~(1-1);HEAPU8[cur_stack_ptr+0]=HEAPU8[arg_ptr+0];break;case 7:case 8:cur_stack_ptr-=2,cur_stack_ptr&=~(2-1);HEAPU16[(cur_stack_ptr>>1)+0]=HEAPU16[(arg_ptr>>1)+0];break;case 1:case 9:case 10:case 14:case 2:cur_stack_ptr-=4,cur_stack_ptr&=~(4-1);HEAPU32[(cur_stack_ptr>>2)+0]=HEAPU32[(arg_ptr>>2)+0];break;case 3:case 11:case 12:cur_stack_ptr-=8,cur_stack_ptr&=~(8-1);HEAPU32[(cur_stack_ptr>>2)+0]=HEAPU32[(arg_ptr>>2)+0];HEAPU32[(cur_stack_ptr>>2)+1]=HEAPU32[(arg_ptr>>2)+1];break;case 4:cur_stack_ptr-=16,cur_stack_ptr&=~(8-1);HEAPU32[(cur_stack_ptr>>2)+0]=HEAPU32[(arg_ptr>>2)+0];HEAPU32[(cur_stack_ptr>>2)+1]=HEAPU32[(arg_ptr>>2)+1];HEAPU32[(cur_stack_ptr>>2)+2]=HEAPU32[(arg_ptr>>2)+1];HEAPU32[(cur_stack_ptr>>2)+3]=HEAPU32[(arg_ptr>>2)+1];break;case 13:cur_stack_ptr-=4,cur_stack_ptr&=~(4-1);struct_arg_info.push([cur_stack_ptr,arg_ptr,HEAPU32[(arg_type_ptr>>2)+0],HEAPU16[(arg_type_ptr+4>>1)+0]]);break;case 15:throw new Error("complex arg marshalling nyi");default:throw new Error("Unexpected argtype "+arg_type_id)}}args.push(cur_stack_ptr);for(var i=0;i>2)+0]=cur_stack_ptr}}cur_stack_ptr-=0,cur_stack_ptr&=~(8-1);stackRestore(cur_stack_ptr);var result=wasmTable.get(fn).apply(null,args);stackRestore(orig_stack_ptr);if(ret_by_arg){return}switch(rtype_id){case 0:break;case 1:case 9:case 10:case 14:HEAPU32[(rvalue>>2)+0]=result;break;case 2:HEAPF32[(rvalue>>2)+0]=result;break;case 3:HEAPF64[(rvalue>>3)+0]=result;break;case 5:case 6:HEAPU8[rvalue+0]=result;break;case 7:case 8:HEAPU16[(rvalue>>1)+0]=result;break;case 11:case 12:HEAPU32[(rvalue>>2)+0*2]=Number(result&BigInt(4294967295))|0,HEAPU32[(rvalue>>2)+0*2+1]=Number(result>>BigInt(32))|0;break;case 15:throw new Error("complex ret marshalling nyi");default:throw new Error("Unexpected rtype "+rtype_id)}}function ffi_closure_alloc_helper(size,code){var closure=_malloc(size);var index=getEmptyTableSlot();HEAPU32[(code>>2)+0]=index;HEAPU32[(closure>>2)+0]=index;return closure}function ffi_closure_free_helper(closure){var index=HEAPU32[(closure>>2)+0];freeTableIndexes.push(index);_free(closure)}function ffi_prep_closure_loc_helper(closure,cif,fun,user_data,codeloc){var abi=HEAPU32[(cif>>2)+0];var nargs=HEAPU32[(cif>>2)+1];var nfixedargs=HEAPU32[(cif>>2)+6];var arg_types_ptr=HEAPU32[(cif>>2)+2];var rtype_unboxed=unbox_small_structs(HEAPU32[(cif>>2)+3]);var rtype_ptr=rtype_unboxed[0];var rtype_id=rtype_unboxed[1];var sig;var ret_by_arg=false;switch(rtype_id){case 0:sig="v";break;case 13:case 4:sig="vi";ret_by_arg=true;break;case 1:case 5:case 6:case 7:case 8:case 9:case 10:case 14:sig="i";break;case 2:sig="f";break;case 3:sig="d";break;case 11:case 12:sig="j";break;case 15:throw new Error("complex ret marshalling nyi");default:throw new Error("Unexpected rtype "+rtype_id)}var unboxed_arg_type_id_list=[];var unboxed_arg_type_info_list=[];for(var i=0;i>2)+i]);var arg_type_ptr=arg_unboxed[0];var arg_type_id=arg_unboxed[1];unboxed_arg_type_id_list.push(arg_type_id);unboxed_arg_type_info_list.push([HEAPU32[(arg_type_ptr>>2)+0],HEAPU16[(arg_type_ptr+4>>1)+0]])}for(var i=0;i>2)+carg_idx]=cur_ptr;HEAPU8[cur_ptr+0]=cur_arg;break;case 7:case 8:cur_ptr-=2,cur_ptr&=~(4-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPU16[(cur_ptr>>1)+0]=cur_arg;break;case 1:case 9:case 10:case 14:cur_ptr-=4,cur_ptr&=~(4-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPU32[(cur_ptr>>2)+0]=cur_arg;break;case 13:cur_ptr-=arg_size,cur_ptr&=~(arg_align-1);HEAP8.subarray(cur_ptr,cur_ptr+arg_size).set(HEAP8.subarray(cur_arg,cur_arg+arg_size));HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;break;case 2:cur_ptr-=4,cur_ptr&=~(4-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPF32[(cur_ptr>>2)+0]=cur_arg;break;case 3:cur_ptr-=8,cur_ptr&=~(8-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPF64[(cur_ptr>>3)+0]=cur_arg;break;case 11:case 12:cur_ptr-=8,cur_ptr&=~(8-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPU32[(cur_ptr>>2)+0*2]=Number(cur_arg&BigInt(4294967295))|0,HEAPU32[(cur_ptr>>2)+0*2+1]=Number(cur_arg>>BigInt(32))|0;break;case 4:cur_ptr-=16,cur_ptr&=~(8-1);HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr;HEAPU32[(cur_ptr>>2)+0*2]=Number(cur_arg&BigInt(4294967295))|0,HEAPU32[(cur_ptr>>2)+0*2+1]=Number(cur_arg>>BigInt(32))|0;cur_arg=args[jsarg_idx++];HEAPU32[(cur_ptr>>2)+1*2]=Number(cur_arg&BigInt(4294967295))|0,HEAPU32[(cur_ptr>>2)+1*2+1]=Number(cur_arg>>BigInt(32))|0;break}}var varargs=args[args.length-1];for(var carg_idx=nfixedargs;carg_idx>2)+0];cur_ptr-=arg_size,cur_ptr&=~(arg_align-1);HEAP8.subarray(cur_ptr,cur_ptr+arg_size).set(HEAP8.subarray(struct_ptr,struct_ptr+arg_size));HEAPU32[(args_ptr>>2)+carg_idx]=cur_ptr}else{HEAPU32[(args_ptr>>2)+carg_idx]=varargs}varargs+=4}cur_ptr-=0,cur_ptr&=~(8-1);stackRestore(cur_ptr);wasmTable.get(HEAPU32[(closure>>2)+2]).apply(null,[HEAPU32[(closure>>2)+1],ret_ptr,args_ptr,HEAPU32[(closure>>2)+3]]);stackRestore(orig_stack_ptr);if(!ret_by_arg){switch(sig[0]){case"i":return HEAPU32[(ret_ptr>>2)+0];case"j":return BigInt(HEAPU32[(ret_ptr>>2)+0*2])|BigInt(HEAPU32[(ret_ptr>>2)+0*2+1])<>3)+0];case"f":return HEAPF32[(ret_ptr>>2)+0]}}}try{var wasm_trampoline=convertJsFunctionToWasm(trampoline,sig)}catch(e){return FFI_BAD_TYPEDEF}wasmTable.set(codeloc,wasm_trampoline);HEAPU32[(closure>>2)+1]=cif;HEAPU32[(closure>>2)+2]=fun;HEAPU32[(closure>>2)+3]=user_data;return 0}function get_async_js_call_done_callback(proxies_id){"use strict";try{let proxies=Hiwire.get_value(proxies_id);return Hiwire.new_value(function(result){let msg="This borrowed proxy was automatically destroyed "+"at the end of an asynchronous function call. Try "+"using create_proxy or create_once_callable.";for(let px of proxies){Module.pyproxy_destroy(px,msg)}if(API.isPyProxy(result)){Module.pyproxy_destroy(result,msg)}})}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function getter_call_trampoline(get,obj,closure){return wasmTable.get(get)(obj,closure)}function hiwire_CallMethod(idobj,name,idargs){"use strict";try{let jsobj=Hiwire.get_value(idobj);let jsname=Hiwire.get_value(name);let jsargs=Hiwire.get_value(idargs);return Hiwire.new_value(jsobj[jsname](...jsargs))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_CallMethodString(idobj,name,idargs){"use strict";try{let jsobj=Hiwire.get_value(idobj);let jsname=UTF8ToString(name);let jsargs=Hiwire.get_value(idargs);return Hiwire.new_value(jsobj[jsname](...jsargs))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_CallMethod_OneArg(idobj,name,idarg){"use strict";try{let jsobj=Hiwire.get_value(idobj);let jsname=Hiwire.get_value(name);let jsarg=Hiwire.get_value(idarg);return Hiwire.new_value(jsobj[jsname](jsarg))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_HasMethod(obj_id,name){let obj=Hiwire.get_value(obj_id);return obj&&typeof obj[Hiwire.get_value(name)]==="function"}function hiwire_assign_from_ptr(idobj,ptr){"use strict";try{let jsobj=Hiwire.get_value(idobj);Module.typedArrayAsUint8Array(jsobj).set(Module.HEAPU8.subarray(ptr,ptr+jsobj.byteLength))}catch(e){Module.handle_js_error(e);return-1}return 0}function hiwire_assign_to_ptr(idobj,ptr){"use strict";try{let jsobj=Hiwire.get_value(idobj);Module.HEAPU8.set(Module.typedArrayAsUint8Array(jsobj),ptr)}catch(e){Module.handle_js_error(e);return-1}return 0}function hiwire_call(idfunc,idargs){"use strict";try{let jsfunc=Hiwire.get_value(idfunc);let jsargs=Hiwire.get_value(idargs);return Hiwire.new_value(jsfunc(...jsargs))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_call_OneArg(idfunc,idarg){"use strict";try{let jsfunc=Hiwire.get_value(idfunc);let jsarg=Hiwire.get_value(idarg);return Hiwire.new_value(jsfunc(jsarg))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_call_bound(idfunc,idthis,idargs){"use strict";try{let func=Hiwire.get_value(idfunc);let this_;if(idthis===0){this_=null}else{this_=Hiwire.get_value(idthis)}let args=Hiwire.get_value(idargs);return Hiwire.new_value(func.apply(this_,args))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_construct(idobj,idargs){"use strict";try{let jsobj=Hiwire.get_value(idobj);let jsargs=Hiwire.get_value(idargs);return Hiwire.new_value(Reflect.construct(jsobj,jsargs))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_constructor_name(idobj){"use strict";try{return stringToNewUTF8(Hiwire.get_value(idobj).constructor.name)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_decref(idval){Hiwire.decref(idval)}function hiwire_double(val){"use strict";try{return Hiwire.new_value(val)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_equal(ida,idb){return!!(Hiwire.get_value(ida)===Hiwire.get_value(idb))}function hiwire_get_bool(idobj){let val=Hiwire.get_value(idobj);if(!val){return false}if(val.size===0){return false}if(Array.isArray(val)&&val.length===0){return false}return true}function hiwire_get_buffer_info(idobj,byteLength_ptr,format_ptr,size_ptr,checked_ptr){let jsobj=Hiwire.get_value(idobj);let byteLength=jsobj.byteLength;let[format_utf8,size,checked]=Module.get_buffer_datatype(jsobj);HEAPU32[(byteLength_ptr>>2)+0]=byteLength;HEAPU32[(format_ptr>>2)+0]=format_utf8;HEAPU32[(size_ptr>>2)+0]=size;HEAPU8[checked_ptr+0]=checked}function hiwire_get_iterator(idobj){"use strict";try{let jsobj=Hiwire.get_value(idobj);return Hiwire.new_value(jsobj[Symbol.iterator]())}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_get_length(idobj){"use strict";try{let val=Hiwire.get_value(idobj);if(typeof val.size==="number"){return val.size}if(typeof val.length==="number"){return val.length}return-1}catch(e){Module.handle_js_error(e);return-1}return 0}function hiwire_greater_than(ida,idb){return!!(Hiwire.get_value(ida)>Hiwire.get_value(idb))}function hiwire_greater_than_equal(ida,idb){return!!(Hiwire.get_value(ida)>=Hiwire.get_value(idb))}function hiwire_has_length(idobj){let val=Hiwire.get_value(idobj);return typeof val.size==="number"||typeof val.length==="number"&&typeof val!=="function"}function hiwire_incref(idval){if(idval&1){Hiwire.incref(idval)}return idval}function hiwire_init(){"use strict";try{let _hiwire={objects:new Map,counter:new Uint32Array([1])};Hiwire.UNDEFINED=HEAPU8[_Js_undefined+0];Hiwire.JSNULL=HEAPU8[_Js_null+0];Hiwire.TRUE=HEAPU8[_Js_true+0];Hiwire.FALSE=HEAPU8[_Js_false+0];_hiwire.objects.set(Hiwire.UNDEFINED,[undefined,-1]);_hiwire.objects.set(Hiwire.JSNULL,[null,-1]);_hiwire.objects.set(Hiwire.TRUE,[!!1,-1]);_hiwire.objects.set(Hiwire.FALSE,[!!0,-1]);let hiwire_next_permanent=Hiwire.FALSE+2;Hiwire.new_value=function(jsval){while(_hiwire.objects.has(_hiwire.counter[0])){_hiwire.counter[0]+=2}let idval=_hiwire.counter[0];_hiwire.objects.set(idval,[jsval,1]);_hiwire.counter[0]+=2;return idval};Hiwire.intern_object=function(obj){let id=hiwire_next_permanent;hiwire_next_permanent+=2;_hiwire.objects.set(id,[obj,-1]);return id};Hiwire.num_keys=function(){return Array.from(_hiwire.objects.keys()).filter(x=>x%2).length};Hiwire.get_value=function(idval){if(!idval){API.fail_test=!!1;if(_PyErr_Occurred()){let exc=_wrap_exception();let e=Hiwire.pop_value(exc);console.error(`Internal error: Argument '${idval}' to hiwire.get_value is falsy. `+"This was probably because the Python error indicator was set when get_value was called. "+"The Python error that caused this was:",e);throw e}else{console.error(`Internal error: Argument '${idval}' to hiwire.get_value is falsy`+" (but error indicator is not set).");throw new Error(`Internal error: Argument '${idval}' to hiwire.get_value is falsy`+" (but error indicator is not set).")}}if(!_hiwire.objects.has(idval)){console.error(`Undefined id ${idval}`);throw new Error(`Undefined id ${idval}`)}return _hiwire.objects.get(idval)[0]};Hiwire.decref=function(idval){if((idval&1)===0){return}let new_refcnt=--_hiwire.objects.get(idval)[1];if(new_refcnt===0){_hiwire.objects.delete(idval)}};Hiwire.incref=function(idval){_hiwire.objects.get(idval)[1]++};Hiwire.pop_value=function(idval){let result=Hiwire.get_value(idval);Hiwire.decref(idval);return result};Hiwire.isPromise=function(obj){try{return!!obj&&typeof obj.then==="function"}catch(e){return!!0}};Module.typedArrayAsUint8Array=function(arg){if(arg.buffer!==undefined){return new Uint8Array(arg.buffer,arg.byteOffset,arg.byteLength)}else{return new Uint8Array(arg)}};{let dtypes_str=["b","B","h","H","i","I","f","d"].join(String.fromCharCode(0));let dtypes_ptr=stringToNewUTF8(dtypes_str);let dtypes_map={};for(let[idx,val]of Object.entries(dtypes_str)){dtypes_map[val]=dtypes_ptr+Number(idx)}let buffer_datatype_map=new Map([["Int8Array",[dtypes_map["b"],1,!!1]],["Uint8Array",[dtypes_map["B"],1,!!1]],["Uint8ClampedArray",[dtypes_map["B"],1,!!1]],["Int16Array",[dtypes_map["h"],2,!!1]],["Uint16Array",[dtypes_map["H"],2,!!1]],["Int32Array",[dtypes_map["i"],4,!!1]],["Uint32Array",[dtypes_map["I"],4,!!1]],["Float32Array",[dtypes_map["f"],4,!!1]],["Float64Array",[dtypes_map["d"],8,!!1]],["DataView",[dtypes_map["B"],1,!!0]],["ArrayBuffer",[dtypes_map["B"],1,!!0]]]);Module.get_buffer_datatype=function(jsobj){return buffer_datatype_map.get(jsobj.constructor.name)||[0,0,!!0]}}if(globalThis.BigInt){Module.BigInt=BigInt}else{Module.BigInt=Number}return 0}catch(e){Module.handle_js_error(e);return-1}return 0}function hiwire_int(val){"use strict";try{return Hiwire.new_value(val)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_int_from_digits(digits,ndigits){"use strict";try{let result=BigInt(0);for(let i=0;i>2)+i])<>2)+ndigits-1]&2147483648)<>2)+0]=result_id;return done}catch(e){Module.handle_js_error(e);return-1}return 0}function hiwire_not_equal(ida,idb){return!!(Hiwire.get_value(ida)!==Hiwire.get_value(idb))}function hiwire_read_from_file(idobj,fd){"use strict";try{let jsobj=Hiwire.get_value(idobj);let uint8_buffer=Module.typedArrayAsUint8Array(jsobj);let stream=Module.FS.streams[fd];Module.FS.read(stream,uint8_buffer,0,uint8_buffer.byteLength)}catch(e){Module.handle_js_error(e);return-1}return 0}function hiwire_resolve_promise(idobj){"use strict";try{let obj=Hiwire.get_value(idobj);let result=Promise.resolve(obj);return Hiwire.new_value(result)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_string_ascii(ptr){"use strict";try{return Hiwire.new_value(AsciiToString(ptr))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_string_ucs1(ptr,len){"use strict";try{let jsstr="";for(let i=0;i>1)+i])}return Hiwire.new_value(jsstr)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_string_ucs4(ptr,len){"use strict";try{let jsstr="";for(let i=0;i>2)+i])}return Hiwire.new_value(jsstr)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_string_utf8(ptr){"use strict";try{return Hiwire.new_value(UTF8ToString(ptr))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_subarray(idarr,start,end){"use strict";try{let jsarr=Hiwire.get_value(idarr);let jssub=jsarr.subarray(start,end);return Hiwire.new_value(jssub)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_throw_error(iderr){throw Hiwire.pop_value(iderr)}function hiwire_to_bool(val){return!!Hiwire.get_value(val)}function hiwire_to_string(idobj){"use strict";try{return Hiwire.new_value(Hiwire.get_value(idobj).toString())}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_typeof(idobj){"use strict";try{return Hiwire.new_value(typeof Hiwire.get_value(idobj))}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function hiwire_write_to_file(idobj,fd){"use strict";try{let jsobj=Hiwire.get_value(idobj);let uint8_buffer=Module.typedArrayAsUint8Array(jsobj);let stream=Module.FS.streams[fd];Module.FS.write(stream,uint8_buffer,0,uint8_buffer.byteLength)}catch(e){Module.handle_js_error(e);return-1}return 0}function js2python(id){"use strict";try{let value=Hiwire.get_value(id);let result=Module.js2python_convertImmutable(value);if(result!==undefined){return result}return _JsProxy_create(id)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function js2python_convert(id,depth,default_converter){"use strict";try{let defaultConverter=default_converter?Module.hiwire.get_value(default_converter):undefined;return Module.js2python_convert(id,{depth:depth,defaultConverter:defaultConverter})}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function js2python_init(){"use strict";try{{0;let PropagateError=Module._PropagatePythonError;function js2python_string(value){let max_code_point=0;let num_code_points=0;for(let c of value){num_code_points++;let code_point=c.codePointAt(0);max_code_point=code_point>max_code_point?code_point:max_code_point}let result=_PyUnicode_New(num_code_points,max_code_point);if(result===0){throw new PropagateError}let ptr=_PyUnicode_Data(result);if(max_code_point>65535){for(let c of value){HEAPU32[ptr/4]=c.codePointAt(0);ptr+=4}}else if(max_code_point>255){for(let c of value){HEAPU16[ptr/2]=c.codePointAt(0);ptr+=2}}else{for(let c of value){HEAPU8[ptr]=c.codePointAt(0);ptr+=1}}return result}function js2python_bigint(value){let value_orig=value;let length=0;if(value<0){value=-value}while(value){length++;value>>=BigInt(32)}let stackTop=stackSave();let ptr=stackAlloc(length*4);value=value_orig;for(let i=0;i>2)+i]=Number(value&BigInt(4294967295));value>>=BigInt(32)}let result=__PyLong_FromByteArray(ptr,length*4,!!1,!!1);stackRestore(stackTop);return result}function js2python_convertImmutable(value){let result=js2python_convertImmutableInner(value);if(result===0){throw new PropagateError}return result}Module.js2python_convertImmutable=js2python_convertImmutable;function js2python_convertImmutableInner(value){let type=typeof value;if(type==="string"){return js2python_string(value)}else if(type==="number"){if(Number.isSafeInteger(value)){return _PyLong_FromDouble(value)}else{return _PyFloat_FromDouble(value)}}else if(type==="bigint"){return js2python_bigint(value)}else if(value===undefined||value===null){return __js2python_none()}else if(value===!!1){return __js2python_true()}else if(value===!!0){return __js2python_false()}else if(API.isPyProxy(value)){return __js2python_pyproxy(Module.PyProxy_getPtr(value))}return undefined}function js2python_convertList(obj,context){let list=_PyList_New(obj.length);if(list===0){return 0}let entryid=0;let item=0;try{context.cache.set(obj,list);for(let i=0;i2){throw new Error("Expected format string to have length <= 2, "+`got '${formatStr}'.`+errorMessage)}let formatChar=formatStr.slice(-1);let alignChar=formatStr.slice(0,-1);let bigEndian;switch(alignChar){case"!":case">":bigEndian=!!1;break;case"<":case"@":case"=":case"":bigEndian=!!0;break;default:throw new Error(`Unrecognized alignment character ${alignChar}.`+errorMessage)}let arrayType;switch(formatChar){case"b":arrayType=Int8Array;break;case"s":case"p":case"c":case"B":case"?":arrayType=Uint8Array;break;case"h":arrayType=Int16Array;break;case"H":arrayType=Uint16Array;break;case"i":case"l":case"n":arrayType=Int32Array;break;case"I":case"L":case"N":case"P":arrayType=Uint32Array;break;case"q":if(globalThis.BigInt64Array===undefined){throw new Error("BigInt64Array is not supported on this browser."+errorMessage)}arrayType=BigInt64Array;break;case"Q":if(globalThis.BigUint64Array===undefined){throw new Error("BigUint64Array is not supported on this browser."+errorMessage)}arrayType=BigUint64Array;break;case"f":arrayType=Float32Array;break;case"d":arrayType=Float64Array;break;case"e":throw new Error("Javascript has no Float16 support.");default:throw new Error(`Unrecognized format character '${formatChar}'.`+errorMessage)}return[arrayType,bigEndian]};Module.python2js_buffer_1d_contiguous=function(ptr,stride,n){"use strict";let byteLength=stride*n;return HEAP8.slice(ptr,ptr+byteLength).buffer};Module.python2js_buffer_1d_noncontiguous=function(ptr,stride,suboffset,n,itemsize){"use strict";let byteLength=itemsize*n;let buffer=new Uint8Array(byteLength);for(let i=0;i=0){curptr=HEAPU32[(curptr>>2)+0]+suboffset}buffer.set(HEAP8.subarray(curptr,curptr+itemsize),i*itemsize)}return buffer.buffer};Module._python2js_buffer_recursive=function(ptr,curdim,bufferData){"use strict";let n=HEAPU32[(bufferData.shape>>2)+curdim];let stride=HEAP32[(bufferData.strides>>2)+curdim];let suboffset=-1;if(bufferData.suboffsets!==0){suboffset=HEAP32[(bufferData.suboffsets>>2)+curdim]}if(curdim===bufferData.ndim-1){let arraybuffer;if(stride===bufferData.itemsize&&suboffset<0){arraybuffer=Module.python2js_buffer_1d_contiguous(ptr,stride,n)}else{arraybuffer=Module.python2js_buffer_1d_noncontiguous(ptr,stride,suboffset,n,bufferData.itemsize)}return bufferData.converter(arraybuffer)}let result=[];for(let i=0;i=0){curptr=HEAPU32[(curptr>>2)+0]+suboffset}result.push(Module._python2js_buffer_recursive(curPtr,curdim+1,bufferData))}return result};Module.get_converter=function(format,itemsize){"use strict";let formatStr=UTF8ToString(format);let[ArrayType,bigEndian]=Module.processBufferFormatString(formatStr);let formatChar=formatStr.slice(-1);switch(formatChar){case"s":let decoder=new TextDecoder("utf8");return buff=>decoder.decode(buff);case"?":return buff=>Array.from(new Uint8Array(buff),x=>!!x)}if(!bigEndian){return buff=>new ArrayType(buff)}let getFuncName;let setFuncName;switch(itemsize){case 2:getFuncName="getUint16";setFuncName="setUint16";break;case 4:getFuncName="getUint32";setFuncName="setUint32";break;case 8:getFuncName="getFloat64";setFuncName="setFloat64";break;default:throw new Error(`Unexpected size ${itemsize}`)}function swapFunc(buff){let dataview=new DataView(buff);let getFunc=dataview[getFuncName].bind(dataview);let setFunc=dataview[setFuncName].bind(dataview);for(let byte=0;bytenew ArrayType(swapFunc(buff))}}return 0}catch(e){Module.handle_js_error(e);return-1}return 0}function python2js_custom__create_jscontext(context,cache,dict_converter,default_converter){"use strict";try{let jscontext={};if(dict_converter!==0){jscontext.dict_converter=Hiwire.get_value(dict_converter)}if(default_converter!==0){jscontext.default_converter=Hiwire.get_value(default_converter);jscontext.cacheConversion=function(input,output){if(!API.isPyProxy(input)){throw new TypeError("The first argument to cacheConversion must be a PyProxy.")}let input_ptr=Module.PyProxy_getPtr(input);let output_key=Hiwire.new_value(output);__python2js_add_to_cache(cache,input_ptr,output_key);Hiwire.decref(output_key)};jscontext.converter=function(x){if(!API.isPyProxy(x)){return x}let ptr=Module.PyProxy_getPtr(x);let res=__python2js(context,ptr);return Hiwire.pop_value(res)}}return Hiwire.new_value(jscontext)}catch(e){Module.handle_js_error(e);return 0}throw new Error("Assertion error: control reached end of function without return")}function setter_call_trampoline(set,obj,value,closure){return wasmTable.get(set)(obj,value,closure)}function unbox_small_structs(type_ptr){var type_id=HEAPU16[(type_ptr+6>>1)+0];while(type_id===13){var elements=HEAPU32[(type_ptr+8>>2)+0];var first_element=HEAPU32[(elements>>2)+0];if(first_element===0){type_id=0;break}else if(HEAPU32[(elements>>2)+1]===0){type_ptr=first_element;type_id=HEAPU16[(first_element+6>>1)+0]}else{break}}return[type_ptr,type_id]}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate==="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=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}Module["_emscripten_set_main_loop_timing"]=_emscripten_set_main_loop_timing;_emscripten_set_main_loop_timing.sig="iii";var _emscripten_get_now;if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else _emscripten_get_now=function(){return performance.now()};Module["_emscripten_get_now"]=_emscripten_get_now;function runtimeKeepalivePush(){runtimeKeepaliveCounter+=1}Module["runtimeKeepalivePush"]=runtimeKeepalivePush;runtimeKeepalivePush.sig="v";function _exit(status){exit(status)}Module["_exit"]=_exit;_exit.sig="vi";function handleException(e){if(e instanceof ExitStatus||e==="unwind"){return}if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}Module["handleException"]=handleException;function maybeExit(){if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}}Module["maybeExit"]=maybeExit;function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}out('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL==="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}}Module["setMainLoop"]=setMainLoop;function callUserCallback(func,synchronous){if(ABORT){return}if(synchronous){func();return}try{func()}catch(e){handleException(e)}}Module["callUserCallback"]=callUserCallback;function safeSetTimeout(func,timeout){return setTimeout(function(){callUserCallback(func)},timeout)}Module["safeSetTimeout"]=safeSetTimeout;function runtimeKeepalivePop(){runtimeKeepaliveCounter-=1}Module["runtimeKeepalivePop"]=runtimeKeepalivePop;runtimeKeepalivePop.sig="v";var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);var wasmPlugin={"asyncWasmLoadPromise":new Promise(function(resolve,reject){return resolve()}),"canHandle":function(name){return!Module.noWasmDecoding&&name.endsWith(".so")},"handle":function(byteArray,name,onload,onerror){this["asyncWasmLoadPromise"]=this["asyncWasmLoadPromise"].then(function(){return loadWebAssemblyModule(byteArray,{loadAsync:true,nodelete:true})}).then(function(module){Module["preloadedWasm"][name]=module;onload()},function(err){console.warn("Couldn't instantiate wasm: "+name+" '"+err+"'");onerror()})}};Module["preloadPlugins"].push(wasmPlugin);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)},safeSetTimeout:function(func){return safeSetTimeout(func)},safeRequestAnimationFrame:function(func){return Browser.requestAnimationFrame(function(){callUserCallback(func)})},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(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/h0){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)}}}Module["callRuntimeCallbacks"]=callRuntimeCallbacks;function demangle(func){demangle.recursionGuard=(demangle.recursionGuard|0)+1;if(demangle.recursionGuard>1)return func;var __cxa_demangle_func=Module["___cxa_demangle"]||Module["__cxa_demangle"];assert(__cxa_demangle_func);var stackTop=stackSave();try{var s=func;if(s.startsWith("__Z"))s=s.substr(1);var len=lengthBytesUTF8(s)+1;var buf=stackAlloc(len);stringToUTF8(s,buf,len);var status=stackAlloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(HEAP32[status>>2]===0&&ret){return UTF8ToString(ret)}}catch(e){}finally{_free(ret);stackRestore(stackTop);if(demangle.recursionGuard<2)--demangle.recursionGuard}return func}Module["demangle"]=demangle;function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}Module["demangleAll"]=demangleAll;function getDylinkMetadata(binary){var next=0;function getLEB(){var ret=0;var mul=1;while(1){var byte=binary[next++];ret+=(byte&127)*mul;mul*=128;if(!(byte&128))break}return ret}if(binary instanceof WebAssembly.Module){var dylinkSection=WebAssembly.Module.customSections(binary,"dylink");assert(dylinkSection.length!=0,"need dylink section");binary=new Int8Array(dylinkSection[0])}else{var int32View=new Uint32Array(new Uint8Array(binary.subarray(0,24)).buffer);assert(int32View[0]==1836278016,"need to see wasm magic number");assert(binary[8]===0,"need the dylink section to be first");next=9;getLEB();assert(binary[next]===6);next++;assert(binary[next]==="d".charCodeAt(0));next++;assert(binary[next]==="y".charCodeAt(0));next++;assert(binary[next]==="l".charCodeAt(0));next++;assert(binary[next]==="i".charCodeAt(0));next++;assert(binary[next]==="n".charCodeAt(0));next++;assert(binary[next]==="k".charCodeAt(0));next++}var customSection={};customSection.memorySize=getLEB();customSection.memoryAlign=getLEB();customSection.tableSize=getLEB();customSection.tableAlign=getLEB();var neededDynlibsCount=getLEB();customSection.neededDynlibs=[];for(var i=0;i>2]=stdTimezoneOffset*60;HEAP32[__get_daylight()>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset>2]=winterNamePtr;HEAP32[__get_tzname()+4>>2]=summerNamePtr}else{HEAP32[__get_tzname()>>2]=summerNamePtr;HEAP32[__get_tzname()+4>>2]=winterNamePtr}}Module["_tzset_impl"]=_tzset_impl;_tzset_impl.sig="v";function _tzset(){if(_tzset.called)return;_tzset.called=true;_tzset_impl()}Module["_tzset"]=_tzset;_tzset.sig="v";function _mktime(tmPtr){_tzset();var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();return date.getTime()/1e3|0}Module["_mktime"]=_mktime;_mktime.sig="ii";function ___asctime(tmPtr,buf){var date={tm_sec:HEAP32[tmPtr>>2],tm_min:HEAP32[tmPtr+4>>2],tm_hour:HEAP32[tmPtr+8>>2],tm_mday:HEAP32[tmPtr+12>>2],tm_mon:HEAP32[tmPtr+16>>2],tm_year:HEAP32[tmPtr+20>>2],tm_wday:HEAP32[tmPtr+24>>2]};var days=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];var months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];var s=days[date.tm_wday]+" "+months[date.tm_mon]+(date.tm_mday<10?" ":" ")+date.tm_mday+(date.tm_hour<10?" 0":" ")+date.tm_hour+(date.tm_min<10?":0":":")+date.tm_min+(date.tm_sec<10?":0":":")+date.tm_sec+" "+(1900+date.tm_year)+"\n";stringToUTF8(s,buf,26);return buf}Module["___asctime"]=___asctime;___asctime.sig="iii";function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}Module["___assert_fail"]=___assert_fail;___assert_fail.sig="viiii";var _emscripten_get_now_is_monotonic=true;Module["_emscripten_get_now_is_monotonic"]=_emscripten_get_now_is_monotonic;function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}Module["setErrNo"]=setErrNo;function _clock_gettime(clk_id,tp){var now;if(clk_id===0){now=Date.now()}else if((clk_id===1||clk_id===4)&&_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{setErrNo(28);return-1}HEAP32[tp>>2]=now/1e3|0;HEAP32[tp+4>>2]=now%1e3*1e3*1e3|0;return 0}Module["_clock_gettime"]=_clock_gettime;_clock_gettime.sig="iii";function ___clock_gettime(a0,a1){return _clock_gettime(a0,a1)}Module["___clock_gettime"]=___clock_gettime;___clock_gettime.sig="iii";function ___cxa_allocate_exception(size){return _malloc(size+16)+16}Module["___cxa_allocate_exception"]=___cxa_allocate_exception;___cxa_allocate_exception.sig="vi";function _atexit(func,arg){}Module["_atexit"]=_atexit;_atexit.sig="iii";function ___cxa_atexit(a0,a1){return _atexit(a0,a1)}Module["___cxa_atexit"]=___cxa_atexit;___cxa_atexit.sig="iii";function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-16;this.set_type=function(type){HEAP32[this.ptr+4>>2]=type};this.get_type=function(){return HEAP32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+8>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr>>2];HEAP32[this.ptr>>2]=prev-1;return prev===1}}Module["ExceptionInfo"]=ExceptionInfo;function CatchInfo(ptr){this.free=function(){_free(this.ptr);this.ptr=0};this.set_base_ptr=function(basePtr){HEAP32[this.ptr>>2]=basePtr};this.get_base_ptr=function(){return HEAP32[this.ptr>>2]};this.set_adjusted_ptr=function(adjustedPtr){HEAP32[this.ptr+4>>2]=adjustedPtr};this.get_adjusted_ptr_addr=function(){return this.ptr+4};this.get_adjusted_ptr=function(){return HEAP32[this.ptr+4>>2]};this.get_exception_ptr=function(){var isPointer=Module["___cxa_is_pointer_type"](this.get_exception_info().get_type());if(isPointer){return HEAP32[this.get_base_ptr()>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.get_base_ptr()};this.get_exception_info=function(){return new ExceptionInfo(this.get_base_ptr())};if(ptr===undefined){this.ptr=_malloc(8);this.set_adjusted_ptr(0)}else{this.ptr=ptr}}Module["CatchInfo"]=CatchInfo;var exceptionCaught=[];Module["exceptionCaught"]=exceptionCaught;function exception_addRef(info){info.add_ref()}Module["exception_addRef"]=exception_addRef;var uncaughtExceptionCount=0;Module["uncaughtExceptionCount"]=uncaughtExceptionCount;function ___cxa_begin_catch(ptr){var catchInfo=new CatchInfo(ptr);var info=catchInfo.get_exception_info();if(!info.get_caught()){info.set_caught(true);uncaughtExceptionCount--}info.set_rethrown(false);exceptionCaught.push(catchInfo);exception_addRef(info);return catchInfo.get_exception_ptr()}Module["___cxa_begin_catch"]=___cxa_begin_catch;function ___cxa_current_primary_exception(){if(!exceptionCaught.length){return 0}var catchInfo=exceptionCaught[exceptionCaught.length-1];exception_addRef(catchInfo.get_exception_info());return catchInfo.get_base_ptr()}Module["___cxa_current_primary_exception"]=___cxa_current_primary_exception;function ___cxa_free_exception(ptr){return _free(new ExceptionInfo(ptr).ptr)}Module["___cxa_free_exception"]=___cxa_free_exception;___cxa_free_exception.sig="vi";function exception_decRef(info){if(info.release_ref()&&!info.get_rethrown()){var destructor=info.get_destructor();if(destructor){wasmTable.get(destructor)(info.excPtr)}___cxa_free_exception(info.excPtr)}}Module["exception_decRef"]=exception_decRef;function ___cxa_decrement_exception_refcount(ptr){if(!ptr)return;exception_decRef(new ExceptionInfo(ptr))}Module["___cxa_decrement_exception_refcount"]=___cxa_decrement_exception_refcount;var exceptionLast=0;Module["exceptionLast"]=exceptionLast;function ___cxa_end_catch(){_setThrew(0);var catchInfo=exceptionCaught.pop();exception_decRef(catchInfo.get_exception_info());catchInfo.free();exceptionLast=0}Module["___cxa_end_catch"]=___cxa_end_catch;___cxa_end_catch.sig="v";function ___resumeException(catchInfoPtr){var catchInfo=new CatchInfo(catchInfoPtr);var ptr=catchInfo.get_base_ptr();if(!exceptionLast){exceptionLast=ptr}catchInfo.free();throw ptr}Module["___resumeException"]=___resumeException;function ___cxa_find_matching_catch_2(){var thrown=exceptionLast;if(!thrown){setTempRet0(0);return 0|0}var info=new ExceptionInfo(thrown);var thrownType=info.get_type();var catchInfo=new CatchInfo;catchInfo.set_base_ptr(thrown);catchInfo.set_adjusted_ptr(thrown);if(!thrownType){setTempRet0(0);return catchInfo.ptr|0}var typeArray=Array.prototype.slice.call(arguments);for(var i=0;i>2]*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();HEAP32[tmPtr+36>>2]=0;HEAP32[tmPtr+32>>2]=0;var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;if(!_gmtime_r.GMTString)_gmtime_r.GMTString=allocateUTF8("GMT");HEAP32[tmPtr+40>>2]=_gmtime_r.GMTString;return tmPtr}Module["_gmtime_r"]=_gmtime_r;_gmtime_r.sig="iii";function ___gmtime_r(a0,a1){return _gmtime_r(a0,a1)}Module["___gmtime_r"]=___gmtime_r;___gmtime_r.sig="iii";function _localtime_r(time,tmPtr){_tzset();var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst;var zonePtr=HEAP32[__get_tzname()+(dst?4:0)>>2];HEAP32[tmPtr+40>>2]=zonePtr;return tmPtr}Module["_localtime_r"]=_localtime_r;_localtime_r.sig="iii";function ___localtime_r(a0,a1){return _localtime_r(a0,a1)}Module["___localtime_r"]=___localtime_r;___localtime_r.sig="iii";function ___map_file(pathname,size){setErrNo(63);return-1}Module["___map_file"]=___map_file;var __sigalrm_handler=0;Module["__sigalrm_handler"]=__sigalrm_handler;function ___sigaction(sig,act,oldact){if(sig==14){__sigalrm_handler=HEAP32[act>>2];return 0}return 0}Module["___sigaction"]=___sigaction;___sigaction.sig="viii";var ___stack_pointer=new WebAssembly.Global({"value":"i32","mutable":true},8404752);Module["___stack_pointer"]=___stack_pointer;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)}};Module["PATH"]=PATH;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")}}Module["getRandomDevice"]=getRandomDevice;var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};Module["TTY"]=TTY;function zeroMemory(address,size){HEAPU8.fill(0,address,address+size)}Module["zeroMemory"]=zeroMemory;function mmapAlloc(size){size=alignMemory(size,65536);var ptr=_memalign(65536,size);if(!ptr)return 0;zeroMemory(ptr,size);return ptr}Module["mmapAlloc"]=mmapAlloc;var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}return stat.mode},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},flagsForNode:function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(28)}},node_ops:{getattr:function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},lookup:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)},mknod:function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}return node},rename:function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}oldNode.name=newName},unlink:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},rmdir:function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},readdir:function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},readlink:function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}}},stream_ops:{open:function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},close:function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},read:function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,Buffer.from(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},write:function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,Buffer.from(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(NODEFS.convertNodeCode(e))}}}if(position<0){throw new FS.ErrnoError(28)}return position},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=mmapAlloc(length);NODEFS.stream_ops.read(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}},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=NODEFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};Module["NODEFS"]=NODEFS;var WORKERFS={DIR_MODE:16895,FILE_MODE:33279,reader:null,mount:function(mount){assert(ENVIRONMENT_IS_WORKER);if(!WORKERFS.reader)WORKERFS.reader=new FileReaderSync;var root=WORKERFS.createNode(null,"/",WORKERFS.DIR_MODE,0);var createdParents={};function ensureParent(path){var parts=path.split("/");var parent=root;for(var i=0;i=stream.node.size)return 0;var chunk=stream.node.contents.slice(position,position+length);var ab=WORKERFS.reader.readAsArrayBuffer(chunk);buffer.set(new Uint8Array(ab),offset);return chunk.size},write:function(stream,buffer,offset,length,position){throw new FS.ErrnoError(29)},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.size}}if(position<0){throw new FS.ErrnoError(28)}return position}}};Module["WORKERFS"]=WORKERFS;var PROXYFS={mount:function(mount){return PROXYFS.createNode(null,"/",mount.opts.fs.lstat(mount.opts.root).mode,0)},createNode:function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=PROXYFS.node_ops;node.stream_ops=PROXYFS.stream_ops;return node},realPath:function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)},node_ops:{getattr:function(node){var path=PROXYFS.realPath(node);var stat;try{stat=node.mount.opts.fs.lstat(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}},setattr:function(node,attr){var path=PROXYFS.realPath(node);try{if(attr.mode!==undefined){node.mount.opts.fs.chmod(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);node.mount.opts.fs.utime(path,date,date)}if(attr.size!==undefined){node.mount.opts.fs.truncate(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},lookup:function(parent,name){try{var path=PATH.join2(PROXYFS.realPath(parent),name);var mode=parent.mount.opts.fs.lstat(path).mode;var node=PROXYFS.createNode(parent,name,mode);return node}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},mknod:function(parent,name,mode,dev){var node=PROXYFS.createNode(parent,name,mode,dev);var path=PROXYFS.realPath(node);try{if(FS.isDir(node.mode)){node.mount.opts.fs.mkdir(path,node.mode)}else{node.mount.opts.fs.writeFile(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node},rename:function(oldNode,newDir,newName){var oldPath=PROXYFS.realPath(oldNode);var newPath=PATH.join2(PROXYFS.realPath(newDir),newName);try{oldNode.mount.opts.fs.rename(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},unlink:function(parent,name){var path=PATH.join2(PROXYFS.realPath(parent),name);try{parent.mount.opts.fs.unlink(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},rmdir:function(parent,name){var path=PATH.join2(PROXYFS.realPath(parent),name);try{parent.mount.opts.fs.rmdir(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},readdir:function(node){var path=PROXYFS.realPath(node);try{return node.mount.opts.fs.readdir(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},symlink:function(parent,newName,oldPath){var newPath=PATH.join2(PROXYFS.realPath(parent),newName);try{parent.mount.opts.fs.symlink(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},readlink:function(node){var path=PROXYFS.realPath(node);try{return node.mount.opts.fs.readlink(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}},stream_ops:{open:function(stream){var path=PROXYFS.realPath(stream.node);try{stream.nfd=stream.node.mount.opts.fs.open(path,stream.flags)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},close:function(stream){try{stream.node.mount.opts.fs.close(stream.nfd)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},read:function(stream,buffer,offset,length,position){try{return stream.node.mount.opts.fs.read(stream.nfd,buffer,offset,length,position)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},write:function(stream,buffer,offset,length,position){try{return stream.node.mount.opts.fs.write(stream.nfd,buffer,offset,length,position)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=stream.node.node_ops.getattr(stream.node);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position}}};Module["PROXYFS"]=PROXYFS;var LZ4={DIR_MODE:16895,FILE_MODE:33279,CHUNK_SIZE:-1,codec:null,init:function(){if(LZ4.codec)return;LZ4.codec=function(){var MiniLZ4=function(){var exports={};exports.uncompress=function(input,output,sIdx,eIdx){sIdx=sIdx||0;eIdx=eIdx||input.length-sIdx;for(var i=sIdx,n=eIdx,j=0;i>4;if(literals_length>0){var l=literals_length+240;while(l===255){l=input[i++];literals_length+=l}var end=i+literals_length;while(ij)return-(i-2);var match_length=token&15;var l=match_length+240;while(l===255){l=input[i++];match_length+=l}var pos=j-offset;var end=j+match_length+4;while(jmaxInputSize?0:isize+isize/255+16|0};exports.compress=function(src,dst,sIdx,eIdx){hashTable.set(empty);return compressBlock(src,dst,0,sIdx||0,eIdx||dst.length)};function compressBlock(src,dst,pos,sIdx,eIdx){var dpos=sIdx;var dlen=eIdx-sIdx;var anchor=0;if(src.length>=maxInputSize)throw new Error("input too large");if(src.length>mfLimit){var n=exports.compressBound(src.length);if(dlen>>hashShift;var ref=hashTable[hash]-1;hashTable[hash]=pos+1;if(ref<0||pos-ref>>>16>0||((src[ref+3]<<8|src[ref+2])!=sequenceHighBits||(src[ref+1]<<8|src[ref])!=sequenceLowBits)){step=findMatchAttempts++>>skipStrength;pos+=step;continue}findMatchAttempts=(1<=runMask){dst[dpos++]=(runMask<254;len-=255){dst[dpos++]=255}dst[dpos++]=len}else{dst[dpos++]=(literals_length<>8;if(match_length>=mlMask){match_length-=mlMask;while(match_length>=255){match_length-=255;dst[dpos++]=255}dst[dpos++]=match_length}anchor=pos}}if(anchor==0)return 0;literals_length=src.length-anchor;if(literals_length>=runMask){dst[dpos++]=runMask<254;ln-=255){dst[dpos++]=255}dst[dpos++]=ln}else{dst[dpos++]=literals_length<0){assert(compressedSize<=bound);compressed=compressed.subarray(0,compressedSize);compressedChunks.push(compressed);total+=compressedSize;successes.push(1);if(verify){var back=exports.uncompress(compressed,temp);assert(back===chunk.length,[back,chunk.length]);for(var i=0;i=0){currChunk=compressedData["cachedChunks"][found]}else{compressedData["cachedIndexes"].pop();compressedData["cachedIndexes"].unshift(chunkIndex);currChunk=compressedData["cachedChunks"].pop();compressedData["cachedChunks"].unshift(currChunk);if(compressedData["debug"]){out("decompressing chunk "+chunkIndex);Module["decompressedChunks"]=(Module["decompressedChunks"]||0)+1}var compressed=compressedData["data"].subarray(compressedStart,compressedStart+compressedSize);var originalSize=LZ4.codec.uncompress(compressed,currChunk);if(chunkIndex8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"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.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup: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}},get flags(){return this.shared.flags},set flags(value){this.shared.flags=value},get position(){return this.shared.position},set position(value){this.shared.position=value}}}var newStream=new FS.FSStream;newStream.shared={};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.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup: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"})},staticInit:function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS,"NODEFS":NODEFS,"WORKERFS":WORKERFS,"PROXYFS":PROXYFS}},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;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){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>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(stream,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.createStream(stream,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){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}};Module["SYSCALLS"]=SYSCALLS;function ___sys__newselect(nfds,readfds,writefds,exceptfds,timeout){try{var total=0;var srcReadLow=readfds?HEAP32[readfds>>2]:0,srcReadHigh=readfds?HEAP32[readfds+4>>2]:0;var srcWriteLow=writefds?HEAP32[writefds>>2]:0,srcWriteHigh=writefds?HEAP32[writefds+4>>2]:0;var srcExceptLow=exceptfds?HEAP32[exceptfds>>2]:0,srcExceptHigh=exceptfds?HEAP32[exceptfds+4>>2]:0;var dstReadLow=0,dstReadHigh=0;var dstWriteLow=0,dstWriteHigh=0;var dstExceptLow=0,dstExceptHigh=0;var allLow=(readfds?HEAP32[readfds>>2]:0)|(writefds?HEAP32[writefds>>2]:0)|(exceptfds?HEAP32[exceptfds>>2]:0);var allHigh=(readfds?HEAP32[readfds+4>>2]:0)|(writefds?HEAP32[writefds+4>>2]:0)|(exceptfds?HEAP32[exceptfds+4>>2]:0);var check=function(fd,low,high,val){return fd<32?low&val:high&val};for(var fd=0;fd>2]=dstReadLow;HEAP32[readfds+4>>2]=dstReadHigh}if(writefds){HEAP32[writefds>>2]=dstWriteLow;HEAP32[writefds+4>>2]=dstWriteHigh}if(exceptfds){HEAP32[exceptfds>>2]=dstExceptLow;HEAP32[exceptfds+4>>2]=dstExceptHigh}return total}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys__newselect"]=___sys__newselect;var SOCKFS={mount:function(mount){Module["websocket"]=Module["websocket"]&&"object"===typeof Module["websocket"]?Module["websocket"]:{};Module["websocket"]._callbacks={};Module["websocket"]["on"]=function(event,callback){if("function"===typeof callback){this._callbacks[event]=callback}return this};Module["websocket"].emit=function(event,param){if("function"===typeof this._callbacks[event]){this._callbacks[event].call(this,param)}};return FS.createNode(null,"/",16384|511,0)},createSocket:function(family,type,protocol){type&=~526336;var streaming=type==1;if(protocol){assert(streaming==(protocol==6))}var sock={family:family,type:type,protocol:protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node:node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket:function(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll:function(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl:function(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read:function(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write:function(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close:function(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname:function(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return"socket["+SOCKFS.nextname.current+++"]"},websocket_sock_ops:{createPeer:function(sock,addr,port){var ws;if(typeof addr==="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var runtimeConfig=Module["websocket"]&&"object"===typeof Module["websocket"];var url="ws:#".replace("#","//");if(runtimeConfig){if("string"===typeof Module["websocket"]["url"]){url=Module["websocket"]["url"]}}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}var subProtocols="binary";if(runtimeConfig){if("string"===typeof Module["websocket"]["subprotocol"]){subProtocols=Module["websocket"]["subprotocol"]}}var opts=undefined;if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=ENVIRONMENT_IS_NODE?{"protocol":subProtocols.toString()}:subProtocols}if(runtimeConfig&&null===Module["websocket"]["subprotocol"]){subProtocols="null";opts=undefined}var WebSocketConstructor;if(ENVIRONMENT_IS_NODE){WebSocketConstructor=require("ws")}else{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr:addr,port:port,socket:ws,dgram_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!=="undefined"){peer.dgram_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer:function(sock,addr,port){return sock.peers[addr+":"+port]},addPeer:function(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer:function(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents:function(sock,peer){var first=true;var handleOpen=function(){Module["websocket"].emit("open",sock.stream.fd);try{var queued=peer.dgram_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.dgram_send_queue.shift()}}catch(e){peer.socket.close()}};function handleMessage(data){if(typeof data==="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{assert(data.byteLength!==undefined);if(data.byteLength==0){return}else{data=new Uint8Array(data)}}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data:data});Module["websocket"].emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",function(data,flags){if(!flags.binary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",function(){Module["websocket"].emit("close",sock.stream.fd)});peer.socket.on("error",function(error){sock.error=14;Module["websocket"].emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])})}else{peer.socket.onopen=handleOpen;peer.socket.onclose=function(){Module["websocket"].emit("close",sock.stream.fd)};peer.socket.onmessage=function peer_socket_onmessage(event){handleMessage(event.data)};peer.socket.onerror=function(error){sock.error=14;Module["websocket"].emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}}},poll:function(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=16}return mask},ioctl:function(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;default:return 28}},close:function(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}var peers=Object.keys(sock.peers);for(var i=0;i>>0}Module["inetPton4"]=inetPton4;function jstoi_q(str){return parseInt(str)}Module["jstoi_q"]=jstoi_q;function inetPton6(str){var words;var w,offset,z,i;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=jstoi_q(words[words.length-4])+jstoi_q(words[words.length-3])*256;words[words.length-3]=jstoi_q(words[words.length-2])+jstoi_q(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;w>2]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0}Module["writeSockaddr"]=writeSockaddr;var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name:function(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;assert(id<65535,"exceeded max address mappings of 65535");addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr:function(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};Module["DNS"]=DNS;function ___sys_accept4(fd,addr,addrlen,flags){try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_accept4"]=___sys_accept4;function ___sys_access(path,amode){try{path=SYSCALLS.getStr(path);return SYSCALLS.doAccess(path,amode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_access"]=___sys_access;var ___sys_acct=function(){return-52};Module["___sys_acct"]=___sys_acct;function inetNtop4(addr){return(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255)}Module["inetNtop4"]=inetNtop4;function inetNtop6(ints){var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family:family,addr:addr,port:port}}Module["readSockaddr"]=readSockaddr;function getSocketAddress(addrp,addrlen,allowNull){if(allowNull&&addrp===0)return null;var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}Module["getSocketAddress"]=getSocketAddress;function ___sys_bind(fd,addr,addrlen){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_bind"]=___sys_bind;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}}Module["___sys_chdir"]=___sys_chdir;function ___sys_chmod(path,mode){try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_chmod"]=___sys_chmod;function ___sys_chown32(path,owner,group){try{path=SYSCALLS.getStr(path);FS.chown(path,owner,group);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_chown32"]=___sys_chown32;function ___sys_connect(fd,addr,addrlen){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_connect"]=___sys_connect;function ___sys_dup(fd){try{var old=SYSCALLS.getStreamFromFD(fd);return FS.createStream(old,0).fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_dup"]=___sys_dup;function ___sys_dup2(oldfd,suggestFD){try{var old=SYSCALLS.getStreamFromFD(oldfd);if(old.fd===suggestFD)return suggestFD;return SYSCALLS.doDup(old,suggestFD)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_dup2"]=___sys_dup2;function ___sys_dup3(fd,suggestFD,flags){try{var old=SYSCALLS.getStreamFromFD(fd);if(old.fd===suggestFD)return-28;return SYSCALLS.doDup(old,suggestFD)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_dup3"]=___sys_dup3;function ___sys_fadvise64_64(fd,offset,len,advice){return 0}Module["___sys_fadvise64_64"]=___sys_fadvise64_64;function ___sys_fallocate(fd,mode,off_low,off_high,len_low,len_high){try{var stream=SYSCALLS.getStreamFromFD(fd);var offset=SYSCALLS.get64(off_low,off_high);var len=SYSCALLS.get64(len_low,len_high);FS.allocate(stream,offset,len);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_fallocate"]=___sys_fallocate;function ___sys_fchdir(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.chdir(stream.path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_fchdir"]=___sys_fchdir;function ___sys_fchmod(fd,mode){try{FS.fchmod(fd,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_fchmod"]=___sys_fchmod;function ___sys_fchmodat(dirfd,path,mode,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_fchmodat"]=___sys_fchmodat;function ___sys_fchown32(fd,owner,group){try{FS.fchown(fd,owner,group);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_fchown32"]=___sys_fchown32;function ___sys_fchownat(dirfd,path,owner,group,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);FS.chown(path,owner,group);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_fchownat"]=___sys_fchownat;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.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 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}}Module["___sys_fcntl64"]=___sys_fcntl64;function ___sys_fdatasync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_fdatasync"]=___sys_fdatasync;function ___sys_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_fstat64"]=___sys_fstat64;function ___sys_fstatat64(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~4352;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_fstatat64"]=___sys_fstatat64;function ___sys_statfs64(path,size,buf){try{path=SYSCALLS.getStr(path);HEAP32[buf+4>>2]=4096;HEAP32[buf+40>>2]=4096;HEAP32[buf+8>>2]=1e6;HEAP32[buf+12>>2]=5e5;HEAP32[buf+16>>2]=5e5;HEAP32[buf+20>>2]=FS.nextInode;HEAP32[buf+24>>2]=1e6;HEAP32[buf+28>>2]=42;HEAP32[buf+44>>2]=2;HEAP32[buf+36>>2]=255;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_statfs64"]=___sys_statfs64;function ___sys_fstatfs64(fd,size,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return ___sys_statfs64(0,size,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_fstatfs64"]=___sys_fstatfs64;function ___sys_ftruncate64(fd,zero,low,high){try{var length=SYSCALLS.get64(low,high);FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_ftruncate64"]=___sys_ftruncate64;function ___sys_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd);if(size>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_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[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18>>0]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_getdents64"]=___sys_getdents64;function ___sys_getegid32(){return 0}Module["___sys_getegid32"]=___sys_getegid32;___sys_getegid32.sig="i";function ___sys_geteuid32(){return ___sys_getegid32()}Module["___sys_geteuid32"]=___sys_geteuid32;___sys_geteuid32.sig="i";function ___sys_getgid32(){return ___sys_getegid32()}Module["___sys_getgid32"]=___sys_getgid32;___sys_getgid32.sig="i";function ___sys_getgroups32(size,list){if(size<1)return-28;HEAP32[list>>2]=0;return 1}Module["___sys_getgroups32"]=___sys_getgroups32;var ___sys_getitimer=function(){return-52};Module["___sys_getitimer"]=___sys_getitimer;function ___sys_getpeername(fd,addr,addrlen){try{var sock=getSocketFromFD(fd);if(!sock.daddr){return-53}var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(sock.daddr),sock.dport,addrlen);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_getpeername"]=___sys_getpeername;function ___sys_getpgid(pid){if(pid&&pid!==42)return-71;return 42}Module["___sys_getpgid"]=___sys_getpgid;function ___sys_getpid(){return 42}Module["___sys_getpid"]=___sys_getpid;function ___sys_getppid(){return 1}Module["___sys_getppid"]=___sys_getppid;function ___sys_getpriority(){return 0}Module["___sys_getpriority"]=___sys_getpriority;function ___sys_getresgid32(ruid,euid,suid){try{HEAP32[ruid>>2]=0;HEAP32[euid>>2]=0;HEAP32[suid>>2]=0;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_getresgid32"]=___sys_getresgid32;___sys_getresgid32.sig="iiii";function ___sys_getresuid32(a0,a1,a2){return ___sys_getresgid32(a0,a1,a2)}Module["___sys_getresuid32"]=___sys_getresuid32;___sys_getresuid32.sig="iiii";function ___sys_getrusage(who,usage){try{zeroMemory(usage,136);HEAP32[usage>>2]=1;HEAP32[usage+4>>2]=2;HEAP32[usage+8>>2]=3;HEAP32[usage+12>>2]=4;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_getrusage"]=___sys_getrusage;function ___sys_getsid(pid){if(pid&&pid!==42)return-71;return 42}Module["___sys_getsid"]=___sys_getsid;function ___sys_getsockname(fd,addr,addrlen){try{err("__sys_getsockname "+fd);var sock=getSocketFromFD(fd);var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(sock.saddr||"0.0.0.0"),sock.sport,addrlen);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_getsockname"]=___sys_getsockname;function ___sys_getsockopt(fd,level,optname,optval,optlen){try{var sock=getSocketFromFD(fd);if(level===1){if(optname===4){HEAP32[optval>>2]=sock.error;HEAP32[optlen>>2]=4;sock.error=null;return 0}}return-50}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_getsockopt"]=___sys_getsockopt;function ___sys_getuid32(){return ___sys_getegid32()}Module["___sys_getuid32"]=___sys_getuid32;___sys_getuid32.sig="i";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}}Module["___sys_ioctl"]=___sys_ioctl;function ___sys_lchown32(path,owner,group){try{path=SYSCALLS.getStr(path);FS.chown(path,owner,group);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_lchown32"]=___sys_lchown32;function ___sys_link(oldpath,newpath){return-34}Module["___sys_link"]=___sys_link;function ___sys_linkat(olddirfd,oldpath,newdirfd,newpath,flags){return-34}Module["___sys_linkat"]=___sys_linkat;function ___sys_listen(fd,backlog){try{var sock=getSocketFromFD(fd);sock.sock_ops.listen(sock,backlog);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_listen"]=___sys_listen;function ___sys_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_lstat64"]=___sys_lstat64;function ___sys_madvise1(addr,length,advice){try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_madvise1"]=___sys_madvise1;var ___sys_mincore=function(){return-52};Module["___sys_mincore"]=___sys_mincore;function ___sys_mkdir(path,mode){try{path=SYSCALLS.getStr(path);return SYSCALLS.doMkdir(path,mode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_mkdir"]=___sys_mkdir;function ___sys_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);return SYSCALLS.doMkdir(path,mode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_mkdirat"]=___sys_mkdirat;function ___sys_mknod(path,mode,dev){try{path=SYSCALLS.getStr(path);return SYSCALLS.doMknod(path,mode,dev)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_mknod"]=___sys_mknod;function ___sys_mknodat(dirfd,path,mode,dev){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);return SYSCALLS.doMknod(path,mode,dev)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_mknodat"]=___sys_mknodat;function ___sys_mlock(addr,len){try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_mlock"]=___sys_mlock;___sys_mlock.sig="iii";function ___sys_mlockall(flags){try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_mlockall"]=___sys_mlockall;___sys_mlockall.sig="ii";function syscallMmap2(addr,len,prot,flags,fd,off){off<<=12;var ptr;var allocated=false;if((flags&16)!==0&&addr%65536!==0){return-28}if((flags&32)!==0){ptr=mmapAlloc(len);if(!ptr)return-48;allocated=true}else{var info=FS.getStream(fd);if(!info)return-8;var res=FS.mmap(info,addr,len,off,prot,flags);ptr=res.ptr;allocated=res.allocated}SYSCALLS.mappings[ptr]={malloc:ptr,len:len,allocated:allocated,fd:fd,prot:prot,flags:flags,offset:off};return ptr}Module["syscallMmap2"]=syscallMmap2;function ___sys_mmap2(addr,len,prot,flags,fd,off){try{return syscallMmap2(addr,len,prot,flags,fd,off)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_mmap2"]=___sys_mmap2;function ___sys_mprotect(addr,len,size){try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_mprotect"]=___sys_mprotect;function ___sys_mremap(old_addr,old_size,new_size,flags){try{return-48}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_mremap"]=___sys_mremap;function ___sys_msync(addr,len,flags){try{var info=SYSCALLS.mappings[addr];if(!info)return 0;SYSCALLS.doMsync(addr,FS.getStream(info.fd),len,info.flags,0);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_msync"]=___sys_msync;function ___sys_munlock(addr,len){try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_munlock"]=___sys_munlock;___sys_munlock.sig="iii";function ___sys_munlockall(){try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_munlockall"]=___sys_munlockall;___sys_munlockall.sig="i";function syscallMunmap(addr,len){var info=SYSCALLS.mappings[addr];if(len===0||!info){return-28}if(len===info.len){var stream=FS.getStream(info.fd);if(stream){if(info.prot&2){SYSCALLS.doMsync(addr,stream,len,info.flags,info.offset)}FS.munmap(stream)}SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}Module["syscallMunmap"]=syscallMunmap;function ___sys_munmap(addr,len){try{return syscallMunmap(addr,len)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_munmap"]=___sys_munmap;function ___sys_nice(inc){return-63}Module["___sys_nice"]=___sys_nice;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}}Module["___sys_open"]=___sys_open;function ___sys_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_openat"]=___sys_openat;function ___sys_pause(){return-27}Module["___sys_pause"]=___sys_pause;var PIPEFS={BUCKET_BUFFER_SIZE:8192,mount:function(mount){return FS.createNode(null,"/",16384|511,0)},createPipe:function(){var pipe={buckets:[],refcnt:2};pipe.buckets.push({buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:0,roffset:0});var rName=PIPEFS.nextname();var wName=PIPEFS.nextname();var rNode=FS.createNode(PIPEFS.root,rName,4096,0);var wNode=FS.createNode(PIPEFS.root,wName,4096,0);rNode.pipe=pipe;wNode.pipe=pipe;var readableStream=FS.createStream({path:rName,node:rNode,flags:0,seekable:false,stream_ops:PIPEFS.stream_ops});rNode.stream=readableStream;var writableStream=FS.createStream({path:wName,node:wNode,flags:1,seekable:false,stream_ops:PIPEFS.stream_ops});wNode.stream=writableStream;return{readable_fd:readableStream.fd,writable_fd:writableStream.fd}},stream_ops:{poll:function(stream){var pipe=stream.node.pipe;if((stream.flags&2097155)===1){return 256|4}else{if(pipe.buckets.length>0){for(var i=0;i0){return 64|1}}}}return 0},ioctl:function(stream,request,varargs){return 28},fsync:function(stream){return 28},read:function(stream,buffer,offset,length,position){var pipe=stream.node.pipe;var currentLength=0;for(var i=0;i=dataLen){currBucket.buffer.set(data,currBucket.offset);currBucket.offset+=dataLen;return dataLen}else if(freeBytesInCurrBuffer>0){currBucket.buffer.set(data.subarray(0,freeBytesInCurrBuffer),currBucket.offset);currBucket.offset+=freeBytesInCurrBuffer;data=data.subarray(freeBytesInCurrBuffer,data.byteLength)}var numBuckets=data.byteLength/PIPEFS.BUCKET_BUFFER_SIZE|0;var remElements=data.byteLength%PIPEFS.BUCKET_BUFFER_SIZE;for(var i=0;i0){var newBucket={buffer:new Uint8Array(PIPEFS.BUCKET_BUFFER_SIZE),offset:data.byteLength,roffset:0};pipe.buckets.push(newBucket);newBucket.buffer.set(data)}return dataLen},close:function(stream){var pipe=stream.node.pipe;pipe.refcnt--;if(pipe.refcnt===0){pipe.buckets=null}}},nextname:function(){if(!PIPEFS.nextname.current){PIPEFS.nextname.current=0}return"pipe["+PIPEFS.nextname.current+++"]"}};Module["PIPEFS"]=PIPEFS;function ___sys_pipe(fdPtr){try{if(fdPtr==0){throw new FS.ErrnoError(21)}var res=PIPEFS.createPipe();HEAP32[fdPtr>>2]=res.readable_fd;HEAP32[fdPtr+4>>2]=res.writable_fd;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_pipe"]=___sys_pipe;var ___sys_pipe2=function(){return-52};Module["___sys_pipe2"]=___sys_pipe2;function ___sys_poll(fds,nfds,timeout){try{var nonzero=0;for(var i=0;i>2];var events=HEAP16[pollfd+4>>1];var mask=32;var stream=FS.getStream(fd);if(stream){mask=SYSCALLS.DEFAULT_POLLMASK;if(stream.stream_ops.poll){mask=stream.stream_ops.poll(stream)}}mask&=events|8|16;if(mask)nonzero++;HEAP16[pollfd+6>>1]=mask}return nonzero}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_poll"]=___sys_poll;function ___sys_prlimit64(pid,resource,new_limit,old_limit){try{if(old_limit){HEAP32[old_limit>>2]=-1;HEAP32[old_limit+4>>2]=-1;HEAP32[old_limit+8>>2]=-1;HEAP32[old_limit+12>>2]=-1}return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_prlimit64"]=___sys_prlimit64;var ___sys_pselect6=function(){return-52};Module["___sys_pselect6"]=___sys_pselect6;function ___sys_readlink(path,buf,bufsize){try{path=SYSCALLS.getStr(path);return SYSCALLS.doReadlink(path,buf,bufsize)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_readlink"]=___sys_readlink;function ___sys_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);return SYSCALLS.doReadlink(path,buf,bufsize)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_readlinkat"]=___sys_readlinkat;function ___sys_recvfrom(fd,buf,len,flags,addr,addrlen){try{var sock=getSocketFromFD(fd);var msg=sock.sock_ops.recvmsg(sock,len);if(!msg)return 0;if(addr){var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(msg.addr),msg.port,addrlen)}HEAPU8.set(msg.buffer,buf);return msg.buffer.byteLength}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_recvfrom"]=___sys_recvfrom;var ___sys_recvmmsg=function(){return-52};Module["___sys_recvmmsg"]=___sys_recvmmsg;function ___sys_recvmsg(fd,message,flags){try{var sock=getSocketFromFD(fd);var iov=HEAP32[message+8>>2];var num=HEAP32[message+12>>2];var total=0;for(var i=0;i>2]}var msg=sock.sock_ops.recvmsg(sock,total);if(!msg)return 0;var name=HEAP32[message>>2];if(name){var errno=writeSockaddr(name,sock.family,DNS.lookup_name(msg.addr),msg.port)}var bytesRead=0;var bytesRemaining=msg.buffer.byteLength;for(var i=0;bytesRemaining>0&&i>2];var iovlen=HEAP32[iov+(8*i+4)>>2];if(!iovlen){continue}var length=Math.min(iovlen,bytesRemaining);var buf=msg.buffer.subarray(bytesRead,bytesRead+length);HEAPU8.set(buf,iovbase+bytesRead);bytesRead+=length;bytesRemaining-=length}return bytesRead}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_recvmsg"]=___sys_recvmsg;function ___sys_rename(old_path,new_path){try{old_path=SYSCALLS.getStr(old_path);new_path=SYSCALLS.getStr(new_path);FS.rename(old_path,new_path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_rename"]=___sys_rename;function ___sys_renameat(olddirfd,oldpath,newdirfd,newpath){try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_renameat"]=___sys_renameat;function ___sys_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_rmdir"]=___sys_rmdir;var ___sys_sendmmsg=function(){return-52};Module["___sys_sendmmsg"]=___sys_sendmmsg;function ___sys_sendmsg(fd,message,flags){try{var sock=getSocketFromFD(fd);var iov=HEAP32[message+8>>2];var num=HEAP32[message+12>>2];var addr,port;var name=HEAP32[message>>2];var namelen=HEAP32[message+4>>2];if(name){var info=readSockaddr(name,namelen);if(info.errno)return-info.errno;port=info.port;addr=DNS.lookup_addr(info.addr)||info.addr}var total=0;for(var i=0;i>2]}var view=new Uint8Array(total);var offset=0;for(var i=0;i>2];var iovlen=HEAP32[iov+(8*i+4)>>2];for(var j=0;j>0]}}return sock.sock_ops.sendmsg(sock,view,0,total,addr,port)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_sendmsg"]=___sys_sendmsg;function ___sys_sendto(fd,message,length,flags,addr,addr_len){try{var sock=getSocketFromFD(fd);var dest=getSocketAddress(addr,addr_len,true);if(!dest){return FS.write(sock.stream,HEAP8,message,length)}else{return sock.sock_ops.sendmsg(sock,HEAP8,message,length,dest.addr,dest.port)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_sendto"]=___sys_sendto;function ___sys_setdomainname(name,size){return-63}Module["___sys_setdomainname"]=___sys_setdomainname;var ___sys_setitimer=function(){return-52};Module["___sys_setitimer"]=___sys_setitimer;function ___sys_setpgid(pid,pgid){if(pid&&pid!==42)return-71;if(pgid&&pgid!==42)return-63;return 0}Module["___sys_setpgid"]=___sys_setpgid;function ___sys_setpriority(){return-63}Module["___sys_setpriority"]=___sys_setpriority;function ___sys_setrlimit(varargs){return 0}Module["___sys_setrlimit"]=___sys_setrlimit;function ___sys_setsid(){return 0}Module["___sys_setsid"]=___sys_setsid;function ___sys_setsockopt(fd){try{return-50}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_setsockopt"]=___sys_setsockopt;function ___sys_shutdown(fd,how){try{getSocketFromFD(fd);return-52}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_shutdown"]=___sys_shutdown;function ___sys_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_socket"]=___sys_socket;var ___sys_socketpair=function(){return-52};Module["___sys_socketpair"]=___sys_socketpair;function ___sys_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_stat64"]=___sys_stat64;function ___sys_symlink(target,linkpath){try{target=SYSCALLS.getStr(target);linkpath=SYSCALLS.getStr(linkpath);FS.symlink(target,linkpath);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_symlink"]=___sys_symlink;function ___sys_symlinkat(target,newdirfd,linkpath){try{linkpath=SYSCALLS.calculateAt(newdirfd,linkpath);FS.symlink(target,linkpath);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_symlinkat"]=___sys_symlinkat;function ___sys_sync(){return 0}Module["___sys_sync"]=___sys_sync;function ___sys_truncate64(path,zero,low,high){try{path=SYSCALLS.getStr(path);var length=SYSCALLS.get64(low,high);FS.truncate(path,length);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_truncate64"]=___sys_truncate64;function ___sys_ugetrlimit(resource,rlim){try{HEAP32[rlim>>2]=-1;HEAP32[rlim+4>>2]=-1;HEAP32[rlim+8>>2]=-1;HEAP32[rlim+12>>2]=-1;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_ugetrlimit"]=___sys_ugetrlimit;function ___sys_umask(mask){try{var old=SYSCALLS.umask;SYSCALLS.umask=mask;return old}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_umask"]=___sys_umask;function ___sys_uname(buf){try{if(!buf)return-21;var layout={"__size__":390,"domainname":325,"machine":260,"nodename":65,"release":130,"sysname":0,"version":195};var copyString=function(element,value){var offset=layout[element];writeAsciiToMemory(value,buf+offset)};copyString("sysname","Emscripten");copyString("nodename","emscripten");copyString("release","1.0");copyString("version","#1");copyString("machine","wasm32");return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_uname"]=___sys_uname;function ___sys_unlink(path){try{path=SYSCALLS.getStr(path);FS.unlink(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_unlink"]=___sys_unlink;function ___sys_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_unlinkat"]=___sys_unlinkat;function ___sys_utimensat(dirfd,path,times,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path,true);var seconds=HEAP32[times>>2];var nanoseconds=HEAP32[times+4>>2];var atime=seconds*1e3+nanoseconds/(1e3*1e3);times+=8;seconds=HEAP32[times>>2];nanoseconds=HEAP32[times+4>>2];var mtime=seconds*1e3+nanoseconds/(1e3*1e3);FS.utime(path,atime,mtime);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_utimensat"]=___sys_utimensat;var ___sys_wait4=function(){return-52};Module["___sys_wait4"]=___sys_wait4;function __emscripten_throw_longjmp(){throw"longjmp"}Module["__emscripten_throw_longjmp"]=__emscripten_throw_longjmp;__emscripten_throw_longjmp.sig="v";function _abort(){abort()}Module["_abort"]=_abort;_abort.sig="v";var AL={QUEUE_INTERVAL:25,QUEUE_LOOKAHEAD:.1,DEVICE_NAME:"Emscripten OpenAL",CAPTURE_DEVICE_NAME:"Emscripten OpenAL capture",ALC_EXTENSIONS:{ALC_SOFT_pause_device:true,ALC_SOFT_HRTF:true},AL_EXTENSIONS:{AL_EXT_float32:true,AL_SOFT_loop_points:true,AL_SOFT_source_length:true,AL_EXT_source_distance_model:true,AL_SOFT_source_spatialize:true},_alcErr:0,alcErr:0,deviceRefCounts:{},alcStringCache:{},paused:false,stringCache:{},contexts:{},currentCtx:null,buffers:{0:{id:0,refCount:0,audioBuf:null,frequency:0,bytesPerSample:2,channels:1,length:0}},paramArray:[],_nextId:1,newId:function(){return AL.freeIds.length>0?AL.freeIds.pop():AL._nextId++},freeIds:[],scheduleContextAudio:function(ctx){if(Browser.mainLoop.timingMode===1&&document["visibilityState"]!="visible"){return}for(var i in ctx.sources){AL.scheduleSourceAudio(ctx.sources[i])}},scheduleSourceAudio:function(src,lookahead){if(Browser.mainLoop.timingMode===1&&document["visibilityState"]!="visible"){return}if(src.state!==4114){return}var currentTime=AL.updateSourceTime(src);var startTime=src.bufStartTime;var startOffset=src.bufOffset;var bufCursor=src.bufsProcessed;for(var i=0;i=src.bufQueue.length){if(src.looping){bufCursor%=src.bufQueue.length}else{break}}var buf=src.bufQueue[bufCursor%src.bufQueue.length];if(buf.length===0){skipCount++;if(skipCount===src.bufQueue.length){break}}else{var audioSrc=src.context.audioCtx.createBufferSource();audioSrc.buffer=buf.audioBuf;audioSrc.playbackRate.value=src.playbackRate;if(buf.audioBuf._loopStart||buf.audioBuf._loopEnd){audioSrc.loopStart=buf.audioBuf._loopStart;audioSrc.loopEnd=buf.audioBuf._loopEnd}var duration=0;if(src.type===4136&&src.looping){duration=Number.POSITIVE_INFINITY;audioSrc.loop=true;if(buf.audioBuf._loopStart){audioSrc.loopStart=buf.audioBuf._loopStart}if(buf.audioBuf._loopEnd){audioSrc.loopEnd=buf.audioBuf._loopEnd}}else{duration=(buf.audioBuf.duration-startOffset)/src.playbackRate}audioSrc._startOffset=startOffset;audioSrc._duration=duration;audioSrc._skipCount=skipCount;skipCount=0;audioSrc.connect(src.gain);if(typeof audioSrc.start!=="undefined"){startTime=Math.max(startTime,src.context.audioCtx.currentTime);audioSrc.start(startTime,startOffset)}else if(typeof audioSrc.noteOn!=="undefined"){startTime=Math.max(startTime,src.context.audioCtx.currentTime);audioSrc.noteOn(startTime)}audioSrc._startTime=startTime;src.audioQueue.push(audioSrc);startTime+=duration}startOffset=0;bufCursor++}},updateSourceTime:function(src){var currentTime=src.context.audioCtx.currentTime;if(src.state!==4114){return currentTime}if(!isFinite(src.bufStartTime)){src.bufStartTime=currentTime-src.bufOffset/src.playbackRate;src.bufOffset=0}var nextStartTime=0;while(src.audioQueue.length){var audioSrc=src.audioQueue[0];src.bufsProcessed+=audioSrc._skipCount;nextStartTime=audioSrc._startTime+audioSrc._duration;if(currentTime=src.bufQueue.length&&!src.looping){AL.setSourceState(src,4116)}else if(src.type===4136&&src.looping){var buf=src.bufQueue[0];if(buf.length===0){src.bufOffset=0}else{var delta=(currentTime-src.bufStartTime)*src.playbackRate;var loopStart=buf.audioBuf._loopStart||0;var loopEnd=buf.audioBuf._loopEnd||buf.audioBuf.duration;if(loopEnd<=loopStart){loopEnd=buf.audioBuf.duration}if(delta0){src.bufStartTime+=Math.floor((currentTime-src.bufStartTime)/srcDuration)*srcDuration}}for(var i=0;i=src.bufQueue.length){if(src.looping){src.bufsProcessed%=src.bufQueue.length}else{AL.setSourceState(src,4116);break}}var buf=src.bufQueue[src.bufsProcessed];if(buf.length>0){nextStartTime=src.bufStartTime+buf.audioBuf.duration/src.playbackRate;if(currentTime1){src.audioQueue.length=1}},stopSourceAudio:function(src){for(var i=0;isrc.bufQueue[src.bufsProcessed].audioBuf.duration){offset-=src.bufQueue[src.bufsProcessed].audiobuf.duration;src.bufsProcessed++}src.bufOffset=offset}if(playing){AL.setSourceState(src,4114)}},getGlobalParam:function(funcname,param){if(!AL.currentCtx){return null}switch(param){case 49152:return AL.currentCtx.dopplerFactor;case 49155:return AL.currentCtx.speedOfSound;case 53248:return AL.currentCtx.distanceModel;default:AL.currentCtx.err=40962;return null}},setGlobalParam:function(funcname,param,value){if(!AL.currentCtx){return}switch(param){case 49152:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}AL.currentCtx.dopplerFactor=value;AL.updateListenerSpace(AL.currentCtx);break;case 49155:if(!Number.isFinite(value)||value<=0){AL.currentCtx.err=40963;return}AL.currentCtx.speedOfSound=value;AL.updateListenerSpace(AL.currentCtx);break;case 53248:switch(value){case 0:case 53249:case 53250:case 53251:case 53252:case 53253:case 53254:AL.currentCtx.distanceModel=value;AL.updateContextGlobal(AL.currentCtx);break;default:AL.currentCtx.err=40963;return}break;default:AL.currentCtx.err=40962;return}},getListenerParam:function(funcname,param){if(!AL.currentCtx){return null}switch(param){case 4100:return AL.currentCtx.listener.position;case 4102:return AL.currentCtx.listener.velocity;case 4111:return AL.currentCtx.listener.direction.concat(AL.currentCtx.listener.up);case 4106:return AL.currentCtx.gain.gain.value;default:AL.currentCtx.err=40962;return null}},setListenerParam:function(funcname,param,value){if(!AL.currentCtx){return}if(value===null){AL.currentCtx.err=40962;return}var listener=AL.currentCtx.listener;switch(param){case 4100:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}listener.position[0]=value[0];listener.position[1]=value[1];listener.position[2]=value[2];AL.updateListenerSpace(AL.currentCtx);break;case 4102:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])){AL.currentCtx.err=40963;return}listener.velocity[0]=value[0];listener.velocity[1]=value[1];listener.velocity[2]=value[2];AL.updateListenerSpace(AL.currentCtx);break;case 4106:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}AL.currentCtx.gain.gain.value=value;break;case 4111:if(!Number.isFinite(value[0])||!Number.isFinite(value[1])||!Number.isFinite(value[2])||!Number.isFinite(value[3])||!Number.isFinite(value[4])||!Number.isFinite(value[5])){AL.currentCtx.err=40963;return}listener.direction[0]=value[0];listener.direction[1]=value[1];listener.direction[2]=value[2];listener.up[0]=value[3];listener.up[1]=value[4];listener.up[2]=value[5];AL.updateListenerSpace(AL.currentCtx);break;default:AL.currentCtx.err=40962;return}},getBufferParam:function(funcname,bufferId,param){if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf||bufferId===0){AL.currentCtx.err=40961;return}switch(param){case 8193:return buf.frequency;case 8194:return buf.bytesPerSample*8;case 8195:return buf.channels;case 8196:return buf.length*buf.bytesPerSample*buf.channels;case 8213:if(buf.length===0){return[0,0]}else{return[(buf.audioBuf._loopStart||0)*buf.frequency,(buf.audioBuf._loopEnd||buf.length)*buf.frequency]}default:AL.currentCtx.err=40962;return null}},setBufferParam:function(funcname,bufferId,param,value){if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf||bufferId===0){AL.currentCtx.err=40961;return}if(value===null){AL.currentCtx.err=40962;return}switch(param){case 8196:if(value!==0){AL.currentCtx.err=40963;return}break;case 8213:if(value[0]<0||value[0]>buf.length||value[1]<0||value[1]>buf.Length||value[0]>=value[1]){AL.currentCtx.err=40963;return}if(buf.refCount>0){AL.currentCtx.err=40964;return}if(buf.audioBuf){buf.audioBuf._loopStart=value[0]/buf.frequency;buf.audioBuf._loopEnd=value[1]/buf.frequency}break;default:AL.currentCtx.err=40962;return}},getSourceParam:function(funcname,sourceId,param){if(!AL.currentCtx){return null}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return null}switch(param){case 514:return src.relative;case 4097:return src.coneInnerAngle;case 4098:return src.coneOuterAngle;case 4099:return src.pitch;case 4100:return src.position;case 4101:return src.direction;case 4102:return src.velocity;case 4103:return src.looping;case 4105:if(src.type===4136){return src.bufQueue[0].id}else{return 0}case 4106:return src.gain.gain.value;case 4109:return src.minGain;case 4110:return src.maxGain;case 4112:return src.state;case 4117:if(src.bufQueue.length===1&&src.bufQueue[0].id===0){return 0}else{return src.bufQueue.length}case 4118:if(src.bufQueue.length===1&&src.bufQueue[0].id===0||src.looping){return 0}else{return src.bufsProcessed}case 4128:return src.refDistance;case 4129:return src.rolloffFactor;case 4130:return src.coneOuterGain;case 4131:return src.maxDistance;case 4132:return AL.sourceTell(src);case 4133:var offset=AL.sourceTell(src);if(offset>0){offset*=src.bufQueue[0].frequency}return offset;case 4134:var offset=AL.sourceTell(src);if(offset>0){offset*=src.bufQueue[0].frequency*src.bufQueue[0].bytesPerSample}return offset;case 4135:return src.type;case 4628:return src.spatialize;case 8201:var length=0;var bytesPerFrame=0;for(var i=0;i0){var audioSrc=src.audioQueue[0];audioSrc.loop=true;audioSrc._duration=Number.POSITIVE_INFINITY}}else if(value===0){src.looping=false;var currentTime=AL.updateSourceTime(src);if(src.type===4136&&src.audioQueue.length>0){var audioSrc=src.audioQueue[0];audioSrc.loop=false;audioSrc._duration=src.bufQueue[0].audioBuf.duration/src.playbackRate;audioSrc._startTime=currentTime-src.bufOffset/src.playbackRate}}else{AL.currentCtx.err=40963;return}break;case 4105:if(src.state===4114||src.state===4115){AL.currentCtx.err=40964;return}if(value===0){for(var i in src.bufQueue){src.bufQueue[i].refCount--}src.bufQueue.length=1;src.bufQueue[0]=AL.buffers[0];src.bufsProcessed=0;src.type=4144}else{var buf=AL.buffers[value];if(!buf){AL.currentCtx.err=40963;return}for(var i in src.bufQueue){src.bufQueue[i].refCount--}src.bufQueue.length=0;buf.refCount++;src.bufQueue=[buf];src.bufsProcessed=0;src.type=4136}AL.initSourcePanner(src);AL.scheduleSourceAudio(src);break;case 4106:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.gain.gain.value=value;break;case 4109:if(!Number.isFinite(value)||value<0||value>Math.min(src.maxGain,1)){AL.currentCtx.err=40963;return}src.minGain=value;break;case 4110:if(!Number.isFinite(value)||value1){AL.currentCtx.err=40963;return}src.maxGain=value;break;case 4128:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.refDistance=value;if(src.panner){src.panner.refDistance=value}break;case 4129:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.rolloffFactor=value;if(src.panner){src.panner.rolloffFactor=value}break;case 4130:if(!Number.isFinite(value)||value<0||value>1){AL.currentCtx.err=40963;return}src.coneOuterGain=value;if(src.panner){src.panner.coneOuterGain=value}break;case 4131:if(!Number.isFinite(value)||value<0){AL.currentCtx.err=40963;return}src.maxDistance=value;if(src.panner){src.panner.maxDistance=value}break;case 4132:if(value<0||value>AL.sourceDuration(src)){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4133:var srcLen=AL.sourceDuration(src);if(srcLen>0){var frequency;for(var bufId in src.bufQueue){if(bufId){frequency=src.bufQueue[bufId].frequency;break}}value/=frequency}if(value<0||value>srcLen){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4134:var srcLen=AL.sourceDuration(src);if(srcLen>0){var bytesPerSec;for(var bufId in src.bufQueue){if(bufId){var buf=src.bufQueue[bufId];bytesPerSec=buf.frequency*buf.bytesPerSample*buf.channels;break}}value/=bytesPerSec}if(value<0||value>srcLen){AL.currentCtx.err=40963;return}AL.sourceSeek(src,value);break;case 4628:if(value!==0&&value!==1&&value!==2){AL.currentCtx.err=40963;return}src.spatialize=value;AL.initSourcePanner(src);break;case 8201:case 8202:case 8203:AL.currentCtx.err=40964;break;case 53248:switch(value){case 0:case 53249:case 53250:case 53251:case 53252:case 53253:case 53254:src.distanceModel=value;if(AL.currentCtx.sourceDistanceModel){AL.updateContextGlobal(AL.currentCtx)}break;default:AL.currentCtx.err=40963;return}break;default:AL.currentCtx.err=40962;return}},captures:{},sharedCaptureAudioCtx:null,requireValidCaptureDevice:function(deviceId,funcname){if(deviceId===0){AL.alcErr=40961;return null}var c=AL.captures[deviceId];if(!c){AL.alcErr=40961;return null}var err=c.mediaStreamError;if(err){AL.alcErr=40961;return null}return c}};Module["AL"]=AL;function _alBuffer3f(bufferId,param,value0,value1,value2){AL.setBufferParam("alBuffer3f",bufferId,param,null)}Module["_alBuffer3f"]=_alBuffer3f;_alBuffer3f.sig="viifff";function _alBuffer3i(bufferId,param,value0,value1,value2){AL.setBufferParam("alBuffer3i",bufferId,param,null)}Module["_alBuffer3i"]=_alBuffer3i;_alBuffer3i.sig="viiiii";function _alBufferData(bufferId,format,pData,size,freq){if(!AL.currentCtx){return}var buf=AL.buffers[bufferId];if(!buf){AL.currentCtx.err=40963;return}if(freq<=0){AL.currentCtx.err=40963;return}var audioBuf=null;try{switch(format){case 4352:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size,freq);var channel0=audioBuf.getChannelData(0);for(var i=0;i0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size>>1,freq);var channel0=audioBuf.getChannelData(0);pData>>=1;for(var i=0;i>1;++i){channel0[i]=HEAP16[pData++]*30517578125e-15}}buf.bytesPerSample=2;buf.channels=1;buf.length=size>>1;break;case 4354:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>1,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);for(var i=0;i>1;++i){channel0[i]=HEAPU8[pData++]*.0078125-1;channel1[i]=HEAPU8[pData++]*.0078125-1}}buf.bytesPerSample=1;buf.channels=2;buf.length=size>>1;break;case 4355:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>2,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);pData>>=1;for(var i=0;i>2;++i){channel0[i]=HEAP16[pData++]*30517578125e-15;channel1[i]=HEAP16[pData++]*30517578125e-15}}buf.bytesPerSample=2;buf.channels=2;buf.length=size>>2;break;case 65552:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(1,size>>2,freq);var channel0=audioBuf.getChannelData(0);pData>>=2;for(var i=0;i>2;++i){channel0[i]=HEAPF32[pData++]}}buf.bytesPerSample=4;buf.channels=1;buf.length=size>>2;break;case 65553:if(size>0){audioBuf=AL.currentCtx.audioCtx.createBuffer(2,size>>3,freq);var channel0=audioBuf.getChannelData(0);var channel1=audioBuf.getChannelData(1);pData>>=2;for(var i=0;i>3;++i){channel0[i]=HEAPF32[pData++];channel1[i]=HEAPF32[pData++]}}buf.bytesPerSample=4;buf.channels=2;buf.length=size>>3;break;default:AL.currentCtx.err=40963;return}buf.frequency=freq;buf.audioBuf=audioBuf}catch(e){AL.currentCtx.err=40963;return}}Module["_alBufferData"]=_alBufferData;_alBufferData.sig="viiiii";function _alBufferf(bufferId,param,value){AL.setBufferParam("alBufferf",bufferId,param,null)}Module["_alBufferf"]=_alBufferf;_alBufferf.sig="viif";function _alBufferfv(bufferId,param,pValues){if(!AL.currentCtx){return}if(!pValues){AL.currentCtx.err=40963;return}AL.setBufferParam("alBufferfv",bufferId,param,null)}Module["_alBufferfv"]=_alBufferfv;_alBufferfv.sig="viii";function _alBufferi(bufferId,param,value){AL.setBufferParam("alBufferi",bufferId,param,null)}Module["_alBufferi"]=_alBufferi;_alBufferi.sig="viii";function _alBufferiv(bufferId,param,pValues){if(!AL.currentCtx){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 8213:AL.paramArray[0]=HEAP32[pValues>>2];AL.paramArray[1]=HEAP32[pValues+4>>2];AL.setBufferParam("alBufferiv",bufferId,param,AL.paramArray);break;default:AL.setBufferParam("alBufferiv",bufferId,param,null);break}}Module["_alBufferiv"]=_alBufferiv;_alBufferiv.sig="viii";function _alDeleteBuffers(count,pBufferIds){if(!AL.currentCtx){return}for(var i=0;i>2];if(bufId===0){continue}if(!AL.buffers[bufId]){AL.currentCtx.err=40961;return}if(AL.buffers[bufId].refCount){AL.currentCtx.err=40964;return}}for(var i=0;i>2];if(bufId===0){continue}AL.deviceRefCounts[AL.buffers[bufId].deviceId]--;delete AL.buffers[bufId];AL.freeIds.push(bufId)}}Module["_alDeleteBuffers"]=_alDeleteBuffers;_alDeleteBuffers.sig="vii";function _alSourcei(sourceId,param,value){switch(param){case 514:case 4097:case 4098:case 4103:case 4105:case 4128:case 4129:case 4131:case 4132:case 4133:case 4134:case 4628:case 8201:case 8202:case 53248:AL.setSourceParam("alSourcei",sourceId,param,value);break;default:AL.setSourceParam("alSourcei",sourceId,param,null);break}}Module["_alSourcei"]=_alSourcei;_alSourcei.sig="viii";function _alDeleteSources(count,pSourceIds){if(!AL.currentCtx){return}for(var i=0;i>2];if(!AL.currentCtx.sources[srcId]){AL.currentCtx.err=40961;return}}for(var i=0;i>2];AL.setSourceState(AL.currentCtx.sources[srcId],4116);_alSourcei(srcId,4105,0);delete AL.currentCtx.sources[srcId];AL.freeIds.push(srcId)}}Module["_alDeleteSources"]=_alDeleteSources;_alDeleteSources.sig="vii";function _alDisable(param){if(!AL.currentCtx){return}switch(param){case"AL_SOURCE_DISTANCE_MODEL":AL.currentCtx.sourceDistanceModel=false;AL.updateContextGlobal(AL.currentCtx);break;default:AL.currentCtx.err=40962;return}}Module["_alDisable"]=_alDisable;_alDisable.sig="vi";function _alDistanceModel(model){AL.setGlobalParam("alDistanceModel",53248,model)}Module["_alDistanceModel"]=_alDistanceModel;_alDistanceModel.sig="vi";function _alDopplerFactor(value){AL.setGlobalParam("alDopplerFactor",49152,value)}Module["_alDopplerFactor"]=_alDopplerFactor;_alDopplerFactor.sig="vi";function _alDopplerVelocity(value){warnOnce("alDopplerVelocity() is deprecated, and only kept for compatibility with OpenAL 1.0. Use alSpeedOfSound() instead.");if(!AL.currentCtx){return}if(value<=0){AL.currentCtx.err=40963;return}}Module["_alDopplerVelocity"]=_alDopplerVelocity;_alDopplerVelocity.sig="vi";function _alEnable(param){if(!AL.currentCtx){return}switch(param){case"AL_SOURCE_DISTANCE_MODEL":AL.currentCtx.sourceDistanceModel=true;AL.updateContextGlobal(AL.currentCtx);break;default:AL.currentCtx.err=40962;return}}Module["_alEnable"]=_alEnable;_alEnable.sig="vi";function _alGenBuffers(count,pBufferIds){if(!AL.currentCtx){return}for(var i=0;i>2]=buf.id}}Module["_alGenBuffers"]=_alGenBuffers;_alGenBuffers.sig="vii";function _alGenSources(count,pSourceIds){if(!AL.currentCtx){return}for(var i=0;i>2]=src.id}}Module["_alGenSources"]=_alGenSources;_alGenSources.sig="vii";function _alGetBoolean(param){var val=AL.getGlobalParam("alGetBoolean",param);if(val===null){return 0}switch(param){case 49152:case 49155:case 53248:return val!==0?1:0;default:AL.currentCtx.err=40962;return 0}}Module["_alGetBoolean"]=_alGetBoolean;_alGetBoolean.sig="ii";function _alGetBooleanv(param,pValues){var val=AL.getGlobalParam("alGetBooleanv",param);if(val===null||!pValues){return}switch(param){case 49152:case 49155:case 53248:HEAP8[pValues>>0]=val;break;default:AL.currentCtx.err=40962;return}}Module["_alGetBooleanv"]=_alGetBooleanv;_alGetBooleanv.sig="vii";function _alGetBuffer3f(bufferId,param,pValue0,pValue1,pValue2){var val=AL.getBufferParam("alGetBuffer3f",bufferId,param);if(val===null){return}if(!pValue0||!pValue1||!pValue2){AL.currentCtx.err=40963;return}AL.currentCtx.err=40962}Module["_alGetBuffer3f"]=_alGetBuffer3f;_alGetBuffer3f.sig="viiiii";function _alGetBuffer3i(bufferId,param,pValue0,pValue1,pValue2){var val=AL.getBufferParam("alGetBuffer3i",bufferId,param);if(val===null){return}if(!pValue0||!pValue1||!pValue2){AL.currentCtx.err=40963;return}AL.currentCtx.err=40962}Module["_alGetBuffer3i"]=_alGetBuffer3i;_alGetBuffer3i.sig="viiiii";function _alGetBufferf(bufferId,param,pValue){var val=AL.getBufferParam("alGetBufferf",bufferId,param);if(val===null){return}if(!pValue){AL.currentCtx.err=40963;return}AL.currentCtx.err=40962}Module["_alGetBufferf"]=_alGetBufferf;_alGetBufferf.sig="viii";function _alGetBufferfv(bufferId,param,pValues){var val=AL.getBufferParam("alGetBufferfv",bufferId,param);if(val===null){return}if(!pValues){AL.currentCtx.err=40963;return}AL.currentCtx.err=40962}Module["_alGetBufferfv"]=_alGetBufferfv;_alGetBufferfv.sig="viii";function _alGetBufferi(bufferId,param,pValue){var val=AL.getBufferParam("alGetBufferi",bufferId,param);if(val===null){return}if(!pValue){AL.currentCtx.err=40963;return}switch(param){case 8193:case 8194:case 8195:case 8196:HEAP32[pValue>>2]=val;break;default:AL.currentCtx.err=40962;return}}Module["_alGetBufferi"]=_alGetBufferi;_alGetBufferi.sig="viii";function _alGetBufferiv(bufferId,param,pValues){var val=AL.getBufferParam("alGetBufferiv",bufferId,param);if(val===null){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 8193:case 8194:case 8195:case 8196:HEAP32[pValues>>2]=val;break;case 8213:HEAP32[pValues>>2]=val[0];HEAP32[pValues+4>>2]=val[1];break;default:AL.currentCtx.err=40962;return}}Module["_alGetBufferiv"]=_alGetBufferiv;_alGetBufferiv.sig="viii";function _alGetDouble(param){var val=AL.getGlobalParam("alGetDouble",param);if(val===null){return 0}switch(param){case 49152:case 49155:case 53248:return val;default:AL.currentCtx.err=40962;return 0}}Module["_alGetDouble"]=_alGetDouble;_alGetDouble.sig="di";function _alGetDoublev(param,pValues){var val=AL.getGlobalParam("alGetDoublev",param);if(val===null||!pValues){return}switch(param){case 49152:case 49155:case 53248:HEAPF64[pValues>>3]=val;break;default:AL.currentCtx.err=40962;return}}Module["_alGetDoublev"]=_alGetDoublev;_alGetDoublev.sig="vii";function _alGetEnumValue(pEnumName){if(!AL.currentCtx){return 0}if(!pEnumName){AL.currentCtx.err=40963;return 0}var name=UTF8ToString(pEnumName);switch(name){case"AL_BITS":return 8194;case"AL_BUFFER":return 4105;case"AL_BUFFERS_PROCESSED":return 4118;case"AL_BUFFERS_QUEUED":return 4117;case"AL_BYTE_OFFSET":return 4134;case"AL_CHANNELS":return 8195;case"AL_CONE_INNER_ANGLE":return 4097;case"AL_CONE_OUTER_ANGLE":return 4098;case"AL_CONE_OUTER_GAIN":return 4130;case"AL_DIRECTION":return 4101;case"AL_DISTANCE_MODEL":return 53248;case"AL_DOPPLER_FACTOR":return 49152;case"AL_DOPPLER_VELOCITY":return 49153;case"AL_EXPONENT_DISTANCE":return 53253;case"AL_EXPONENT_DISTANCE_CLAMPED":return 53254;case"AL_EXTENSIONS":return 45060;case"AL_FORMAT_MONO16":return 4353;case"AL_FORMAT_MONO8":return 4352;case"AL_FORMAT_STEREO16":return 4355;case"AL_FORMAT_STEREO8":return 4354;case"AL_FREQUENCY":return 8193;case"AL_GAIN":return 4106;case"AL_INITIAL":return 4113;case"AL_INVALID":return-1;case"AL_ILLEGAL_ENUM":case"AL_INVALID_ENUM":return 40962;case"AL_INVALID_NAME":return 40961;case"AL_ILLEGAL_COMMAND":case"AL_INVALID_OPERATION":return 40964;case"AL_INVALID_VALUE":return 40963;case"AL_INVERSE_DISTANCE":return 53249;case"AL_INVERSE_DISTANCE_CLAMPED":return 53250;case"AL_LINEAR_DISTANCE":return 53251;case"AL_LINEAR_DISTANCE_CLAMPED":return 53252;case"AL_LOOPING":return 4103;case"AL_MAX_DISTANCE":return 4131;case"AL_MAX_GAIN":return 4110;case"AL_MIN_GAIN":return 4109;case"AL_NONE":return 0;case"AL_NO_ERROR":return 0;case"AL_ORIENTATION":return 4111;case"AL_OUT_OF_MEMORY":return 40965;case"AL_PAUSED":return 4115;case"AL_PENDING":return 8209;case"AL_PITCH":return 4099;case"AL_PLAYING":return 4114;case"AL_POSITION":return 4100;case"AL_PROCESSED":return 8210;case"AL_REFERENCE_DISTANCE":return 4128;case"AL_RENDERER":return 45059;case"AL_ROLLOFF_FACTOR":return 4129;case"AL_SAMPLE_OFFSET":return 4133;case"AL_SEC_OFFSET":return 4132;case"AL_SIZE":return 8196;case"AL_SOURCE_RELATIVE":return 514;case"AL_SOURCE_STATE":return 4112;case"AL_SOURCE_TYPE":return 4135;case"AL_SPEED_OF_SOUND":return 49155;case"AL_STATIC":return 4136;case"AL_STOPPED":return 4116;case"AL_STREAMING":return 4137;case"AL_UNDETERMINED":return 4144;case"AL_UNUSED":return 8208;case"AL_VELOCITY":return 4102;case"AL_VENDOR":return 45057;case"AL_VERSION":return 45058;case"AL_AUTO_SOFT":return 2;case"AL_SOURCE_DISTANCE_MODEL":return 512;case"AL_SOURCE_SPATIALIZE_SOFT":return 4628;case"AL_LOOP_POINTS_SOFT":return 8213;case"AL_BYTE_LENGTH_SOFT":return 8201;case"AL_SAMPLE_LENGTH_SOFT":return 8202;case"AL_SEC_LENGTH_SOFT":return 8203;case"AL_FORMAT_MONO_FLOAT32":return 65552;case"AL_FORMAT_STEREO_FLOAT32":return 65553;default:AL.currentCtx.err=40963;return 0}}Module["_alGetEnumValue"]=_alGetEnumValue;_alGetEnumValue.sig="ii";function _alGetError(){if(!AL.currentCtx){return 40964}else{var err=AL.currentCtx.err;AL.currentCtx.err=0;return err}}Module["_alGetError"]=_alGetError;_alGetError.sig="i";function _alGetFloat(param){var val=AL.getGlobalParam("alGetFloat",param);if(val===null){return 0}switch(param){case 49152:case 49155:case 53248:return val;default:return 0}}Module["_alGetFloat"]=_alGetFloat;_alGetFloat.sig="fi";function _alGetFloatv(param,pValues){var val=AL.getGlobalParam("alGetFloatv",param);if(val===null||!pValues){return}switch(param){case 49152:case 49155:case 53248:HEAPF32[pValues>>2]=val;break;default:AL.currentCtx.err=40962;return}}Module["_alGetFloatv"]=_alGetFloatv;_alGetFloatv.sig="vii";function _alGetInteger(param){var val=AL.getGlobalParam("alGetInteger",param);if(val===null){return 0}switch(param){case 49152:case 49155:case 53248:return val;default:AL.currentCtx.err=40962;return 0}}Module["_alGetInteger"]=_alGetInteger;_alGetInteger.sig="ii";function _alGetIntegerv(param,pValues){var val=AL.getGlobalParam("alGetIntegerv",param);if(val===null||!pValues){return}switch(param){case 49152:case 49155:case 53248:HEAP32[pValues>>2]=val;break;default:AL.currentCtx.err=40962;return}}Module["_alGetIntegerv"]=_alGetIntegerv;_alGetIntegerv.sig="vii";function _alGetListener3f(param,pValue0,pValue1,pValue2){var val=AL.getListenerParam("alGetListener3f",param);if(val===null){return}if(!pValue0||!pValue1||!pValue2){AL.currentCtx.err=40963;return}switch(param){case 4100:case 4102:HEAPF32[pValue0>>2]=val[0];HEAPF32[pValue1>>2]=val[1];HEAPF32[pValue2>>2]=val[2];break;default:AL.currentCtx.err=40962;return}}Module["_alGetListener3f"]=_alGetListener3f;_alGetListener3f.sig="viiii";function _alGetListener3i(param,pValue0,pValue1,pValue2){var val=AL.getListenerParam("alGetListener3i",param);if(val===null){return}if(!pValue0||!pValue1||!pValue2){AL.currentCtx.err=40963;return}switch(param){case 4100:case 4102:HEAP32[pValue0>>2]=val[0];HEAP32[pValue1>>2]=val[1];HEAP32[pValue2>>2]=val[2];break;default:AL.currentCtx.err=40962;return}}Module["_alGetListener3i"]=_alGetListener3i;_alGetListener3i.sig="viiii";function _alGetListenerf(param,pValue){var val=AL.getListenerParam("alGetListenerf",param);if(val===null){return}if(!pValue){AL.currentCtx.err=40963;return}switch(param){case 4106:HEAPF32[pValue>>2]=val;break;default:AL.currentCtx.err=40962;return}}Module["_alGetListenerf"]=_alGetListenerf;_alGetListenerf.sig="vii";function _alGetListenerfv(param,pValues){var val=AL.getListenerParam("alGetListenerfv",param);if(val===null){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 4100:case 4102:HEAPF32[pValues>>2]=val[0];HEAPF32[pValues+4>>2]=val[1];HEAPF32[pValues+8>>2]=val[2];break;case 4111:HEAPF32[pValues>>2]=val[0];HEAPF32[pValues+4>>2]=val[1];HEAPF32[pValues+8>>2]=val[2];HEAPF32[pValues+12>>2]=val[3];HEAPF32[pValues+16>>2]=val[4];HEAPF32[pValues+20>>2]=val[5];break;default:AL.currentCtx.err=40962;return}}Module["_alGetListenerfv"]=_alGetListenerfv;_alGetListenerfv.sig="vii";function _alGetListeneri(param,pValue){var val=AL.getListenerParam("alGetListeneri",param);if(val===null){return}if(!pValue){AL.currentCtx.err=40963;return}AL.currentCtx.err=40962}Module["_alGetListeneri"]=_alGetListeneri;_alGetListeneri.sig="vii";function _alGetListeneriv(param,pValues){var val=AL.getListenerParam("alGetListeneriv",param);if(val===null){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 4100:case 4102:HEAP32[pValues>>2]=val[0];HEAP32[pValues+4>>2]=val[1];HEAP32[pValues+8>>2]=val[2];break;case 4111:HEAP32[pValues>>2]=val[0];HEAP32[pValues+4>>2]=val[1];HEAP32[pValues+8>>2]=val[2];HEAP32[pValues+12>>2]=val[3];HEAP32[pValues+16>>2]=val[4];HEAP32[pValues+20>>2]=val[5];break;default:AL.currentCtx.err=40962;return}}Module["_alGetListeneriv"]=_alGetListeneriv;_alGetListeneriv.sig="vii";function _alGetSource3f(sourceId,param,pValue0,pValue1,pValue2){var val=AL.getSourceParam("alGetSource3f",sourceId,param);if(val===null){return}if(!pValue0||!pValue1||!pValue2){AL.currentCtx.err=40963;return}switch(param){case 4100:case 4101:case 4102:HEAPF32[pValue0>>2]=val[0];HEAPF32[pValue1>>2]=val[1];HEAPF32[pValue2>>2]=val[2];break;default:AL.currentCtx.err=40962;return}}Module["_alGetSource3f"]=_alGetSource3f;_alGetSource3f.sig="viiiii";function _alGetSource3i(sourceId,param,pValue0,pValue1,pValue2){var val=AL.getSourceParam("alGetSource3i",sourceId,param);if(val===null){return}if(!pValue0||!pValue1||!pValue2){AL.currentCtx.err=40963;return}switch(param){case 4100:case 4101:case 4102:HEAP32[pValue0>>2]=val[0];HEAP32[pValue1>>2]=val[1];HEAP32[pValue2>>2]=val[2];break;default:AL.currentCtx.err=40962;return}}Module["_alGetSource3i"]=_alGetSource3i;_alGetSource3i.sig="viiiii";function _alGetSourcef(sourceId,param,pValue){var val=AL.getSourceParam("alGetSourcef",sourceId,param);if(val===null){return}if(!pValue){AL.currentCtx.err=40963;return}switch(param){case 4097:case 4098:case 4099:case 4106:case 4109:case 4110:case 4128:case 4129:case 4130:case 4131:case 4132:case 4133:case 4134:case 8203:HEAPF32[pValue>>2]=val;break;default:AL.currentCtx.err=40962;return}}Module["_alGetSourcef"]=_alGetSourcef;_alGetSourcef.sig="viii";function _alGetSourcefv(sourceId,param,pValues){var val=AL.getSourceParam("alGetSourcefv",sourceId,param);if(val===null){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 4097:case 4098:case 4099:case 4106:case 4109:case 4110:case 4128:case 4129:case 4130:case 4131:case 4132:case 4133:case 4134:case 8203:HEAPF32[pValues>>2]=val[0];break;case 4100:case 4101:case 4102:HEAPF32[pValues>>2]=val[0];HEAPF32[pValues+4>>2]=val[1];HEAPF32[pValues+8>>2]=val[2];break;default:AL.currentCtx.err=40962;return}}Module["_alGetSourcefv"]=_alGetSourcefv;_alGetSourcefv.sig="viii";function _alGetSourcei(sourceId,param,pValue){var val=AL.getSourceParam("alGetSourcei",sourceId,param);if(val===null){return}if(!pValue){AL.currentCtx.err=40963;return}switch(param){case 514:case 4097:case 4098:case 4103:case 4105:case 4112:case 4117:case 4118:case 4128:case 4129:case 4131:case 4132:case 4133:case 4134:case 4135:case 4628:case 8201:case 8202:case 53248:HEAP32[pValue>>2]=val;break;default:AL.currentCtx.err=40962;return}}Module["_alGetSourcei"]=_alGetSourcei;_alGetSourcei.sig="viii";function _alGetSourceiv(sourceId,param,pValues){var val=AL.getSourceParam("alGetSourceiv",sourceId,param);if(val===null){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 514:case 4097:case 4098:case 4103:case 4105:case 4112:case 4117:case 4118:case 4128:case 4129:case 4131:case 4132:case 4133:case 4134:case 4135:case 4628:case 8201:case 8202:case 53248:HEAP32[pValues>>2]=val;break;case 4100:case 4101:case 4102:HEAP32[pValues>>2]=val[0];HEAP32[pValues+4>>2]=val[1];HEAP32[pValues+8>>2]=val[2];break;default:AL.currentCtx.err=40962;return}}Module["_alGetSourceiv"]=_alGetSourceiv;_alGetSourceiv.sig="viii";function _alGetString(param){if(!AL.currentCtx){return 0}if(AL.stringCache[param]){return AL.stringCache[param]}var ret;switch(param){case 0:ret="No Error";break;case 40961:ret="Invalid Name";break;case 40962:ret="Invalid Enum";break;case 40963:ret="Invalid Value";break;case 40964:ret="Invalid Operation";break;case 40965:ret="Out of Memory";break;case 45057:ret="Emscripten";break;case 45058:ret="1.1";break;case 45059:ret="WebAudio";break;case 45060:ret="";for(var ext in AL.AL_EXTENSIONS){ret=ret.concat(ext);ret=ret.concat(" ")}ret=ret.trim();break;default:AL.currentCtx.err=40962;return 0}ret=allocate(intArrayFromString(ret),ALLOC_NORMAL);AL.stringCache[param]=ret;return ret}Module["_alGetString"]=_alGetString;_alGetString.sig="ii";function _alIsBuffer(bufferId){if(!AL.currentCtx){return false}if(bufferId>AL.buffers.length){return false}if(!AL.buffers[bufferId]){return false}else{return true}}Module["_alIsBuffer"]=_alIsBuffer;_alIsBuffer.sig="ii";function _alIsEnabled(param){if(!AL.currentCtx){return 0}switch(param){case"AL_SOURCE_DISTANCE_MODEL":return AL.currentCtx.sourceDistanceModel?0:1;default:AL.currentCtx.err=40962;return 0}}Module["_alIsEnabled"]=_alIsEnabled;_alIsEnabled.sig="ii";function _alIsExtensionPresent(pExtName){var name=UTF8ToString(pExtName);return AL.AL_EXTENSIONS[name]?1:0}Module["_alIsExtensionPresent"]=_alIsExtensionPresent;_alIsExtensionPresent.sig="ii";function _alIsSource(sourceId){if(!AL.currentCtx){return false}if(!AL.currentCtx.sources[sourceId]){return false}else{return true}}Module["_alIsSource"]=_alIsSource;_alIsSource.sig="ii";function _alListener3f(param,value0,value1,value2){switch(param){case 4100:case 4102:AL.paramArray[0]=value0;AL.paramArray[1]=value1;AL.paramArray[2]=value2;AL.setListenerParam("alListener3f",param,AL.paramArray);break;default:AL.setListenerParam("alListener3f",param,null);break}}Module["_alListener3f"]=_alListener3f;_alListener3f.sig="vifff";function _alListener3i(param,value0,value1,value2){switch(param){case 4100:case 4102:AL.paramArray[0]=value0;AL.paramArray[1]=value1;AL.paramArray[2]=value2;AL.setListenerParam("alListener3i",param,AL.paramArray);break;default:AL.setListenerParam("alListener3i",param,null);break}}Module["_alListener3i"]=_alListener3i;_alListener3i.sig="viiii";function _alListenerf(param,value){switch(param){case 4106:AL.setListenerParam("alListenerf",param,value);break;default:AL.setListenerParam("alListenerf",param,null);break}}Module["_alListenerf"]=_alListenerf;_alListenerf.sig="vif";function _alListenerfv(param,pValues){if(!AL.currentCtx){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 4100:case 4102:AL.paramArray[0]=HEAPF32[pValues>>2];AL.paramArray[1]=HEAPF32[pValues+4>>2];AL.paramArray[2]=HEAPF32[pValues+8>>2];AL.setListenerParam("alListenerfv",param,AL.paramArray);break;case 4111:AL.paramArray[0]=HEAPF32[pValues>>2];AL.paramArray[1]=HEAPF32[pValues+4>>2];AL.paramArray[2]=HEAPF32[pValues+8>>2];AL.paramArray[3]=HEAPF32[pValues+12>>2];AL.paramArray[4]=HEAPF32[pValues+16>>2];AL.paramArray[5]=HEAPF32[pValues+20>>2];AL.setListenerParam("alListenerfv",param,AL.paramArray);break;default:AL.setListenerParam("alListenerfv",param,null);break}}Module["_alListenerfv"]=_alListenerfv;_alListenerfv.sig="vii";function _alListeneri(param,value){AL.setListenerParam("alListeneri",param,null)}Module["_alListeneri"]=_alListeneri;_alListeneri.sig="vii";function _alListeneriv(param,pValues){if(!AL.currentCtx){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 4100:case 4102:AL.paramArray[0]=HEAP32[pValues>>2];AL.paramArray[1]=HEAP32[pValues+4>>2];AL.paramArray[2]=HEAP32[pValues+8>>2];AL.setListenerParam("alListeneriv",param,AL.paramArray);break;case 4111:AL.paramArray[0]=HEAP32[pValues>>2];AL.paramArray[1]=HEAP32[pValues+4>>2];AL.paramArray[2]=HEAP32[pValues+8>>2];AL.paramArray[3]=HEAP32[pValues+12>>2];AL.paramArray[4]=HEAP32[pValues+16>>2];AL.paramArray[5]=HEAP32[pValues+20>>2];AL.setListenerParam("alListeneriv",param,AL.paramArray);break;default:AL.setListenerParam("alListeneriv",param,null);break}}Module["_alListeneriv"]=_alListeneriv;_alListeneriv.sig="vii";function _alSource3f(sourceId,param,value0,value1,value2){switch(param){case 4100:case 4101:case 4102:AL.paramArray[0]=value0;AL.paramArray[1]=value1;AL.paramArray[2]=value2;AL.setSourceParam("alSource3f",sourceId,param,AL.paramArray);break;default:AL.setSourceParam("alSource3f",sourceId,param,null);break}}Module["_alSource3f"]=_alSource3f;_alSource3f.sig="viifff";function _alSource3i(sourceId,param,value0,value1,value2){switch(param){case 4100:case 4101:case 4102:AL.paramArray[0]=value0;AL.paramArray[1]=value1;AL.paramArray[2]=value2;AL.setSourceParam("alSource3i",sourceId,param,AL.paramArray);break;default:AL.setSourceParam("alSource3i",sourceId,param,null);break}}Module["_alSource3i"]=_alSource3i;_alSource3i.sig="viiiii";function _alSourcePause(sourceId){if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}AL.setSourceState(src,4115)}Module["_alSourcePause"]=_alSourcePause;_alSourcePause.sig="vi";function _alSourcePausev(count,pSourceIds){if(!AL.currentCtx){return}if(!pSourceIds){AL.currentCtx.err=40963}for(var i=0;i>2]]){AL.currentCtx.err=40961;return}}for(var i=0;i>2],4115)}}Module["_alSourcePausev"]=_alSourcePausev;_alSourcePausev.sig="vii";function _alSourcePlay(sourceId){if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}AL.setSourceState(src,4114)}Module["_alSourcePlay"]=_alSourcePlay;_alSourcePlay.sig="vi";function _alSourcePlayv(count,pSourceIds){if(!AL.currentCtx){return}if(!pSourceIds){AL.currentCtx.err=40963}for(var i=0;i>2]]){AL.currentCtx.err=40961;return}}for(var i=0;i>2],4114)}}Module["_alSourcePlayv"]=_alSourcePlayv;_alSourcePlayv.sig="vii";function _alSourceQueueBuffers(sourceId,count,pBufferIds){if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}if(src.type===4136){AL.currentCtx.err=40964;return}if(count===0){return}var templateBuf=AL.buffers[0];for(var i=0;i>2];var buf=AL.buffers[bufId];if(!buf){AL.currentCtx.err=40961;return}if(templateBuf.id!==0&&(buf.frequency!==templateBuf.frequency||buf.bytesPerSample!==templateBuf.bytesPerSample||buf.channels!==templateBuf.channels)){AL.currentCtx.err=40964}}if(src.bufQueue.length===1&&src.bufQueue[0].id===0){src.bufQueue.length=0}src.type=4137;for(var i=0;i>2];var buf=AL.buffers[bufId];buf.refCount++;src.bufQueue.push(buf)}if(src.looping){AL.cancelPendingSourceAudio(src)}AL.initSourcePanner(src);AL.scheduleSourceAudio(src)}Module["_alSourceQueueBuffers"]=_alSourceQueueBuffers;_alSourceQueueBuffers.sig="viii";function _alSourceRewind(sourceId){if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}AL.setSourceState(src,4116);AL.setSourceState(src,4113)}Module["_alSourceRewind"]=_alSourceRewind;_alSourceRewind.sig="vi";function _alSourceRewindv(count,pSourceIds){if(!AL.currentCtx){return}if(!pSourceIds){AL.currentCtx.err=40963}for(var i=0;i>2]]){AL.currentCtx.err=40961;return}}for(var i=0;i>2],4113)}}Module["_alSourceRewindv"]=_alSourceRewindv;_alSourceRewindv.sig="vii";function _alSourceStop(sourceId){if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}AL.setSourceState(src,4116)}Module["_alSourceStop"]=_alSourceStop;_alSourceStop.sig="vi";function _alSourceStopv(count,pSourceIds){if(!AL.currentCtx){return}if(!pSourceIds){AL.currentCtx.err=40963}for(var i=0;i>2]]){AL.currentCtx.err=40961;return}}for(var i=0;i>2],4116)}}Module["_alSourceStopv"]=_alSourceStopv;_alSourceStopv.sig="vii";function _alSourceUnqueueBuffers(sourceId,count,pBufferIds){if(!AL.currentCtx){return}var src=AL.currentCtx.sources[sourceId];if(!src){AL.currentCtx.err=40961;return}if(count>(src.bufQueue.length===1&&src.bufQueue[0].id===0?0:src.bufsProcessed)){AL.currentCtx.err=40963;return}if(count===0){return}for(var i=0;i>2]=buf.id;src.bufsProcessed--}if(src.bufQueue.length===0){src.bufQueue.push(AL.buffers[0])}AL.initSourcePanner(src);AL.scheduleSourceAudio(src)}Module["_alSourceUnqueueBuffers"]=_alSourceUnqueueBuffers;_alSourceUnqueueBuffers.sig="viii";function _alSourcef(sourceId,param,value){switch(param){case 4097:case 4098:case 4099:case 4106:case 4109:case 4110:case 4128:case 4129:case 4130:case 4131:case 4132:case 4133:case 4134:case 8203:AL.setSourceParam("alSourcef",sourceId,param,value);break;default:AL.setSourceParam("alSourcef",sourceId,param,null);break}}Module["_alSourcef"]=_alSourcef;_alSourcef.sig="viif";function _alSourcefv(sourceId,param,pValues){if(!AL.currentCtx){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 4097:case 4098:case 4099:case 4106:case 4109:case 4110:case 4128:case 4129:case 4130:case 4131:case 4132:case 4133:case 4134:case 8203:var val=HEAPF32[pValues>>2];AL.setSourceParam("alSourcefv",sourceId,param,val);break;case 4100:case 4101:case 4102:AL.paramArray[0]=HEAPF32[pValues>>2];AL.paramArray[1]=HEAPF32[pValues+4>>2];AL.paramArray[2]=HEAPF32[pValues+8>>2];AL.setSourceParam("alSourcefv",sourceId,param,AL.paramArray);break;default:AL.setSourceParam("alSourcefv",sourceId,param,null);break}}Module["_alSourcefv"]=_alSourcefv;_alSourcefv.sig="viii";function _alSourceiv(sourceId,param,pValues){if(!AL.currentCtx){return}if(!pValues){AL.currentCtx.err=40963;return}switch(param){case 514:case 4097:case 4098:case 4103:case 4105:case 4128:case 4129:case 4131:case 4132:case 4133:case 4134:case 4628:case 8201:case 8202:case 53248:var val=HEAP32[pValues>>2];AL.setSourceParam("alSourceiv",sourceId,param,val);break;case 4100:case 4101:case 4102:AL.paramArray[0]=HEAP32[pValues>>2];AL.paramArray[1]=HEAP32[pValues+4>>2];AL.paramArray[2]=HEAP32[pValues+8>>2];AL.setSourceParam("alSourceiv",sourceId,param,AL.paramArray);break;default:AL.setSourceParam("alSourceiv",sourceId,param,null);break}}Module["_alSourceiv"]=_alSourceiv;_alSourceiv.sig="viii";function _alSpeedOfSound(value){AL.setGlobalParam("alSpeedOfSound",49155,value)}Module["_alSpeedOfSound"]=_alSpeedOfSound;_alSpeedOfSound.sig="vi";function _alarm(seconds){setTimeout(function(){if(__sigalrm_handler)wasmTable.get(__sigalrm_handler)(0)},seconds*1e3)}Module["_alarm"]=_alarm;function _alcCaptureCloseDevice(deviceId){var c=AL.requireValidCaptureDevice(deviceId,"alcCaptureCloseDevice");if(!c)return false;delete AL.captures[deviceId];AL.freeIds.push(deviceId);if(c.mediaStreamSourceNode)c.mediaStreamSourceNode.disconnect();if(c.mergerNode)c.mergerNode.disconnect();if(c.splitterNode)c.splitterNode.disconnect();if(c.scriptProcessorNode)c.scriptProcessorNode.disconnect();if(c.mediaStream){c.mediaStream.getTracks().forEach(function(track){track.stop()})}delete c.buffers;c.capturedFrameCount=0;c.isCapturing=false;return true}Module["_alcCaptureCloseDevice"]=_alcCaptureCloseDevice;_alcCaptureCloseDevice.sig="ii";function listenOnce(object,event,func){object.addEventListener(event,func,{"once":true})}Module["listenOnce"]=listenOnce;function autoResumeAudioContext(ctx,elements){if(!elements){elements=[document,document.getElementById("canvas")]}["keydown","mousedown","touchstart"].forEach(function(event){elements.forEach(function(element){if(element){listenOnce(element,event,function(){if(ctx.state==="suspended")ctx.resume()})}})})}Module["autoResumeAudioContext"]=autoResumeAudioContext;function _alcCaptureOpenDevice(pDeviceName,requestedSampleRate,format,bufferFrameCapacity){var resolvedDeviceName=AL.CAPTURE_DEVICE_NAME;if(pDeviceName!==0){resolvedDeviceName=UTF8ToString(pDeviceName);if(resolvedDeviceName!==AL.CAPTURE_DEVICE_NAME){AL.alcErr=40965;return 0}}if(bufferFrameCapacity<0){AL.alcErr=40964;return 0}navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia;var has_getUserMedia=navigator.getUserMedia||navigator.mediaDevices&&navigator.mediaDevices.getUserMedia;if(!has_getUserMedia){AL.alcErr=40965;return 0}var AudioContext=window.AudioContext||window.webkitAudioContext;if(!AL.sharedCaptureAudioCtx){try{AL.sharedCaptureAudioCtx=new AudioContext}catch(e){AL.alcErr=40965;return 0}}autoResumeAudioContext(AL.sharedCaptureAudioCtx);var outputChannelCount;switch(format){case 65552:case 4353:case 4352:outputChannelCount=1;break;case 65553:case 4355:case 4354:outputChannelCount=2;break;default:AL.alcErr=40964;return 0}function newF32Array(cap){return new Float32Array(cap)}function newI16Array(cap){return new Int16Array(cap)}function newU8Array(cap){return new Uint8Array(cap)}var requestedSampleType;var newSampleArray;switch(format){case 65552:case 65553:requestedSampleType="f32";newSampleArray=newF32Array;break;case 4353:case 4355:requestedSampleType="i16";newSampleArray=newI16Array;break;case 4352:case 4354:requestedSampleType="u8";newSampleArray=newU8Array;break}var buffers=[];try{for(var chan=0;chanoutputChannelCount){newCapture.mergerNode=newCapture.audioCtx.createChannelMerger(inputChannelCount);newCapture.mediaStreamSourceNode.connect(newCapture.mergerNode);newCapture.mergerNode.connect(newCapture.scriptProcessorNode)}else if(inputChannelCountc.capturedFrameCount/fratio){err("alcCaptureSamples() with invalid bufferSize");AL.alcErr=40964;return}function setF32Sample(i,sample){HEAPF32[pFrames+4*i>>2]=sample}function setI16Sample(i,sample){HEAP16[pFrames+2*i>>1]=sample}function setU8Sample(i,sample){HEAP8[pFrames+i>>0]=sample}var setSample;switch(c.requestedSampleType){case"f32":setSample=setF32Sample;break;case"i16":setSample=setI16Sample;break;case"u8":setSample=setU8Sample;break;default:return}if(Math.floor(fratio)==fratio){for(var i=0,frame_i=0;frame_i0){return 0}delete AL.deviceRefCounts[deviceId];AL.freeIds.push(deviceId);return 1}Module["_alcCloseDevice"]=_alcCloseDevice;_alcCloseDevice.sig="ii";function _alcCreateContext(deviceId,pAttrList){if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return 0}var options=null;var attrs=[];var hrtf=null;pAttrList>>=2;if(pAttrList){var attr=0;var val=0;while(true){attr=HEAP32[pAttrList++];attrs.push(attr);if(attr===0){break}val=HEAP32[pAttrList++];attrs.push(val);switch(attr){case 4103:if(!options){options={}}options.sampleRate=val;break;case 4112:case 4113:break;case 6546:switch(val){case 0:hrtf=false;break;case 1:hrtf=true;break;case 2:break;default:AL.alcErr=40964;return 0}break;case 6550:if(val!==0){AL.alcErr=40964;return 0}break;default:AL.alcErr=40964;return 0}}}var AudioContext=window.AudioContext||window.webkitAudioContext;var ac=null;try{if(options){ac=new AudioContext(options)}else{ac=new AudioContext}}catch(e){if(e.name==="NotSupportedError"){AL.alcErr=40964}else{AL.alcErr=40961}return 0}autoResumeAudioContext(ac);if(typeof ac.createGain==="undefined"){ac.createGain=ac.createGainNode}var gain=ac.createGain();gain.connect(ac.destination);var ctx={deviceId:deviceId,id:AL.newId(),attrs:attrs,audioCtx:ac,listener:{position:[0,0,0],velocity:[0,0,0],direction:[0,0,0],up:[0,0,0]},sources:[],interval:setInterval(function(){AL.scheduleContextAudio(ctx)},AL.QUEUE_INTERVAL),gain:gain,distanceModel:53250,speedOfSound:343.3,dopplerFactor:1,sourceDistanceModel:false,hrtf:hrtf||false,_err:0,get err(){return this._err},set err(val){if(this._err===0||val===0){this._err=val}}};AL.deviceRefCounts[deviceId]++;AL.contexts[ctx.id]=ctx;if(hrtf!==null){for(var ctxId in AL.contexts){var c=AL.contexts[ctxId];if(c.deviceId===deviceId){c.hrtf=hrtf;AL.updateContextGlobal(c)}}}return ctx.id}Module["_alcCreateContext"]=_alcCreateContext;_alcCreateContext.sig="iii";function _alcDestroyContext(contextId){var ctx=AL.contexts[contextId];if(AL.currentCtx===ctx){AL.alcErr=40962;return}if(AL.contexts[contextId].interval){clearInterval(AL.contexts[contextId].interval)}AL.deviceRefCounts[ctx.deviceId]--;delete AL.contexts[contextId];AL.freeIds.push(contextId)}Module["_alcDestroyContext"]=_alcDestroyContext;_alcDestroyContext.sig="vi";function _alcGetContextsDevice(contextId){if(contextId in AL.contexts){return AL.contexts[contextId].deviceId}else{return 0}}Module["_alcGetContextsDevice"]=_alcGetContextsDevice;_alcGetContextsDevice.sig="ii";function _alcGetCurrentContext(){if(AL.currentCtx!==null){return AL.currentCtx.id}else{return 0}}Module["_alcGetCurrentContext"]=_alcGetCurrentContext;_alcGetCurrentContext.sig="i";function _alcGetEnumValue(deviceId,pEnumName){if(deviceId!==0&&!(deviceId in AL.deviceRefCounts)){return 0}else if(!pEnumName){AL.alcErr=40964;return 0}var name=UTF8ToString(pEnumName);switch(name){case"ALC_NO_ERROR":return 0;case"ALC_INVALID_DEVICE":return 40961;case"ALC_INVALID_CONTEXT":return 40962;case"ALC_INVALID_ENUM":return 40963;case"ALC_INVALID_VALUE":return 40964;case"ALC_OUT_OF_MEMORY":return 40965;case"ALC_MAJOR_VERSION":return 4096;case"ALC_MINOR_VERSION":return 4097;case"ALC_ATTRIBUTES_SIZE":return 4098;case"ALC_ALL_ATTRIBUTES":return 4099;case"ALC_DEFAULT_DEVICE_SPECIFIER":return 4100;case"ALC_DEVICE_SPECIFIER":return 4101;case"ALC_EXTENSIONS":return 4102;case"ALC_FREQUENCY":return 4103;case"ALC_REFRESH":return 4104;case"ALC_SYNC":return 4105;case"ALC_MONO_SOURCES":return 4112;case"ALC_STEREO_SOURCES":return 4113;case"ALC_CAPTURE_DEVICE_SPECIFIER":return 784;case"ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER":return 785;case"ALC_CAPTURE_SAMPLES":return 786;case"ALC_HRTF_SOFT":return 6546;case"ALC_HRTF_ID_SOFT":return 6550;case"ALC_DONT_CARE_SOFT":return 2;case"ALC_HRTF_STATUS_SOFT":return 6547;case"ALC_NUM_HRTF_SPECIFIERS_SOFT":return 6548;case"ALC_HRTF_SPECIFIER_SOFT":return 6549;case"ALC_HRTF_DISABLED_SOFT":return 0;case"ALC_HRTF_ENABLED_SOFT":return 1;case"ALC_HRTF_DENIED_SOFT":return 2;case"ALC_HRTF_REQUIRED_SOFT":return 3;case"ALC_HRTF_HEADPHONES_DETECTED_SOFT":return 4;case"ALC_HRTF_UNSUPPORTED_FORMAT_SOFT":return 5;default:AL.alcErr=40964;return 0}}Module["_alcGetEnumValue"]=_alcGetEnumValue;_alcGetEnumValue.sig="iii";function _alcGetError(deviceId){var err=AL.alcErr;AL.alcErr=0;return err}Module["_alcGetError"]=_alcGetError;_alcGetError.sig="ii";function _alcGetIntegerv(deviceId,param,size,pValues){if(size===0||!pValues){return}switch(param){case 4096:HEAP32[pValues>>2]=1;break;case 4097:HEAP32[pValues>>2]=1;break;case 4098:if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return}if(!AL.currentCtx){AL.alcErr=40962;return}HEAP32[pValues>>2]=AL.currentCtx.attrs.length;break;case 4099:if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return}if(!AL.currentCtx){AL.alcErr=40962;return}for(var i=0;i>2]=AL.currentCtx.attrs[i]}break;case 4103:if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return}if(!AL.currentCtx){AL.alcErr=40962;return}HEAP32[pValues>>2]=AL.currentCtx.audioCtx.sampleRate;break;case 4112:case 4113:if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return}if(!AL.currentCtx){AL.alcErr=40962;return}HEAP32[pValues>>2]=2147483647;break;case 6546:case 6547:if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return}var hrtfStatus=0;for(var ctxId in AL.contexts){var ctx=AL.contexts[ctxId];if(ctx.deviceId===deviceId){hrtfStatus=ctx.hrtf?1:0}}HEAP32[pValues>>2]=hrtfStatus;break;case 6548:if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return}HEAP32[pValues>>2]=1;break;case 131075:if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return}if(!AL.currentCtx){AL.alcErr=40962;return}HEAP32[pValues>>2]=1;case 786:var c=AL.requireValidCaptureDevice(deviceId,"alcGetIntegerv");if(!c){return}var n=c.capturedFrameCount;var dstfreq=c.requestedSampleRate;var srcfreq=c.audioCtx.sampleRate;var nsamples=Math.floor(n*(dstfreq/srcfreq));HEAP32[pValues>>2]=nsamples;break;default:AL.alcErr=40963;return}}Module["_alcGetIntegerv"]=_alcGetIntegerv;_alcGetIntegerv.sig="viiii";function _alcGetString(deviceId,param){if(AL.alcStringCache[param]){return AL.alcStringCache[param]}var ret;switch(param){case 0:ret="No Error";break;case 40961:ret="Invalid Device";break;case 40962:ret="Invalid Context";break;case 40963:ret="Invalid Enum";break;case 40964:ret="Invalid Value";break;case 40965:ret="Out of Memory";break;case 4100:if(typeof AudioContext!=="undefined"||typeof webkitAudioContext!=="undefined"){ret=AL.DEVICE_NAME}else{return 0}break;case 4101:if(typeof AudioContext!=="undefined"||typeof webkitAudioContext!=="undefined"){ret=AL.DEVICE_NAME.concat("\0")}else{ret="\0"}break;case 785:ret=AL.CAPTURE_DEVICE_NAME;break;case 784:if(deviceId===0)ret=AL.CAPTURE_DEVICE_NAME.concat("\0");else{var c=AL.requireValidCaptureDevice(deviceId,"alcGetString");if(!c){return 0}ret=c.deviceName}break;case 4102:if(!deviceId){AL.alcErr=40961;return 0}ret="";for(var ext in AL.ALC_EXTENSIONS){ret=ret.concat(ext);ret=ret.concat(" ")}ret=ret.trim();break;default:AL.alcErr=40963;return 0}ret=allocate(intArrayFromString(ret),ALLOC_NORMAL);AL.alcStringCache[param]=ret;return ret}Module["_alcGetString"]=_alcGetString;_alcGetString.sig="iii";function _alcIsExtensionPresent(deviceId,pExtName){var name=UTF8ToString(pExtName);return AL.ALC_EXTENSIONS[name]?1:0}Module["_alcIsExtensionPresent"]=_alcIsExtensionPresent;_alcIsExtensionPresent.sig="iii";function _alcMakeContextCurrent(contextId){if(contextId===0){AL.currentCtx=null;return 0}else{AL.currentCtx=AL.contexts[contextId];return 1}}Module["_alcMakeContextCurrent"]=_alcMakeContextCurrent;_alcMakeContextCurrent.sig="ii";function _alcOpenDevice(pDeviceName){if(pDeviceName){var name=UTF8ToString(pDeviceName);if(name!==AL.DEVICE_NAME){return 0}}if(typeof AudioContext!=="undefined"||typeof webkitAudioContext!=="undefined"){var deviceId=AL.newId();AL.deviceRefCounts[deviceId]=0;return deviceId}else{return 0}}Module["_alcOpenDevice"]=_alcOpenDevice;_alcOpenDevice.sig="ii";function _alcProcessContext(contextId){}Module["_alcProcessContext"]=_alcProcessContext;_alcProcessContext.sig="vi";function _alcSuspendContext(contextId){}Module["_alcSuspendContext"]=_alcSuspendContext;_alcSuspendContext.sig="vi";function _chroot(path){setErrNo(2);return-1}Module["_chroot"]=_chroot;_chroot.sig="ii";function _clock(){if(_clock.start===undefined)_clock.start=Date.now();return(Date.now()-_clock.start)*(1e6/1e3)|0}Module["_clock"]=_clock;_clock.sig="i";function _emscripten_get_now_res(){if(ENVIRONMENT_IS_NODE){return 1}else return 1e3}Module["_emscripten_get_now_res"]=_emscripten_get_now_res;function _clock_getres(clk_id,res){var nsec;if(clk_id===0){nsec=1e3*1e3}else if(clk_id===1&&_emscripten_get_now_is_monotonic){nsec=_emscripten_get_now_res()}else{setErrNo(28);return-1}HEAP32[res>>2]=nsec/1e9|0;HEAP32[res+4>>2]=nsec;return 0}Module["_clock_getres"]=_clock_getres;var DLFCN={error:null,errorMsg:null};Module["DLFCN"]=DLFCN;function _dlclose(handle){var lib=LDSO.loadedLibs[handle];if(!lib){DLFCN.errorMsg="Tried to dlclose() unopened handle: "+handle;return 1}if(--lib.refcount==0){delete LDSO.loadedLibNames[lib.name];delete LDSO.loadedLibs[handle]}return 0}Module["_dlclose"]=_dlclose;_dlclose.sig="ii";function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}Module["stringToNewUTF8"]=stringToNewUTF8;function _dlerror(){if(DLFCN.errorMsg===null){return 0}if(DLFCN.error)_free(DLFCN.error);DLFCN.error=stringToNewUTF8(DLFCN.errorMsg);DLFCN.errorMsg=null;return DLFCN.error}Module["_dlerror"]=_dlerror;_dlerror.sig="i";var ENV={};Module["ENV"]=ENV;function dlopenInternal(filenameAddr,flags,jsflags){var searchpaths=[];var filename;if(filenameAddr===0){filename="__main__"}else{filename=UTF8ToString(filenameAddr);var isValidFile=function(filename){var target=FS.findObject(filename);return target&&!target.isFolder&&!target.isDevice};if(!isValidFile(filename)){if(ENV["LD_LIBRARY_PATH"]){searchpaths=ENV["LD_LIBRARY_PATH"].split(":")}for(var ident in searchpaths){var searchfile=PATH.join2(searchpaths[ident],filename);if(isValidFile(searchfile)){filename=searchfile;break}}}}if(!(flags&(1|2))){DLFCN.errorMsg="invalid mode for dlopen(): Either RTLD_LAZY or RTLD_NOW is required";return 0}var combinedFlags={global:Boolean(flags&256),nodelete:Boolean(flags&4096),loadAsync:jsflags.loadAsync,fs:jsflags.fs};if(jsflags.loadAsync){return loadDynamicLibrary(filename,combinedFlags)}try{return loadDynamicLibrary(filename,combinedFlags)}catch(e){DLFCN.errorMsg="Could not load dynamic lib: "+filename+"\n"+e;return 0}}Module["dlopenInternal"]=dlopenInternal;function _dlopen(filename,flags){var jsflags={loadAsync:false,fs:FS};return dlopenInternal(filename,flags,jsflags)}Module["_dlopen"]=_dlopen;_dlopen.sig="iii";function _dlsym(handle,symbol){symbol=UTF8ToString(symbol);var result;if(handle==0){result=resolveGlobalSymbol(symbol,true);if(!result){DLFCN.errorMsg='Tried to lookup unknown symbol "'+symbol+'" in dynamic lib: RTLD_DEFAULT';return 0}}else{var lib=LDSO.loadedLibs[handle];if(!lib){DLFCN.errorMsg="Tried to dlsym() from an unopened handle: "+handle;return 0}if(!lib.module.hasOwnProperty(symbol)){DLFCN.errorMsg='Tried to lookup unknown symbol "'+symbol+'" in dynamic lib: '+lib.name;return 0}result=lib.module["orig$"+symbol];if(!result)result=lib.module[symbol]}if(typeof result==="function"){return addFunctionWasm(result,result.sig)}else{return result}}Module["_dlsym"]=_dlsym;_dlsym.sig="iii";function _emscripten_alcDevicePauseSOFT(deviceId){if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return}if(AL.paused){return}AL.paused=true;for(var ctxId in AL.contexts){var ctx=AL.contexts[ctxId];if(ctx.deviceId!==deviceId){continue}ctx.audioCtx.suspend();clearInterval(ctx.interval);ctx.interval=null}}Module["_emscripten_alcDevicePauseSOFT"]=_emscripten_alcDevicePauseSOFT;_emscripten_alcDevicePauseSOFT.sig="vi";function _emscripten_alcDeviceResumeSOFT(deviceId){if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return}if(!AL.paused){return}AL.paused=false;for(var ctxId in AL.contexts){var ctx=AL.contexts[ctxId];if(ctx.deviceId!==deviceId){continue}ctx.interval=setInterval(function(){AL.scheduleContextAudio(ctx)},AL.QUEUE_INTERVAL);ctx.audioCtx.resume()}}Module["_emscripten_alcDeviceResumeSOFT"]=_emscripten_alcDeviceResumeSOFT;_emscripten_alcDeviceResumeSOFT.sig="vi";function _emscripten_alcGetStringiSOFT(deviceId,param,index){if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return 0}if(AL.alcStringCache[param]){return AL.alcStringCache[param]}var ret;switch(param){case 6549:if(index===0){ret="Web Audio HRTF"}else{AL.alcErr=40964;return 0}break;default:if(index===0){return _alcGetString(deviceId,param)}else{AL.alcErr=40963;return 0}}ret=allocate(intArrayFromString(ret),ALLOC_NORMAL);AL.alcStringCache[param]=ret;return ret}Module["_emscripten_alcGetStringiSOFT"]=_emscripten_alcGetStringiSOFT;_emscripten_alcGetStringiSOFT.sig="iiii";function _emscripten_alcResetDeviceSOFT(deviceId,pAttrList){if(!(deviceId in AL.deviceRefCounts)){AL.alcErr=40961;return 0}var hrtf=null;pAttrList>>=2;if(pAttrList){var attr=0;var val=0;while(true){attr=HEAP32[pAttrList++];if(attr===0){break}val=HEAP32[pAttrList++];switch(attr){case 6546:if(val===1){hrtf=true}else if(val===0){hrtf=false}break}}}if(hrtf!==null){for(var ctxId in AL.contexts){var ctx=AL.contexts[ctxId];if(ctx.deviceId===deviceId){ctx.hrtf=hrtf;AL.updateContextGlobal(ctx)}}}return 1}Module["_emscripten_alcResetDeviceSOFT"]=_emscripten_alcResetDeviceSOFT;_emscripten_alcResetDeviceSOFT.sig="iii";var readAsmConstArgsArray=[];Module["readAsmConstArgsArray"]=readAsmConstArgsArray;function readAsmConstArgs(sigPtr,buf){readAsmConstArgsArray.length=0;var ch;buf>>=2;while(ch=HEAPU8[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?HEAPF64[buf++>>1]:HEAP32[buf]);++buf}return readAsmConstArgsArray}Module["readAsmConstArgs"]=readAsmConstArgs;function _emscripten_asm_const_int(code,sigPtr,argbuf){code-=1024;var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}Module["_emscripten_asm_const_int"]=_emscripten_asm_const_int;_emscripten_asm_const_int.sig="iiii";function _emscripten_exit_with_live_runtime(){throw"unwind"}Module["_emscripten_exit_with_live_runtime"]=_emscripten_exit_with_live_runtime;_emscripten_exit_with_live_runtime.sig="v";function _emscripten_get_heap_max(){return 2147483648}Module["_emscripten_get_heap_max"]=_emscripten_get_heap_max;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}}Module["__webgl_enable_ANGLE_instanced_arrays"]=__webgl_enable_ANGLE_instanced_arrays;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}}Module["__webgl_enable_OES_vertex_array_object"]=__webgl_enable_OES_vertex_array_object;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}}Module["__webgl_enable_WEBGL_draw_buffers"]=__webgl_enable_WEBGL_draw_buffers;function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}Module["__webgl_enable_WEBGL_multi_draw"]=__webgl_enable_WEBGL_multi_draw;var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],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>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;canvas.getContext=function(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}}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.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};Module["GL"]=GL;function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}Module["_emscripten_glActiveTexture"]=_emscripten_glActiveTexture;_emscripten_glActiveTexture.sig="vi";function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}Module["_emscripten_glAttachShader"]=_emscripten_glAttachShader;_emscripten_glAttachShader.sig="vii";function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])}Module["_emscripten_glBeginQueryEXT"]=_emscripten_glBeginQueryEXT;_emscripten_glBeginQueryEXT.sig="vii";function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}Module["_emscripten_glBindAttribLocation"]=_emscripten_glBindAttribLocation;_emscripten_glBindAttribLocation.sig="viii";function _emscripten_glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}Module["_emscripten_glBindBuffer"]=_emscripten_glBindBuffer;_emscripten_glBindBuffer.sig="vii";function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}Module["_emscripten_glBindFramebuffer"]=_emscripten_glBindFramebuffer;_emscripten_glBindFramebuffer.sig="vii";function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}Module["_emscripten_glBindRenderbuffer"]=_emscripten_glBindRenderbuffer;_emscripten_glBindRenderbuffer.sig="vii";function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}Module["_emscripten_glBindTexture"]=_emscripten_glBindTexture;_emscripten_glBindTexture.sig="vii";function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}Module["_emscripten_glBindVertexArrayOES"]=_emscripten_glBindVertexArrayOES;_emscripten_glBindVertexArrayOES.sig="vi";function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}Module["_emscripten_glBlendColor"]=_emscripten_glBlendColor;_emscripten_glBlendColor.sig="vffff";function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}Module["_emscripten_glBlendEquation"]=_emscripten_glBlendEquation;_emscripten_glBlendEquation.sig="vi";function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}Module["_emscripten_glBlendEquationSeparate"]=_emscripten_glBlendEquationSeparate;_emscripten_glBlendEquationSeparate.sig="vii";function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}Module["_emscripten_glBlendFunc"]=_emscripten_glBlendFunc;_emscripten_glBlendFunc.sig="vii";function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}Module["_emscripten_glBlendFuncSeparate"]=_emscripten_glBlendFuncSeparate;_emscripten_glBlendFuncSeparate.sig="viiii";function _emscripten_glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}Module["_emscripten_glBufferData"]=_emscripten_glBufferData;_emscripten_glBufferData.sig="viiii";function _emscripten_glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}Module["_emscripten_glBufferSubData"]=_emscripten_glBufferSubData;_emscripten_glBufferSubData.sig="viiii";function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}Module["_emscripten_glCheckFramebufferStatus"]=_emscripten_glCheckFramebufferStatus;_emscripten_glCheckFramebufferStatus.sig="ii";function _emscripten_glClear(x0){GLctx["clear"](x0)}Module["_emscripten_glClear"]=_emscripten_glClear;_emscripten_glClear.sig="vi";function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}Module["_emscripten_glClearColor"]=_emscripten_glClearColor;_emscripten_glClearColor.sig="viiii";function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}Module["_emscripten_glClearDepthf"]=_emscripten_glClearDepthf;_emscripten_glClearDepthf.sig="vi";function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}Module["_emscripten_glClearStencil"]=_emscripten_glClearStencil;_emscripten_glClearStencil.sig="vi";function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}Module["_emscripten_glColorMask"]=_emscripten_glColorMask;_emscripten_glColorMask.sig="viiii";function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}Module["_emscripten_glCompileShader"]=_emscripten_glCompileShader;_emscripten_glCompileShader.sig="vi";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)}Module["_emscripten_glCompressedTexImage2D"]=_emscripten_glCompressedTexImage2D;_emscripten_glCompressedTexImage2D.sig="viiiiiiii";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)}Module["_emscripten_glCompressedTexSubImage2D"]=_emscripten_glCompressedTexSubImage2D;_emscripten_glCompressedTexSubImage2D.sig="viiiiiiiii";function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}Module["_emscripten_glCopyTexImage2D"]=_emscripten_glCopyTexImage2D;_emscripten_glCopyTexImage2D.sig="viiiiiiii";function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}Module["_emscripten_glCopyTexSubImage2D"]=_emscripten_glCopyTexSubImage2D;_emscripten_glCopyTexSubImage2D.sig="viiiiiiii";function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id}Module["_emscripten_glCreateProgram"]=_emscripten_glCreateProgram;_emscripten_glCreateProgram.sig="i";function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}Module["_emscripten_glCreateShader"]=_emscripten_glCreateShader;_emscripten_glCreateShader.sig="ii";function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}Module["_emscripten_glCullFace"]=_emscripten_glCullFace;_emscripten_glCullFace.sig="vi";function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}Module["_emscripten_glDeleteBuffers"]=_emscripten_glDeleteBuffers;_emscripten_glDeleteBuffers.sig="vii";function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}Module["_emscripten_glDeleteFramebuffers"]=_emscripten_glDeleteFramebuffers;_emscripten_glDeleteFramebuffers.sig="vii";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}Module["_emscripten_glDeleteProgram"]=_emscripten_glDeleteProgram;_emscripten_glDeleteProgram.sig="vi";function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}}Module["_emscripten_glDeleteQueriesEXT"]=_emscripten_glDeleteQueriesEXT;_emscripten_glDeleteQueriesEXT.sig="vii";function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}Module["_emscripten_glDeleteRenderbuffers"]=_emscripten_glDeleteRenderbuffers;_emscripten_glDeleteRenderbuffers.sig="vii";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}Module["_emscripten_glDeleteShader"]=_emscripten_glDeleteShader;_emscripten_glDeleteShader.sig="vi";function _emscripten_glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}Module["_emscripten_glDeleteTextures"]=_emscripten_glDeleteTextures;_emscripten_glDeleteTextures.sig="vii";function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}Module["_emscripten_glDeleteVertexArraysOES"]=_emscripten_glDeleteVertexArraysOES;_emscripten_glDeleteVertexArraysOES.sig="vii";function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}Module["_emscripten_glDepthFunc"]=_emscripten_glDepthFunc;_emscripten_glDepthFunc.sig="vi";function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}Module["_emscripten_glDepthMask"]=_emscripten_glDepthMask;_emscripten_glDepthMask.sig="vi";function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}Module["_emscripten_glDepthRangef"]=_emscripten_glDepthRangef;_emscripten_glDepthRangef.sig="vii";function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}Module["_emscripten_glDetachShader"]=_emscripten_glDetachShader;_emscripten_glDetachShader.sig="vii";function _emscripten_glDisable(x0){GLctx["disable"](x0)}Module["_emscripten_glDisable"]=_emscripten_glDisable;_emscripten_glDisable.sig="vi";function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}Module["_emscripten_glDisableVertexAttribArray"]=_emscripten_glDisableVertexAttribArray;_emscripten_glDisableVertexAttribArray.sig="vi";function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}Module["_emscripten_glDrawArrays"]=_emscripten_glDrawArrays;_emscripten_glDrawArrays.sig="viii";function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}Module["_emscripten_glDrawArraysInstancedANGLE"]=_emscripten_glDrawArraysInstancedANGLE;_emscripten_glDrawArraysInstancedANGLE.sig="viiii";var tempFixedLengthArray=[];Module["tempFixedLengthArray"]=tempFixedLengthArray;function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}Module["_emscripten_glDrawBuffersWEBGL"]=_emscripten_glDrawBuffersWEBGL;_emscripten_glDrawBuffersWEBGL.sig="vii";function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}Module["_emscripten_glDrawElements"]=_emscripten_glDrawElements;_emscripten_glDrawElements.sig="viiii";function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}Module["_emscripten_glDrawElementsInstancedANGLE"]=_emscripten_glDrawElementsInstancedANGLE;_emscripten_glDrawElementsInstancedANGLE.sig="viiiii";function _emscripten_glEnable(x0){GLctx["enable"](x0)}Module["_emscripten_glEnable"]=_emscripten_glEnable;_emscripten_glEnable.sig="vi";function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}Module["_emscripten_glEnableVertexAttribArray"]=_emscripten_glEnableVertexAttribArray;_emscripten_glEnableVertexAttribArray.sig="vi";function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}Module["_emscripten_glEndQueryEXT"]=_emscripten_glEndQueryEXT;_emscripten_glEndQueryEXT.sig="vi";function _emscripten_glFinish(){GLctx["finish"]()}Module["_emscripten_glFinish"]=_emscripten_glFinish;_emscripten_glFinish.sig="v";function _emscripten_glFlush(){GLctx["flush"]()}Module["_emscripten_glFlush"]=_emscripten_glFlush;_emscripten_glFlush.sig="v";function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}Module["_emscripten_glFramebufferRenderbuffer"]=_emscripten_glFramebufferRenderbuffer;_emscripten_glFramebufferRenderbuffer.sig="viiii";function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}Module["_emscripten_glFramebufferTexture2D"]=_emscripten_glFramebufferTexture2D;_emscripten_glFramebufferTexture2D.sig="viiiii";function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}Module["_emscripten_glFrontFace"]=_emscripten_glFrontFace;_emscripten_glFrontFace.sig="vi";function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i>2]=id}}Module["__glGenObject"]=__glGenObject;__glGenObject.sig="vii";function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}Module["_emscripten_glGenBuffers"]=_emscripten_glGenBuffers;_emscripten_glGenBuffers.sig="vii";function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}Module["_emscripten_glGenFramebuffers"]=_emscripten_glGenFramebuffers;_emscripten_glGenFramebuffers.sig="vii";function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}}Module["_emscripten_glGenQueriesEXT"]=_emscripten_glGenQueriesEXT;_emscripten_glGenQueriesEXT.sig="vii";function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}Module["_emscripten_glGenRenderbuffers"]=_emscripten_glGenRenderbuffers;_emscripten_glGenRenderbuffers.sig="vii";function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}Module["_emscripten_glGenTextures"]=_emscripten_glGenTextures;_emscripten_glGenTextures.sig="vii";function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}Module["_emscripten_glGenVertexArraysOES"]=_emscripten_glGenVertexArraysOES;_emscripten_glGenVertexArraysOES.sig="vii";function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}Module["_emscripten_glGenerateMipmap"]=_emscripten_glGenerateMipmap;_emscripten_glGenerateMipmap.sig="vi";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}}Module["__glGetActiveAttribOrUniform"]=__glGetActiveAttribOrUniform;function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}Module["_emscripten_glGetActiveAttrib"]=_emscripten_glGetActiveAttrib;_emscripten_glGetActiveAttrib.sig="viiiiiii";function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}Module["_emscripten_glGetActiveUniform"]=_emscripten_glGetActiveUniform;_emscripten_glGetActiveUniform.sig="viiiiiii";function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}Module["_emscripten_glGetAttachedShaders"]=_emscripten_glGetAttachedShaders;_emscripten_glGetAttachedShaders.sig="viiii";function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}Module["_emscripten_glGetAttribLocation"]=_emscripten_glGetAttribLocation;_emscripten_glGetAttribLocation.sig="iii";function writeI53ToI64(ptr,num){HEAPU32[ptr>>2]=num;HEAPU32[ptr+4>>2]=(num-HEAPU32[ptr>>2])/4294967296}Module["writeI53ToI64"]=writeI53ToI64;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>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}}Module["emscriptenWebGLGet"]=emscriptenWebGLGet;function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}Module["_emscripten_glGetBooleanv"]=_emscripten_glGetBooleanv;_emscripten_glGetBooleanv.sig="vii";function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}Module["_emscripten_glGetBufferParameteriv"]=_emscripten_glGetBufferParameteriv;_emscripten_glGetBufferParameteriv.sig="viii";function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}Module["_emscripten_glGetError"]=_emscripten_glGetError;_emscripten_glGetError.sig="i";function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}Module["_emscripten_glGetFloatv"]=_emscripten_glGetFloatv;_emscripten_glGetFloatv.sig="vii";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}Module["_emscripten_glGetFramebufferAttachmentParameteriv"]=_emscripten_glGetFramebufferAttachmentParameteriv;_emscripten_glGetFramebufferAttachmentParameteriv.sig="viiii";function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}Module["_emscripten_glGetIntegerv"]=_emscripten_glGetIntegerv;_emscripten_glGetIntegerv.sig="vii";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}Module["_emscripten_glGetProgramInfoLog"]=_emscripten_glGetProgramInfoLog;_emscripten_glGetProgramInfoLog.sig="viiii";function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){for(var i=0;i>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){for(var i=0;i>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){for(var i=0;i>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}}Module["_emscripten_glGetProgramiv"]=_emscripten_glGetProgramiv;_emscripten_glGetProgramiv.sig="viii";function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}Module["_emscripten_glGetQueryObjecti64vEXT"]=_emscripten_glGetQueryObjecti64vEXT;_emscripten_glGetQueryObjecti64vEXT.sig="viii";function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}Module["_emscripten_glGetQueryObjectivEXT"]=_emscripten_glGetQueryObjectivEXT;_emscripten_glGetQueryObjectivEXT.sig="viii";function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}Module["_emscripten_glGetQueryObjectui64vEXT"]=_emscripten_glGetQueryObjectui64vEXT;_emscripten_glGetQueryObjectui64vEXT.sig="viii";function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}Module["_emscripten_glGetQueryObjectuivEXT"]=_emscripten_glGetQueryObjectuivEXT;_emscripten_glGetQueryObjectuivEXT.sig="viii";function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}Module["_emscripten_glGetQueryivEXT"]=_emscripten_glGetQueryivEXT;_emscripten_glGetQueryivEXT.sig="viii";function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}Module["_emscripten_glGetRenderbufferParameteriv"]=_emscripten_glGetRenderbufferParameteriv;_emscripten_glGetRenderbufferParameteriv.sig="viii";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}Module["_emscripten_glGetShaderInfoLog"]=_emscripten_glGetShaderInfoLog;_emscripten_glGetShaderInfoLog.sig="viiii";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}Module["_emscripten_glGetShaderPrecisionFormat"]=_emscripten_glGetShaderPrecisionFormat;_emscripten_glGetShaderPrecisionFormat.sig="viiii";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}Module["_emscripten_glGetShaderSource"]=_emscripten_glGetShaderSource;_emscripten_glGetShaderSource.sig="viiii";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)}}Module["_emscripten_glGetShaderiv"]=_emscripten_glGetShaderiv;_emscripten_glGetShaderiv.sig="viii";function _emscripten_glGetString(name_){var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));ret=stringToNewUTF8(exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s&&stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret}Module["_emscripten_glGetString"]=_emscripten_glGetString;_emscripten_glGetString.sig="ii";function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}Module["_emscripten_glGetTexParameterfv"]=_emscripten_glGetTexParameterfv;_emscripten_glGetTexParameterfv.sig="viii";function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}Module["_emscripten_glGetTexParameteriv"]=_emscripten_glGetTexParameteriv;_emscripten_glGetTexParameteriv.sig="viii";function webglGetLeftBracePos(name){return name.slice(-1)=="]"&&name.lastIndexOf("[")}Module["webglGetLeftBracePos"]=webglGetLeftBracePos;function webglPrepareUniformLocationsBeforeFirstUse(program){var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex0?"["+webglLoc+"]":""))}return webglLoc}else{GL.recordError(1282)}}Module["webglGetUniformLocation"]=webglGetUniformLocation;function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}Module["emscriptenWebGLGetUniform"]=emscriptenWebGLGetUniform;function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}Module["_emscripten_glGetUniformfv"]=_emscripten_glGetUniformfv;_emscripten_glGetUniformfv.sig="viii";function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}Module["_emscripten_glGetUniformiv"]=_emscripten_glGetUniformiv;_emscripten_glGetUniformiv.sig="viii";function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}Module["_emscripten_glGetVertexAttribPointerv"]=_emscripten_glGetVertexAttribPointerv;_emscripten_glGetVertexAttribPointerv.sig="viii";function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}}Module["emscriptenWebGLGetVertexAttrib"]=emscriptenWebGLGetVertexAttrib;function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}Module["_emscripten_glGetVertexAttribfv"]=_emscripten_glGetVertexAttribfv;_emscripten_glGetVertexAttribfv.sig="viii";function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}Module["_emscripten_glGetVertexAttribiv"]=_emscripten_glGetVertexAttribiv;_emscripten_glGetVertexAttribiv.sig="viii";function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}Module["_emscripten_glHint"]=_emscripten_glHint;_emscripten_glHint.sig="vii";function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}Module["_emscripten_glIsBuffer"]=_emscripten_glIsBuffer;_emscripten_glIsBuffer.sig="ii";function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}Module["_emscripten_glIsEnabled"]=_emscripten_glIsEnabled;_emscripten_glIsEnabled.sig="ii";function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}Module["_emscripten_glIsFramebuffer"]=_emscripten_glIsFramebuffer;_emscripten_glIsFramebuffer.sig="ii";function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}Module["_emscripten_glIsProgram"]=_emscripten_glIsProgram;_emscripten_glIsProgram.sig="ii";function _emscripten_glIsQueryEXT(id){var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}Module["_emscripten_glIsQueryEXT"]=_emscripten_glIsQueryEXT;_emscripten_glIsQueryEXT.sig="ii";function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}Module["_emscripten_glIsRenderbuffer"]=_emscripten_glIsRenderbuffer;_emscripten_glIsRenderbuffer.sig="ii";function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}Module["_emscripten_glIsShader"]=_emscripten_glIsShader;_emscripten_glIsShader.sig="ii";function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}Module["_emscripten_glIsTexture"]=_emscripten_glIsTexture;_emscripten_glIsTexture.sig="ii";function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}Module["_emscripten_glIsVertexArrayOES"]=_emscripten_glIsVertexArrayOES;_emscripten_glIsVertexArrayOES.sig="ii";function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}Module["_emscripten_glLineWidth"]=_emscripten_glLineWidth;_emscripten_glLineWidth.sig="vi";function _emscripten_glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}Module["_emscripten_glLinkProgram"]=_emscripten_glLinkProgram;_emscripten_glLinkProgram.sig="vi";function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}Module["_emscripten_glPixelStorei"]=_emscripten_glPixelStorei;_emscripten_glPixelStorei.sig="vii";function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}Module["_emscripten_glPolygonOffset"]=_emscripten_glPolygonOffset;_emscripten_glPolygonOffset.sig="vii";function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)}Module["_emscripten_glQueryCounterEXT"]=_emscripten_glQueryCounterEXT;_emscripten_glQueryCounterEXT.sig="vii";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}Module["computeUnpackAlignedImageSize"]=computeUnpackAlignedImageSize;function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1}Module["__colorChannelsInGlTextureFormat"]=__colorChannelsInGlTextureFormat;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}Module["heapObjectForWebGLType"]=heapObjectForWebGLType;function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}Module["heapAccessShiftForWebGLHeap"]=heapAccessShiftForWebGLHeap;function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)}Module["emscriptenWebGLGetTexPixelData"]=emscriptenWebGLGetTexPixelData;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)}Module["_emscripten_glReadPixels"]=_emscripten_glReadPixels;_emscripten_glReadPixels.sig="viiiiiii";function _emscripten_glReleaseShaderCompiler(){}Module["_emscripten_glReleaseShaderCompiler"]=_emscripten_glReleaseShaderCompiler;_emscripten_glReleaseShaderCompiler.sig="v";function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}Module["_emscripten_glRenderbufferStorage"]=_emscripten_glRenderbufferStorage;_emscripten_glRenderbufferStorage.sig="viiii";function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}Module["_emscripten_glSampleCoverage"]=_emscripten_glSampleCoverage;_emscripten_glSampleCoverage.sig="vii";function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}Module["_emscripten_glScissor"]=_emscripten_glScissor;_emscripten_glScissor.sig="viiii";function _emscripten_glShaderBinary(){GL.recordError(1280)}Module["_emscripten_glShaderBinary"]=_emscripten_glShaderBinary;_emscripten_glShaderBinary.sig="v";function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}Module["_emscripten_glShaderSource"]=_emscripten_glShaderSource;_emscripten_glShaderSource.sig="viiii";function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}Module["_emscripten_glStencilFunc"]=_emscripten_glStencilFunc;_emscripten_glStencilFunc.sig="viii";function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}Module["_emscripten_glStencilFuncSeparate"]=_emscripten_glStencilFuncSeparate;_emscripten_glStencilFuncSeparate.sig="viiii";function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}Module["_emscripten_glStencilMask"]=_emscripten_glStencilMask;_emscripten_glStencilMask.sig="vi";function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}Module["_emscripten_glStencilMaskSeparate"]=_emscripten_glStencilMaskSeparate;_emscripten_glStencilMaskSeparate.sig="vii";function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}Module["_emscripten_glStencilOp"]=_emscripten_glStencilOp;_emscripten_glStencilOp.sig="viii";function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}Module["_emscripten_glStencilOpSeparate"]=_emscripten_glStencilOpSeparate;_emscripten_glStencilOpSeparate.sig="viiii";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)}Module["_emscripten_glTexImage2D"]=_emscripten_glTexImage2D;_emscripten_glTexImage2D.sig="viiiiiiiii";function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}Module["_emscripten_glTexParameterf"]=_emscripten_glTexParameterf;_emscripten_glTexParameterf.sig="viii";function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}Module["_emscripten_glTexParameterfv"]=_emscripten_glTexParameterfv;_emscripten_glTexParameterfv.sig="viii";function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}Module["_emscripten_glTexParameteri"]=_emscripten_glTexParameteri;_emscripten_glTexParameteri.sig="viii";function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}Module["_emscripten_glTexParameteriv"]=_emscripten_glTexParameteriv;_emscripten_glTexParameteriv.sig="viii";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)}Module["_emscripten_glTexSubImage2D"]=_emscripten_glTexSubImage2D;_emscripten_glTexSubImage2D.sig="viiiiiiiii";function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(webglGetUniformLocation(location),v0)}Module["_emscripten_glUniform1f"]=_emscripten_glUniform1f;_emscripten_glUniform1f.sig="vif";var miniTempWebGLFloatBuffers=[];Module["miniTempWebGLFloatBuffers"]=miniTempWebGLFloatBuffers;function _emscripten_glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)}Module["_emscripten_glUniform1fv"]=_emscripten_glUniform1fv;_emscripten_glUniform1fv.sig="viii";function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(webglGetUniformLocation(location),v0)}Module["_emscripten_glUniform1i"]=_emscripten_glUniform1i;_emscripten_glUniform1i.sig="vii";var __miniTempWebGLIntBuffers=[];Module["__miniTempWebGLIntBuffers"]=__miniTempWebGLIntBuffers;function _emscripten_glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)}Module["_emscripten_glUniform1iv"]=_emscripten_glUniform1iv;_emscripten_glUniform1iv.sig="viii";function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)}Module["_emscripten_glUniform2f"]=_emscripten_glUniform2f;_emscripten_glUniform2f.sig="viff";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(webglGetUniformLocation(location),view)}Module["_emscripten_glUniform2fv"]=_emscripten_glUniform2fv;_emscripten_glUniform2fv.sig="viii";function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)}Module["_emscripten_glUniform2i"]=_emscripten_glUniform2i;_emscripten_glUniform2i.sig="viii";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(webglGetUniformLocation(location),view)}Module["_emscripten_glUniform2iv"]=_emscripten_glUniform2iv;_emscripten_glUniform2iv.sig="viii";function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)}Module["_emscripten_glUniform3f"]=_emscripten_glUniform3f;_emscripten_glUniform3f.sig="vifff";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(webglGetUniformLocation(location),view)}Module["_emscripten_glUniform3fv"]=_emscripten_glUniform3fv;_emscripten_glUniform3fv.sig="viii";function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)}Module["_emscripten_glUniform3i"]=_emscripten_glUniform3i;_emscripten_glUniform3i.sig="viiii";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(webglGetUniformLocation(location),view)}Module["_emscripten_glUniform3iv"]=_emscripten_glUniform3iv;_emscripten_glUniform3iv.sig="viii";function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)}Module["_emscripten_glUniform4f"]=_emscripten_glUniform4f;_emscripten_glUniform4f.sig="viffff";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(webglGetUniformLocation(location),view)}Module["_emscripten_glUniform4fv"]=_emscripten_glUniform4fv;_emscripten_glUniform4fv.sig="viii";function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)}Module["_emscripten_glUniform4i"]=_emscripten_glUniform4i;_emscripten_glUniform4i.sig="viiiii";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(webglGetUniformLocation(location),view)}Module["_emscripten_glUniform4iv"]=_emscripten_glUniform4iv;_emscripten_glUniform4iv.sig="viii";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(webglGetUniformLocation(location),!!transpose,view)}Module["_emscripten_glUniformMatrix2fv"]=_emscripten_glUniformMatrix2fv;_emscripten_glUniformMatrix2fv.sig="viiii";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(webglGetUniformLocation(location),!!transpose,view)}Module["_emscripten_glUniformMatrix3fv"]=_emscripten_glUniformMatrix3fv;_emscripten_glUniformMatrix3fv.sig="viiii";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(webglGetUniformLocation(location),!!transpose,view)}Module["_emscripten_glUniformMatrix4fv"]=_emscripten_glUniformMatrix4fv;_emscripten_glUniformMatrix4fv.sig="viiii";function _emscripten_glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}Module["_emscripten_glUseProgram"]=_emscripten_glUseProgram;_emscripten_glUseProgram.sig="vi";function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}Module["_emscripten_glValidateProgram"]=_emscripten_glValidateProgram;_emscripten_glValidateProgram.sig="vi";function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}Module["_emscripten_glVertexAttrib1f"]=_emscripten_glVertexAttrib1f;_emscripten_glVertexAttrib1f.sig="vii";function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}Module["_emscripten_glVertexAttrib1fv"]=_emscripten_glVertexAttrib1fv;_emscripten_glVertexAttrib1fv.sig="vii";function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}Module["_emscripten_glVertexAttrib2f"]=_emscripten_glVertexAttrib2f;_emscripten_glVertexAttrib2f.sig="viii";function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}Module["_emscripten_glVertexAttrib2fv"]=_emscripten_glVertexAttrib2fv;_emscripten_glVertexAttrib2fv.sig="vii";function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}Module["_emscripten_glVertexAttrib3f"]=_emscripten_glVertexAttrib3f;_emscripten_glVertexAttrib3f.sig="viiii";function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}Module["_emscripten_glVertexAttrib3fv"]=_emscripten_glVertexAttrib3fv;_emscripten_glVertexAttrib3fv.sig="vii";function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}Module["_emscripten_glVertexAttrib4f"]=_emscripten_glVertexAttrib4f;_emscripten_glVertexAttrib4f.sig="viiiii";function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}Module["_emscripten_glVertexAttrib4fv"]=_emscripten_glVertexAttrib4fv;_emscripten_glVertexAttrib4fv.sig="vii";function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}Module["_emscripten_glVertexAttribDivisorANGLE"]=_emscripten_glVertexAttribDivisorANGLE;_emscripten_glVertexAttribDivisorANGLE.sig="vii";function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}Module["_emscripten_glVertexAttribPointer"]=_emscripten_glVertexAttribPointer;_emscripten_glVertexAttribPointer.sig="viiiiii";function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}Module["_emscripten_glViewport"]=_emscripten_glViewport;_emscripten_glViewport.sig="viiii";function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}Module["_emscripten_memcpy_big"]=_emscripten_memcpy_big;function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}Module["emscripten_realloc_buffer"]=emscripten_realloc_buffer;function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}Module["_emscripten_resize_heap"]=_emscripten_resize_heap;function _emscripten_thread_sleep(msecs){var start=_emscripten_get_now();while(_emscripten_get_now()-start>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}Module["_environ_get"]=_environ_get;_environ_get.sig="iii";function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}Module["_environ_sizes_get"]=_environ_sizes_get;_environ_sizes_get.sig="iii";function _execve(path,argv,envp){setErrNo(45);return-1}Module["_execve"]=_execve;_execve.sig="iiii";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}}Module["_fd_close"]=_fd_close;_fd_close.sig="ii";function _fd_fdstat_get(fd,pbuf){try{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4;HEAP8[pbuf>>0]=type;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}Module["_fd_fdstat_get"]=_fd_fdstat_get;_fd_fdstat_get.sig="iii";function _fd_pread(fd,iov,iovcnt,offset_low,offset_high,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt,offset_low);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}Module["_fd_pread"]=_fd_pread;function _fd_pwrite(fd,iov,iovcnt,offset_low,offset_high,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt,offset_low);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}Module["_fd_pwrite"]=_fd_pwrite;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}}Module["_fd_read"]=_fd_read;_fd_read.sig="iiiii";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}}Module["_fd_seek"]=_fd_seek;function _fd_sync(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);if(stream.stream_ops&&stream.stream_ops.fsync){return-stream.stream_ops.fsync(stream)}return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}Module["_fd_sync"]=_fd_sync;_fd_sync.sig="ii";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}}Module["_fd_write"]=_fd_write;_fd_write.sig="iiiii";function _fork(){setErrNo(52);return-1}Module["_fork"]=_fork;_fork.sig="i";var GAI_ERRNO_MESSAGES={};Module["GAI_ERRNO_MESSAGES"]=GAI_ERRNO_MESSAGES;function _gai_strerror(val){var buflen=256;if(!_gai_strerror.buffer){_gai_strerror.buffer=_malloc(buflen);GAI_ERRNO_MESSAGES["0"]="Success";GAI_ERRNO_MESSAGES[""+-1]="Invalid value for 'ai_flags' field";GAI_ERRNO_MESSAGES[""+-2]="NAME or SERVICE is unknown";GAI_ERRNO_MESSAGES[""+-3]="Temporary failure in name resolution";GAI_ERRNO_MESSAGES[""+-4]="Non-recoverable failure in name res";GAI_ERRNO_MESSAGES[""+-6]="'ai_family' not supported";GAI_ERRNO_MESSAGES[""+-7]="'ai_socktype' not supported";GAI_ERRNO_MESSAGES[""+-8]="SERVICE not supported for 'ai_socktype'";GAI_ERRNO_MESSAGES[""+-10]="Memory allocation failure";GAI_ERRNO_MESSAGES[""+-11]="System error returned in 'errno'";GAI_ERRNO_MESSAGES[""+-12]="Argument buffer overflow"}var msg="Unknown error";if(val in GAI_ERRNO_MESSAGES){if(GAI_ERRNO_MESSAGES[val].length>buflen-1){msg="Message too long"}else{msg=GAI_ERRNO_MESSAGES[val]}}writeAsciiToMemory(msg,_gai_strerror.buffer);return _gai_strerror.buffer}Module["_gai_strerror"]=_gai_strerror;function _getTempRet0(){return getTempRet0()}Module["_getTempRet0"]=_getTempRet0;_getTempRet0.sig="i";function _getaddrinfo(node,service,hint,out){var addrs=[];var canon=null;var addr=0;var port=0;var flags=0;var family=0;var type=0;var proto=0;var ai,last;function allocaddrinfo(family,type,proto,canon,addr,port){var sa,salen,ai;var errno;salen=family===10?28:16;addr=family===10?inetNtop6(addr):inetNtop4(addr);sa=_malloc(salen);errno=writeSockaddr(sa,family,addr,port);assert(!errno);ai=_malloc(32);HEAP32[ai+4>>2]=family;HEAP32[ai+8>>2]=type;HEAP32[ai+12>>2]=proto;HEAP32[ai+24>>2]=canon;HEAP32[ai+20>>2]=sa;if(family===10){HEAP32[ai+16>>2]=28}else{HEAP32[ai+16>>2]=16}HEAP32[ai+28>>2]=0;return ai}if(hint){flags=HEAP32[hint>>2];family=HEAP32[hint+4>>2];type=HEAP32[hint+8>>2];proto=HEAP32[hint+12>>2]}if(type&&!proto){proto=type===2?17:6}if(!type&&proto){type=proto===17?2:1}if(proto===0){proto=6}if(type===0){type=1}if(!node&&!service){return-2}if(flags&~(1|2|4|1024|8|16|32)){return-1}if(hint!==0&&HEAP32[hint>>2]&2&&!node){return-1}if(flags&32){return-2}if(type!==0&&type!==1&&type!==2){return-7}if(family!==0&&family!==2&&family!==10){return-6}if(service){service=UTF8ToString(service);port=parseInt(service,10);if(isNaN(port)){if(flags&1024){return-2}return-8}}if(!node){if(family===0){family=2}if((flags&1)===0){if(family===2){addr=_htonl(2130706433)}else{addr=[0,0,0,1]}}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAP32[out>>2]=ai;return 0}node=UTF8ToString(node);addr=inetPton4(node);if(addr!==null){if(family===0||family===2){family=2}else if(family===10&&flags&8){addr=[0,0,_htonl(65535),addr];family=10}else{return-2}}else{addr=inetPton6(node);if(addr!==null){if(family===0||family===10){family=10}else{return-2}}}if(addr!=null){ai=allocaddrinfo(family,type,proto,node,addr,port);HEAP32[out>>2]=ai;return 0}if(flags&4){return-2}node=DNS.lookup_name(node);addr=inetPton4(node);if(family===0){family=2}else if(family===10){addr=[0,0,_htonl(65535),addr]}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAP32[out>>2]=ai;return 0}Module["_getaddrinfo"]=_getaddrinfo;_getaddrinfo.sig="iiiii";function _getentropy(buffer,size){if(!_getentropy.randomDevice){_getentropy.randomDevice=getRandomDevice()}for(var i=0;i>0]=_getentropy.randomDevice()}return 0}Module["_getentropy"]=_getentropy;function getHostByName(name){var ret=_malloc(20);var nameBuf=_malloc(name.length+1);stringToUTF8(name,nameBuf,name.length+1);HEAP32[ret>>2]=nameBuf;var aliasesBuf=_malloc(4);HEAP32[aliasesBuf>>2]=0;HEAP32[ret+4>>2]=aliasesBuf;var afinet=2;HEAP32[ret+8>>2]=afinet;HEAP32[ret+12>>2]=4;var addrListBuf=_malloc(12);HEAP32[addrListBuf>>2]=addrListBuf+8;HEAP32[addrListBuf+4>>2]=0;HEAP32[addrListBuf+8>>2]=inetPton4(DNS.lookup_name(name));HEAP32[ret+16>>2]=addrListBuf;return ret}Module["getHostByName"]=getHostByName;function _gethostbyaddr(addr,addrlen,type){if(type!==2){setErrNo(5);return null}addr=HEAP32[addr>>2];var host=inetNtop4(addr);var lookup=DNS.lookup_addr(host);if(lookup){host=lookup}return getHostByName(host)}Module["_gethostbyaddr"]=_gethostbyaddr;_gethostbyaddr.sig="iiii";function _gethostbyname(name){return getHostByName(UTF8ToString(name))}Module["_gethostbyname"]=_gethostbyname;_gethostbyname.sig="ii";function _getloadavg(loadavg,nelem){var limit=Math.min(nelem,3);var doubleSize=8;for(var i=0;i>3]=.1}return limit}Module["_getloadavg"]=_getloadavg;function _getnameinfo(sa,salen,node,nodelen,serv,servlen,flags){var info=readSockaddr(sa,salen);if(info.errno){return-6}var port=info.port;var addr=info.addr;var overflowed=false;if(node&&nodelen){var lookup;if(flags&1||!(lookup=DNS.lookup_addr(addr))){if(flags&8){return-2}}else{addr=lookup}var numBytesWrittenExclNull=stringToUTF8(addr,node,nodelen);if(numBytesWrittenExclNull+1>=nodelen){overflowed=true}}if(serv&&servlen){port=""+port;var numBytesWrittenExclNull=stringToUTF8(port,serv,servlen);if(numBytesWrittenExclNull+1>=servlen){overflowed=true}}if(overflowed){return-12}return 0}Module["_getnameinfo"]=_getnameinfo;var Protocols={list:[],map:{}};Module["Protocols"]=Protocols;function _setprotoent(stayopen){function allocprotoent(name,proto,aliases){var nameBuf=_malloc(name.length+1);writeAsciiToMemory(name,nameBuf);var j=0;var length=aliases.length;var aliasListBuf=_malloc((length+1)*4);for(var i=0;i>2]=aliasBuf}HEAP32[aliasListBuf+j>>2]=0;var pe=_malloc(12);HEAP32[pe>>2]=nameBuf;HEAP32[pe+4>>2]=aliasListBuf;HEAP32[pe+8>>2]=proto;return pe}var list=Protocols.list;var map=Protocols.map;if(list.length===0){var entry=allocprotoent("tcp",6,["TCP"]);list.push(entry);map["tcp"]=map["6"]=entry;entry=allocprotoent("udp",17,["UDP"]);list.push(entry);map["udp"]=map["17"]=entry}_setprotoent.index=0}Module["_setprotoent"]=_setprotoent;function _getprotobyname(name){name=UTF8ToString(name);_setprotoent(true);var result=Protocols.map[name];return result}Module["_getprotobyname"]=_getprotobyname;function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=now/1e3|0;HEAP32[ptr+4>>2]=now%1e3*1e3|0;return 0}Module["_gettimeofday"]=_gettimeofday;function _kill(pid,sig){setErrNo(63);return-1}Module["_kill"]=_kill;function _posix_spawn(){return _fork()}Module["_posix_spawn"]=_posix_spawn;_posix_spawn.sig="i";function _proc_exit(code){procExit(code)}Module["_proc_exit"]=_proc_exit;_proc_exit.sig="vi";function _pthread_sigmask(how,set,oldset){err("pthread_sigmask() is not supported: this is a no-op.");return 0}Module["_pthread_sigmask"]=_pthread_sigmask;function _raise(sig){setErrNo(52);return-1}Module["_raise"]=_raise;function _setTempRet0(val){setTempRet0(val)}Module["_setTempRet0"]=_setTempRet0;_setTempRet0.sig="vi";function _setgroups(ngroups,gidset){if(ngroups<1||ngroups>_sysconf(3)){setErrNo(28);return-1}setErrNo(63);return-1}Module["_setgroups"]=_setgroups;function _siginterrupt(){return 0}Module["_siginterrupt"]=_siginterrupt;function _sigpending(set){HEAP32[set>>2]=0;return 0}Module["_sigpending"]=_sigpending;function _sigtimedwait(set,sig,timeout){return 28}Module["_sigtimedwait"]=_sigtimedwait;function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}Module["__isLeapYear"]=__isLeapYear;function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}Module["__arraySum"]=__arraySum;var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];Module["__MONTH_DAYS_LEAP"]=__MONTH_DAYS_LEAP;var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];Module["__MONTH_DAYS_REGULAR"]=__MONTH_DAYS_REGULAR;function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}Module["__addDays"]=__addDays;function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}Module["_strftime"]=_strftime;_strftime.sig="iiiii";function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}Module["_strftime_l"]=_strftime_l;function _system(command){if(ENVIRONMENT_IS_NODE){if(!command)return 1;var cmdstr=UTF8ToString(command);if(!cmdstr.length)return 0;var cp=require("child_process");var ret=cp.spawnSync(cmdstr,[],{shell:true,stdio:"inherit"});var _W_EXITCODE=function(ret,sig){return ret<<8|sig};if(ret.status===null){var signalToNumber=function(sig){switch(sig){case"SIGHUP":return 1;case"SIGINT":return 2;case"SIGQUIT":return 3;case"SIGFPE":return 8;case"SIGKILL":return 9;case"SIGALRM":return 14;case"SIGTERM":return 15}return 2};return _W_EXITCODE(0,signalToNumber(ret.signal))}return _W_EXITCODE(ret.status,0)}if(!command)return 0;setErrNo(52);return-1}Module["_system"]=_system;function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}Module["_time"]=_time;_time.sig="ii";function _times(buffer){if(buffer!==0){zeroMemory(buffer,16)}return 0}Module["_times"]=_times;function setFileTime(path,time){path=UTF8ToString(path);try{FS.utime(path,time,time);return 0}catch(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();setErrNo(e.errno);return-1}}Module["setFileTime"]=setFileTime;function _utimes(path,times){var time;if(times){var mtime=times+8;time=HEAP32[mtime>>2]*1e3;time+=HEAP32[mtime+4>>2]/1e3}else{time=Date.now()}return setFileTime(path,time)}Module["_utimes"]=_utimes;_utimes.sig="iii";function _wait3(a0){return _wait(a0)}Module["_wait3"]=_wait3;_wait3.sig="ii";function _wait4(a0){return _wait(a0)}Module["_wait4"]=_wait4;_wait4.sig="ii";function _waitid(a0){return _wait(a0)}Module["_waitid"]=_waitid;_waitid.sig="ii";var ___memory_base=1024;Module["___memory_base"]=___memory_base;var ___table_base=1;Module["___table_base"]=___table_base;function _utime(path,times){var time;if(times){time=HEAP32[times+4>>2]*1e3}else{time=Date.now()}return setFileTime(path,time)}Module["_utime"]=_utime;_utime.sig="iii";function _flock(fd,operation){return 0}Module["_flock"]=_flock;function _vfork(){return _fork()}Module["_vfork"]=_vfork;_vfork.sig="i";function _emscripten_notify_memory_growth(memoryIndex){updateGlobalBufferAndViews(wasmMemory.buffer)}Module["_emscripten_notify_memory_growth"]=_emscripten_notify_memory_growth;function _difftime(time1,time0){return time1-time0}Module["_difftime"]=_difftime;_difftime.sig="dii";function _timelocal(a0){return _mktime(a0)}Module["_timelocal"]=_timelocal;_timelocal.sig="ii";function _timegm(tmPtr){_tzset();var time=Date.UTC(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var date=new Date(time);HEAP32[tmPtr+24>>2]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;return date.getTime()/1e3|0}Module["_timegm"]=_timegm;_timegm.sig="ii";function _ctime_r(time,buf){var stack=stackSave();var rv=___asctime(_localtime_r(time,stackAlloc(44)),buf);stackRestore(stack);return rv}Module["_ctime_r"]=_ctime_r;_ctime_r.sig="iii";function _dysize(year){var leap=year%4==0&&(year%100!=0||year%400==0);return leap?366:365}Module["_dysize"]=_dysize;function _stime(when){setErrNo(63);return-1}Module["_stime"]=_stime;function _strptime(buf,format,tm){var pattern=UTF8ToString(format);var SPECIAL_CHARS="\\!@#$^&*()+=-[]/{}|:<>?,.";for(var i=0,ii=SPECIAL_CHARS.length;i=0;i=pattern.indexOf("%")){capture.push(pattern[i+1]);pattern=pattern.replace(new RegExp("\\%"+pattern[i+1],"g"),"")}var matches=new RegExp("^"+pattern,"i").exec(UTF8ToString(buf));function initDate(){function fixup(value,min,max){return typeof value!=="number"||isNaN(value)?min:value>=min?value<=max?value:max:min}return{year:fixup(HEAP32[tm+20>>2]+1900,1970,9999),month:fixup(HEAP32[tm+16>>2],0,11),day:fixup(HEAP32[tm+12>>2],1,31),hour:fixup(HEAP32[tm+8>>2],0,23),min:fixup(HEAP32[tm+4>>2],0,59),sec:fixup(HEAP32[tm>>2],0,59)}}if(matches){var date=initDate();var value;var getMatch=function(symbol){var pos=capture.indexOf(symbol);if(pos>=0){return matches[pos+1]}return};if(value=getMatch("S")){date.sec=jstoi_q(value)}if(value=getMatch("M")){date.min=jstoi_q(value)}if(value=getMatch("H")){date.hour=jstoi_q(value)}else if(value=getMatch("I")){var hour=jstoi_q(value);if(value=getMatch("p")){hour+=value.toUpperCase()[0]==="P"?12:0}date.hour=hour}if(value=getMatch("Y")){date.year=jstoi_q(value)}else if(value=getMatch("y")){var year=jstoi_q(value);if(value=getMatch("C")){year+=jstoi_q(value)*100}else{year+=year<69?2e3:1900}date.year=year}if(value=getMatch("m")){date.month=jstoi_q(value)-1}else if(value=getMatch("b")){date.month=MONTH_NUMBERS[value.substring(0,3).toUpperCase()]||0}if(value=getMatch("d")){date.day=jstoi_q(value)}else if(value=getMatch("j")){var day=jstoi_q(value);var leapYear=__isLeapYear(date.year);for(var month=0;month<12;++month){var daysUntilMonth=__arraySum(leapYear?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,month-1);if(day<=daysUntilMonth+(leapYear?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[month]){date.day=day-daysUntilMonth}}}else if(value=getMatch("a")){var weekDay=value.substring(0,3).toUpperCase();if(value=getMatch("U")){var weekDayNumber=DAY_NUMBERS_SUN_FIRST[weekDay];var weekNumber=jstoi_q(value);var janFirst=new Date(date.year,0,1);var endDate;if(janFirst.getDay()===0){endDate=__addDays(janFirst,weekDayNumber+7*(weekNumber-1))}else{endDate=__addDays(janFirst,7-janFirst.getDay()+weekDayNumber+7*(weekNumber-1))}date.day=endDate.getDate();date.month=endDate.getMonth()}else if(value=getMatch("W")){var weekDayNumber=DAY_NUMBERS_MON_FIRST[weekDay];var weekNumber=jstoi_q(value);var janFirst=new Date(date.year,0,1);var endDate;if(janFirst.getDay()===1){endDate=__addDays(janFirst,weekDayNumber+7*(weekNumber-1))}else{endDate=__addDays(janFirst,7-janFirst.getDay()+1+weekDayNumber+7*(weekNumber-1))}date.day=endDate.getDate();date.month=endDate.getMonth()}}var fullDate=new Date(date.year,date.month,date.day,date.hour,date.min,date.sec,0);HEAP32[tm>>2]=fullDate.getSeconds();HEAP32[tm+4>>2]=fullDate.getMinutes();HEAP32[tm+8>>2]=fullDate.getHours();HEAP32[tm+12>>2]=fullDate.getDate();HEAP32[tm+16>>2]=fullDate.getMonth();HEAP32[tm+20>>2]=fullDate.getFullYear()-1900;HEAP32[tm+24>>2]=fullDate.getDay();HEAP32[tm+28>>2]=__arraySum(__isLeapYear(fullDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,fullDate.getMonth()-1)+fullDate.getDate()-1;HEAP32[tm+32>>2]=0;return buf+intArrayFromString(matches[0]).length-1}return 0}Module["_strptime"]=_strptime;function _strptime_l(buf,format,tm){return _strptime(buf,format,tm)}Module["_strptime_l"]=_strptime_l;function _getdate(string){return 0}Module["_getdate"]=_getdate;function _timespec_get(ts,base){if(base!==1){setErrNo(28);return 0}var ret=_clock_gettime(0,ts);return ret<0?0:base}Module["_timespec_get"]=_timespec_get;function _clock_getcpuclockid(pid,clk_id){if(pid<0)return 71;if(pid!==0&&pid!==42)return 52;if(clk_id)HEAP32[clk_id>>2]=2;return 0}Module["_clock_getcpuclockid"]=_clock_getcpuclockid;function _ftime(p){var millis=Date.now();HEAP32[p>>2]=millis/1e3|0;HEAP16[p+4>>1]=millis%1e3;HEAP16[p+6>>1]=0;HEAP16[p+8>>1]=0;return 0}Module["_ftime"]=_ftime;var ERRNO_MESSAGES={0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"};Module["ERRNO_MESSAGES"]=ERRNO_MESSAGES;function _gethostbyname_r(name,ret,buf,buflen,out,err){var data=_gethostbyname(name);_memcpy(ret,data,20);_free(data);HEAP32[err>>2]=0;HEAP32[out>>2]=ret;return 0}Module["_gethostbyname_r"]=_gethostbyname_r;_gethostbyname_r.sig="iiiiiii";function _endprotoent(){}Module["_endprotoent"]=_endprotoent;function _getprotoent(number){if(_setprotoent.index===Protocols.list.length){return 0}else{var result=Protocols.list[_setprotoent.index++];return result}}Module["_getprotoent"]=_getprotoent;function _getprotobynumber(number){_setprotoent(true);var result=Protocols.map[number];return result}Module["_getprotobynumber"]=_getprotobynumber;function _getpwnam(){throw"getpwnam: TODO"}Module["_getpwnam"]=_getpwnam;function _getpwnam_r(){throw"getpwnam_r: TODO"}Module["_getpwnam_r"]=_getpwnam_r;function _getpwuid(){throw"getpwuid: TODO"}Module["_getpwuid"]=_getpwuid;function _getpwuid_r(){throw"getpwuid_r: TODO"}Module["_getpwuid_r"]=_getpwuid_r;function _setpwent(){throw"setpwent: TODO"}Module["_setpwent"]=_setpwent;function _getpwent(){throw"getpwent: TODO"}Module["_getpwent"]=_getpwent;function _endpwent(){throw"endpwent: TODO"}Module["_endpwent"]=_endpwent;function _getgrgid(){throw"getgrgid: TODO"}Module["_getgrgid"]=_getgrgid;function _getgrgid_r(){throw"getgrgid_r: TODO"}Module["_getgrgid_r"]=_getgrgid_r;function _getgrnam(){throw"getgrnam: TODO"}Module["_getgrnam"]=_getgrnam;function _getgrnam_r(){throw"getgrnam_r: TODO"}Module["_getgrnam_r"]=_getgrnam_r;function _getgrent(){throw"getgrent: TODO"}Module["_getgrent"]=_getgrent;function _endgrent(){throw"endgrent: TODO"}Module["_endgrent"]=_endgrent;function _setgrent(){throw"setgrent: TODO"}Module["_setgrent"]=_setgrent;function _emscripten_run_script(ptr){eval(UTF8ToString(ptr))}Module["_emscripten_run_script"]=_emscripten_run_script;_emscripten_run_script.sig="vi";function _emscripten_run_script_int(ptr){return eval(UTF8ToString(ptr))|0}Module["_emscripten_run_script_int"]=_emscripten_run_script_int;_emscripten_run_script_int.sig="ii";function _emscripten_run_script_string(ptr){var s=eval(UTF8ToString(ptr));if(s==null){return 0}s+="";var me=_emscripten_run_script_string;var len=lengthBytesUTF8(s);if(!me.bufferSize||me.bufferSize=4){symbolName=parts[1];file=parts[2];lineno=parts[3];column=parts[4]|0}else{callstack+=line+"\n";continue}}var haveSourceMap=false;if(flags&8){var orig=emscripten_source_map.originalPositionFor({line:lineno,column:column});haveSourceMap=orig&&orig.source;if(haveSourceMap){if(flags&64){orig.source=orig.source.substring(orig.source.replace(/\\/g,"/").lastIndexOf("/")+1)}callstack+=" at "+symbolName+" ("+orig.source+":"+orig.line+":"+orig.column+")\n"}}if(flags&16||!haveSourceMap){if(flags&64){file=file.substring(file.replace(/\\/g,"/").lastIndexOf("/")+1)}callstack+=(haveSourceMap?" = "+symbolName:" at "+symbolName)+" ("+file+":"+lineno+":"+column+")\n"}if(flags&128&&stack_args[0]){if(stack_args[1]==symbolName&&stack_args[2].length>0){callstack=callstack.replace(/\s+$/,"");callstack+=" with values: "+stack_args[1]+stack_args[2]+"\n"}stack_args=traverseStack(stack_args[0])}}callstack=callstack.replace(/\s+$/,"");return callstack}Module["_emscripten_get_callstack_js"]=_emscripten_get_callstack_js;function _emscripten_get_callstack(flags,str,maxbytes){var callstack=_emscripten_get_callstack_js(flags);if(!str||maxbytes<=0){return lengthBytesUTF8(callstack)+1}var bytesWrittenExcludingNull=stringToUTF8(callstack,str,maxbytes);return bytesWrittenExcludingNull+1}Module["_emscripten_get_callstack"]=_emscripten_get_callstack;function _emscripten_log_js(flags,str){if(flags&24){str=str.replace(/\s+$/,"");str+=(str.length>0?"\n":"")+_emscripten_get_callstack_js(flags)}if(flags&1){if(flags&4){err(str)}else if(flags&2){console.warn(str)}else if(flags&512){console.info(str)}else if(flags&256){console.debug(str)}else{out(str)}}else if(flags&6){err(str)}else{out(str)}}Module["_emscripten_log_js"]=_emscripten_log_js;function reallyNegative(x){return x<0||x===0&&1/x===-Infinity}Module["reallyNegative"]=reallyNegative;function convertI32PairToI53(lo,hi){return(lo>>>0)+hi*4294967296}Module["convertI32PairToI53"]=convertI32PairToI53;function convertU32PairToI53(lo,hi){return(lo>>>0)+(hi>>>0)*4294967296}Module["convertU32PairToI53"]=convertU32PairToI53;function reSign(value,bits){if(value<=0){return value}var half=bits<=32?Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}Module["reSign"]=reSign;function unSign(value,bits){if(value>=0){return value}return bits<=32?2*Math.abs(1<>3];argIndex+=8}else if(type=="i64"){ret=[HEAP32[argIndex>>2],HEAP32[argIndex+4>>2]];argIndex+=8}else{type="i32";ret=HEAP32[argIndex>>2];argIndex+=4}return ret}var ret=[];var curr,next,currArg;while(1){var startTextIndex=textIndex;curr=HEAP8[textIndex>>0];if(curr===0)break;next=HEAP8[textIndex+1>>0];if(curr==37){var flagAlwaysSigned=false;var flagLeftAlign=false;var flagAlternative=false;var flagZeroPad=false;var flagPadSign=false;flagsLoop:while(1){switch(next){case 43:flagAlwaysSigned=true;break;case 45:flagLeftAlign=true;break;case 35:flagAlternative=true;break;case 48:if(flagZeroPad){break flagsLoop}else{flagZeroPad=true;break}case 32:flagPadSign=true;break;default:break flagsLoop}textIndex++;next=HEAP8[textIndex+1>>0]}var width=0;if(next==42){width=getNextArg("i32");textIndex++;next=HEAP8[textIndex+1>>0]}else{while(next>=48&&next<=57){width=width*10+(next-48);textIndex++;next=HEAP8[textIndex+1>>0]}}var precisionSet=false,precision=-1;if(next==46){precision=0;precisionSet=true;textIndex++;next=HEAP8[textIndex+1>>0];if(next==42){precision=getNextArg("i32");textIndex++}else{while(1){var precisionChr=HEAP8[textIndex+1>>0];if(precisionChr<48||precisionChr>57)break;precision=precision*10+(precisionChr-48);textIndex++}}next=HEAP8[textIndex+1>>0]}if(precision<0){precision=6;precisionSet=false}var argSize;switch(String.fromCharCode(next)){case"h":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==104){textIndex++;argSize=1}else{argSize=2}break;case"l":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==108){textIndex++;argSize=8}else{argSize=4}break;case"L":case"q":case"j":argSize=8;break;case"z":case"t":case"I":argSize=4;break;default:argSize=null}if(argSize)textIndex++;next=HEAP8[textIndex+1>>0];switch(String.fromCharCode(next)){case"d":case"i":case"u":case"o":case"x":case"X":case"p":{var signed=next==100||next==105;argSize=argSize||4;currArg=getNextArg("i"+argSize*8);var argText;if(argSize==8){currArg=next==117?convertU32PairToI53(currArg[0],currArg[1]):convertI32PairToI53(currArg[0],currArg[1])}if(argSize<=4){var limit=Math.pow(256,argSize)-1;currArg=(signed?reSign:unSign)(currArg&limit,argSize*8)}var currAbsArg=Math.abs(currArg);var prefix="";if(next==100||next==105){argText=reSign(currArg,8*argSize,1).toString(10)}else if(next==117){argText=unSign(currArg,8*argSize,1).toString(10);currArg=Math.abs(currArg)}else if(next==111){argText=(flagAlternative?"0":"")+currAbsArg.toString(8)}else if(next==120||next==88){prefix=flagAlternative&&currArg!=0?"0x":"";if(currArg<0){currArg=-currArg;argText=(currAbsArg-1).toString(16);var buffer=[];for(var i=0;i=0){if(flagAlwaysSigned){prefix="+"+prefix}else if(flagPadSign){prefix=" "+prefix}}if(argText.charAt(0)=="-"){prefix="-"+prefix;argText=argText.substr(1)}while(prefix.length+argText.lengthexponent&&exponent>=-4){next=(next==103?"f":"F").charCodeAt(0);precision-=exponent+1}else{next=(next==103?"e":"E").charCodeAt(0);precision--}effectivePrecision=Math.min(precision,20)}if(next==101||next==69){argText=currArg.toExponential(effectivePrecision);if(/[eE][-+]\d$/.test(argText)){argText=argText.slice(0,-1)+"0"+argText.slice(-1)}}else if(next==102||next==70){argText=currArg.toFixed(effectivePrecision);if(currArg===0&&reallyNegative(currArg)){argText="-"+argText}}var parts=argText.split("e");if(isGeneral&&!flagAlternative){while(parts[0].length>1&&parts[0].includes(".")&&(parts[0].slice(-1)=="0"||parts[0].slice(-1)==".")){parts[0]=parts[0].slice(0,-1)}}else{if(flagAlternative&&argText.indexOf(".")==-1)parts[0]+=".";while(precision>effectivePrecision++)parts[0]+="0"}argText=parts[0]+(parts.length>1?"e"+parts[1]:"");if(next==69)argText=argText.toUpperCase();if(currArg>=0){if(flagAlwaysSigned){argText="+"+argText}else if(flagPadSign){argText=" "+argText}}}while(argText.length>0])}}else{ret=ret.concat(intArrayFromString("(null)".substr(0,argLength),true))}if(flagLeftAlign){while(argLength0){ret.push(32)}if(!flagLeftAlign)ret.push(getNextArg("i8"));break}case"n":{var ptr=getNextArg("i32*");HEAP32[ptr>>2]=ret.length;break}case"%":{ret.push(curr);break}default:{for(var i=startTextIndex;i>0])}}}textIndex+=2}else{ret.push(curr);textIndex+=1}}return ret}Module["formatString"]=formatString;function _emscripten_log(flags,format,varargs){var result=formatString(format,varargs);var str=UTF8ArrayToString(result,0);_emscripten_log_js(flags,str)}Module["_emscripten_log"]=_emscripten_log;function _emscripten_get_compiler_setting(name){throw"You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work"}Module["_emscripten_get_compiler_setting"]=_emscripten_get_compiler_setting;function _emscripten_has_asyncify(){return 0}Module["_emscripten_has_asyncify"]=_emscripten_has_asyncify;function _emscripten_debugger(){debugger}Module["_emscripten_debugger"]=_emscripten_debugger;function _emscripten_print_double(x,to,max){var str=x+"";if(to)return stringToUTF8(str,to,max);else return lengthBytesUTF8(str)}Module["_emscripten_print_double"]=_emscripten_print_double;function _emscripten_generate_pc(frame){abort("Cannot use emscripten_generate_pc (needed by __builtin_return_address) without -s USE_OFFSET_CONVERTER")}Module["_emscripten_generate_pc"]=_emscripten_generate_pc;function _emscripten_return_address(level){var callstack=(new Error).stack.split("\n");if(callstack[0]=="Error"){callstack.shift()}return _emscripten_generate_pc(callstack[level+2])}Module["_emscripten_return_address"]=_emscripten_return_address;var UNWIND_CACHE={};Module["UNWIND_CACHE"]=UNWIND_CACHE;function __emscripten_save_in_unwind_cache(callstack){callstack.forEach(function(frame){var pc=_emscripten_generate_pc(frame);if(pc){UNWIND_CACHE[pc]=frame}})}Module["__emscripten_save_in_unwind_cache"]=__emscripten_save_in_unwind_cache;function _emscripten_stack_snapshot(){var callstack=(new Error).stack.split("\n");if(callstack[0]=="Error"){callstack.shift()}__emscripten_save_in_unwind_cache(callstack);UNWIND_CACHE.last_addr=_emscripten_generate_pc(callstack[2]);UNWIND_CACHE.last_stack=callstack;return UNWIND_CACHE.last_addr}Module["_emscripten_stack_snapshot"]=_emscripten_stack_snapshot;function _emscripten_stack_unwind_buffer(addr,buffer,count){var stack;if(UNWIND_CACHE.last_addr==addr){stack=UNWIND_CACHE.last_stack}else{stack=(new Error).stack.split("\n");if(stack[0]=="Error"){stack.shift()}__emscripten_save_in_unwind_cache(stack)}var offset=2;while(stack[offset]&&_emscripten_generate_pc(stack[offset])!=addr){++offset}for(var i=0;i>2]=_emscripten_generate_pc(stack[i+offset])}return i}Module["_emscripten_stack_unwind_buffer"]=_emscripten_stack_unwind_buffer;function _emscripten_pc_get_function(pc){abort("Cannot use emscripten_pc_get_function without -s USE_OFFSET_CONVERTER")}Module["_emscripten_pc_get_function"]=_emscripten_pc_get_function;function _emscripten_pc_get_source_js(pc){if(UNWIND_CACHE.last_get_source_pc==pc)return UNWIND_CACHE.last_source;var match;var source;if(!source){var frame=UNWIND_CACHE[pc];if(!frame)return null;if(match=/\((.*):(\d+):(\d+)\)$/.exec(frame)){source={file:match[1],line:match[2],column:match[3]}}else if(match=/@(.*):(\d+):(\d+)/.exec(frame)){source={file:match[1],line:match[2],column:match[3]}}}UNWIND_CACHE.last_get_source_pc=pc;UNWIND_CACHE.last_source=source;return source}Module["_emscripten_pc_get_source_js"]=_emscripten_pc_get_source_js;function withBuiltinMalloc(func){var prev_malloc=typeof _malloc!=="undefined"?_malloc:undefined;var prev_memalign=typeof _memalign!=="undefined"?_memalign:undefined;var prev_free=typeof _free!=="undefined"?_free:undefined;_malloc=_emscripten_builtin_malloc;_memalign=_emscripten_builtin_memalign;_free=_emscripten_builtin_free;try{return func()}finally{_malloc=prev_malloc;_memalign=prev_memalign;_free=prev_free}}Module["withBuiltinMalloc"]=withBuiltinMalloc;function _emscripten_pc_get_file(pc){var result=_emscripten_pc_get_source_js(pc);if(!result)return 0;withBuiltinMalloc(function(){if(_emscripten_pc_get_file.ret)_free(_emscripten_pc_get_file.ret);_emscripten_pc_get_file.ret=allocateUTF8(result.file)});return _emscripten_pc_get_file.ret}Module["_emscripten_pc_get_file"]=_emscripten_pc_get_file;function _emscripten_pc_get_line(pc){var result=_emscripten_pc_get_source_js(pc);return result?result.line:0}Module["_emscripten_pc_get_line"]=_emscripten_pc_get_line;function _emscripten_pc_get_column(pc){var result=_emscripten_pc_get_source_js(pc);return result?result.column||0:0}Module["_emscripten_pc_get_column"]=_emscripten_pc_get_column;function _emscripten_get_module_name(buf,length){return stringToUTF8(wasmBinaryFile,buf,length)}Module["_emscripten_get_module_name"]=_emscripten_get_module_name;function _emscripten_builtin_mmap2(addr,len,prot,flags,fd,off){return withBuiltinMalloc(function(){return syscallMmap2(addr,len,prot,flags,fd,off)})}Module["_emscripten_builtin_mmap2"]=_emscripten_builtin_mmap2;function _emscripten_builtin_munmap(addr,len){return withBuiltinMalloc(function(){return syscallMunmap(addr,len)})}Module["_emscripten_builtin_munmap"]=_emscripten_builtin_munmap;function _emscripten_asm_const_double(a0,a1,a2){return _emscripten_asm_const_int(a0,a1,a2)}Module["_emscripten_asm_const_double"]=_emscripten_asm_const_double;_emscripten_asm_const_double.sig="iiii";function mainThreadEM_ASM(code,sigPtr,argbuf,sync){code-=1024;var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}Module["mainThreadEM_ASM"]=mainThreadEM_ASM;function _emscripten_asm_const_int_sync_on_main_thread(code,sigPtr,argbuf){return mainThreadEM_ASM(code,sigPtr,argbuf,1)}Module["_emscripten_asm_const_int_sync_on_main_thread"]=_emscripten_asm_const_int_sync_on_main_thread;_emscripten_asm_const_int_sync_on_main_thread.sig="iiii";function _emscripten_asm_const_double_sync_on_main_thread(a0,a1,a2){return _emscripten_asm_const_int_sync_on_main_thread(a0,a1,a2)}Module["_emscripten_asm_const_double_sync_on_main_thread"]=_emscripten_asm_const_double_sync_on_main_thread;_emscripten_asm_const_double_sync_on_main_thread.sig="iiii";function _emscripten_asm_const_async_on_main_thread(code,sigPtr,argbuf){return mainThreadEM_ASM(code,sigPtr,argbuf,0)}Module["_emscripten_asm_const_async_on_main_thread"]=_emscripten_asm_const_async_on_main_thread;function jstoi_s(str){return Number(str)}Module["jstoi_s"]=jstoi_s;function __Unwind_Backtrace(func,arg){var trace=_emscripten_get_callstack_js();var parts=trace.split("\n");for(var i=0;i>3)+i]);return Math.hypot.apply(null,args)}Module["_emscripten_math_hypot"]=_emscripten_math_hypot;function _emscripten_math_sin(x){return Math.sin(x)}Module["_emscripten_math_sin"]=_emscripten_math_sin;function _emscripten_math_sinh(x){return Math.sinh(x)}Module["_emscripten_math_sinh"]=_emscripten_math_sinh;function _emscripten_math_tan(x){return Math.tan(x)}Module["_emscripten_math_tan"]=_emscripten_math_tan;function _emscripten_math_tanh(x){return Math.tanh(x)}Module["_emscripten_math_tanh"]=_emscripten_math_tanh;function _sigaction(a0,a1,a2){return ___sigaction(a0,a1,a2)}Module["_sigaction"]=_sigaction;_sigaction.sig="viii";function ___sys_getpgrp(){return 42}Module["___sys_getpgrp"]=___sys_getpgrp;function ___sys_rt_sigqueueinfo(tgid,pid,uinfo){try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_rt_sigqueueinfo"]=___sys_rt_sigqueueinfo;function ___sys_setregid32(ruid,euid){if(ruid!==0)return-63;return 0}Module["___sys_setregid32"]=___sys_setregid32;___sys_setregid32.sig="iii";function ___sys_setreuid32(a0,a1){return ___sys_setregid32(a0,a1)}Module["___sys_setreuid32"]=___sys_setreuid32;___sys_setreuid32.sig="iii";function ___sys_setgid32(uid){if(uid!==0)return-63;return 0}Module["___sys_setgid32"]=___sys_setgid32;___sys_setgid32.sig="ii";function ___sys_setuid32(a0){return ___sys_setgid32(a0)}Module["___sys_setuid32"]=___sys_setuid32;___sys_setuid32.sig="ii";function ___sys_setresgid32(ruid,euid,suid){if(euid!==0)return-63;return 0}Module["___sys_setresgid32"]=___sys_setresgid32;___sys_setresgid32.sig="iiii";function ___sys_setresuid32(a0,a1,a2){return ___sys_setresgid32(a0,a1,a2)}Module["___sys_setresuid32"]=___sys_setresuid32;___sys_setresuid32.sig="iiii";function ___sys_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);return SYSCALLS.doAccess(path,amode)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}Module["___sys_faccessat"]=___sys_faccessat;var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence2?UTF8ToString(cString):cString}Module["maybeCStringToJsString"]=maybeCStringToJsString;var specialHTMLTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];Module["specialHTMLTargets"]=specialHTMLTargets;function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!=="undefined"?document.querySelector(target):undefined);return domElement}Module["findEventTarget"]=findEventTarget;function registerKeyEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=function(e){var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(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)}Module["registerKeyEventCallback"]=registerKeyEventCallback;function findCanvasEventTarget(target){return findEventTarget(target)}Module["findCanvasEventTarget"]=findCanvasEventTarget;function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);return 0}Module["_emscripten_set_keypress_callback_on_thread"]=_emscripten_set_keypress_callback_on_thread;_emscripten_set_keypress_callback_on_thread.sig="iiiiii";function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);return 0}Module["_emscripten_set_keydown_callback_on_thread"]=_emscripten_set_keydown_callback_on_thread;_emscripten_set_keydown_callback_on_thread.sig="iiiiii";function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread);return 0}Module["_emscripten_set_keyup_callback_on_thread"]=_emscripten_set_keyup_callback_on_thread;_emscripten_set_keyup_callback_on_thread.sig="iiiiii";function getBoundingClientRect(e){return specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0}}Module["getBoundingClientRect"]=getBoundingClientRect;function fillMouseEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-rect.left;HEAP32[idx+14]=e.clientY-rect.top}Module["fillMouseEventData"]=fillMouseEventData;function registerMouseEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);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)}Module["registerMouseEventCallback"]=registerMouseEventCallback;function _emscripten_set_click_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,4,"click",targetThread);return 0}Module["_emscripten_set_click_callback_on_thread"]=_emscripten_set_click_callback_on_thread;_emscripten_set_click_callback_on_thread.sig="iiiiii";function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread);return 0}Module["_emscripten_set_mousedown_callback_on_thread"]=_emscripten_set_mousedown_callback_on_thread;_emscripten_set_mousedown_callback_on_thread.sig="iiiiii";function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread);return 0}Module["_emscripten_set_mouseup_callback_on_thread"]=_emscripten_set_mouseup_callback_on_thread;_emscripten_set_mouseup_callback_on_thread.sig="iiiiii";function _emscripten_set_dblclick_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,7,"dblclick",targetThread);return 0}Module["_emscripten_set_dblclick_callback_on_thread"]=_emscripten_set_dblclick_callback_on_thread;_emscripten_set_dblclick_callback_on_thread.sig="iiiiii";function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);return 0}Module["_emscripten_set_mousemove_callback_on_thread"]=_emscripten_set_mousemove_callback_on_thread;_emscripten_set_mousemove_callback_on_thread.sig="iiiiii";function _emscripten_set_mouseenter_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread);return 0}Module["_emscripten_set_mouseenter_callback_on_thread"]=_emscripten_set_mouseenter_callback_on_thread;_emscripten_set_mouseenter_callback_on_thread.sig="iiiiii";function _emscripten_set_mouseleave_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread);return 0}Module["_emscripten_set_mouseleave_callback_on_thread"]=_emscripten_set_mouseleave_callback_on_thread;_emscripten_set_mouseleave_callback_on_thread.sig="iiiiii";function _emscripten_set_mouseover_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,35,"mouseover",targetThread);return 0}Module["_emscripten_set_mouseover_callback_on_thread"]=_emscripten_set_mouseover_callback_on_thread;_emscripten_set_mouseover_callback_on_thread.sig="iiiiii";function _emscripten_set_mouseout_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerMouseEventCallback(target,userData,useCapture,callbackfunc,36,"mouseout",targetThread);return 0}Module["_emscripten_set_mouseout_callback_on_thread"]=_emscripten_set_mouseout_callback_on_thread;_emscripten_set_mouseout_callback_on_thread.sig="iiiiii";function _emscripten_get_mouse_status(mouseState){if(!JSEvents.mouseEvent)return-7;HEAP8.set(HEAP8.subarray(JSEvents.mouseEvent,JSEvents.mouseEvent+72),mouseState);return 0}Module["_emscripten_get_mouse_status"]=_emscripten_get_mouse_status;_emscripten_get_mouse_status.sig="ii";function registerWheelEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=function(ev){var e=ev||event;var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(wasmTable.get(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["registerWheelEventCallback"]=registerWheelEventCallback;function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){target=findEventTarget(target);if(typeof target.onwheel!=="undefined"){registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread);return 0}else{return-1}}Module["_emscripten_set_wheel_callback_on_thread"]=_emscripten_set_wheel_callback_on_thread;_emscripten_set_wheel_callback_on_thread.sig="iiiiii";function registerUiEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.uiEvent)JSEvents.uiEvent=_malloc(36);target=findEventTarget(target);var uiEventHandlerFunc=function(ev){var e=ev||event;if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>2]=e.detail;HEAP32[uiEvent+4>>2]=b.clientWidth;HEAP32[uiEvent+8>>2]=b.clientHeight;HEAP32[uiEvent+12>>2]=innerWidth;HEAP32[uiEvent+16>>2]=innerHeight;HEAP32[uiEvent+20>>2]=outerWidth;HEAP32[uiEvent+24>>2]=outerHeight;HEAP32[uiEvent+28>>2]=pageXOffset;HEAP32[uiEvent+32>>2]=pageYOffset;if(wasmTable.get(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["registerUiEventCallback"]=registerUiEventCallback;function _emscripten_set_resize_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread);return 0}Module["_emscripten_set_resize_callback_on_thread"]=_emscripten_set_resize_callback_on_thread;_emscripten_set_resize_callback_on_thread.sig="iiiiii";function _emscripten_set_scroll_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerUiEventCallback(target,userData,useCapture,callbackfunc,11,"scroll",targetThread);return 0}Module["_emscripten_set_scroll_callback_on_thread"]=_emscripten_set_scroll_callback_on_thread;_emscripten_set_scroll_callback_on_thread.sig="iiiiii";function registerFocusEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=function(ev){var e=ev||event;var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(wasmTable.get(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["registerFocusEventCallback"]=registerFocusEventCallback;function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);return 0}Module["_emscripten_set_blur_callback_on_thread"]=_emscripten_set_blur_callback_on_thread;_emscripten_set_blur_callback_on_thread.sig="iiiiii";function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);return 0}Module["_emscripten_set_focus_callback_on_thread"]=_emscripten_set_focus_callback_on_thread;_emscripten_set_focus_callback_on_thread.sig="iiiiii";function _emscripten_set_focusin_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerFocusEventCallback(target,userData,useCapture,callbackfunc,14,"focusin",targetThread);return 0}Module["_emscripten_set_focusin_callback_on_thread"]=_emscripten_set_focusin_callback_on_thread;_emscripten_set_focusin_callback_on_thread.sig="iiiiii";function _emscripten_set_focusout_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerFocusEventCallback(target,userData,useCapture,callbackfunc,15,"focusout",targetThread);return 0}Module["_emscripten_set_focusout_callback_on_thread"]=_emscripten_set_focusout_callback_on_thread;_emscripten_set_focusout_callback_on_thread.sig="iiiiii";function fillDeviceOrientationEventData(eventStruct,e,target){HEAPF64[eventStruct>>3]=e.alpha;HEAPF64[eventStruct+8>>3]=e.beta;HEAPF64[eventStruct+16>>3]=e.gamma;HEAP32[eventStruct+24>>2]=e.absolute}Module["fillDeviceOrientationEventData"]=fillDeviceOrientationEventData;function registerDeviceOrientationEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.deviceOrientationEvent)JSEvents.deviceOrientationEvent=_malloc(32);var deviceOrientationEventHandlerFunc=function(ev){var e=ev||event;fillDeviceOrientationEventData(JSEvents.deviceOrientationEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.deviceOrientationEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:deviceOrientationEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["registerDeviceOrientationEventCallback"]=registerDeviceOrientationEventCallback;function _emscripten_set_deviceorientation_callback_on_thread(userData,useCapture,callbackfunc,targetThread){registerDeviceOrientationEventCallback(2,userData,useCapture,callbackfunc,16,"deviceorientation",targetThread);return 0}Module["_emscripten_set_deviceorientation_callback_on_thread"]=_emscripten_set_deviceorientation_callback_on_thread;_emscripten_set_deviceorientation_callback_on_thread.sig="iiiii";function _emscripten_get_deviceorientation_status(orientationState){if(!JSEvents.deviceOrientationEvent)return-7;HEAP32.set(HEAP32.subarray(JSEvents.deviceOrientationEvent,32),orientationState);return 0}Module["_emscripten_get_deviceorientation_status"]=_emscripten_get_deviceorientation_status;_emscripten_get_deviceorientation_status.sig="ii";function fillDeviceMotionEventData(eventStruct,e,target){var supportedFields=0;var a=e["acceleration"];supportedFields|=a&&1;var ag=e["accelerationIncludingGravity"];supportedFields|=ag&&2;var rr=e["rotationRate"];supportedFields|=rr&&4;a=a||{};ag=ag||{};rr=rr||{};HEAPF64[eventStruct>>3]=a["x"];HEAPF64[eventStruct+8>>3]=a["y"];HEAPF64[eventStruct+16>>3]=a["z"];HEAPF64[eventStruct+24>>3]=ag["x"];HEAPF64[eventStruct+32>>3]=ag["y"];HEAPF64[eventStruct+40>>3]=ag["z"];HEAPF64[eventStruct+48>>3]=rr["alpha"];HEAPF64[eventStruct+56>>3]=rr["beta"];HEAPF64[eventStruct+64>>3]=rr["gamma"]}Module["fillDeviceMotionEventData"]=fillDeviceMotionEventData;function registerDeviceMotionEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.deviceMotionEvent)JSEvents.deviceMotionEvent=_malloc(80);var deviceMotionEventHandlerFunc=function(ev){var e=ev||event;fillDeviceMotionEventData(JSEvents.deviceMotionEvent,e,target);if(wasmTable.get(callbackfunc)(eventTypeId,JSEvents.deviceMotionEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:deviceMotionEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["registerDeviceMotionEventCallback"]=registerDeviceMotionEventCallback;function _emscripten_set_devicemotion_callback_on_thread(userData,useCapture,callbackfunc,targetThread){registerDeviceMotionEventCallback(2,userData,useCapture,callbackfunc,17,"devicemotion",targetThread);return 0}Module["_emscripten_set_devicemotion_callback_on_thread"]=_emscripten_set_devicemotion_callback_on_thread;_emscripten_set_devicemotion_callback_on_thread.sig="iiiii";function _emscripten_get_devicemotion_status(motionState){if(!JSEvents.deviceMotionEvent)return-7;HEAP32.set(HEAP32.subarray(JSEvents.deviceMotionEvent,80),motionState);return 0}Module["_emscripten_get_devicemotion_status"]=_emscripten_get_devicemotion_status;_emscripten_get_devicemotion_status.sig="ii";function screenOrientation(){if(!screen)return undefined;return screen.orientation||screen.mozOrientation||screen.webkitOrientation||screen.msOrientation}Module["screenOrientation"]=screenOrientation;function fillOrientationChangeEventData(eventStruct){var orientations=["portrait-primary","portrait-secondary","landscape-primary","landscape-secondary"];var orientations2=["portrait","portrait","landscape","landscape"];var orientationString=screenOrientation();var orientation=orientations.indexOf(orientationString);if(orientation==-1){orientation=orientations2.indexOf(orientationString)}HEAP32[eventStruct>>2]=1<>2]=orientation}Module["fillOrientationChangeEventData"]=fillOrientationChangeEventData;function registerOrientationChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.orientationChangeEvent)JSEvents.orientationChangeEvent=_malloc(8);var orientationChangeEventHandlerFunc=function(ev){var e=ev||event;var orientationChangeEvent=JSEvents.orientationChangeEvent;fillOrientationChangeEventData(orientationChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,orientationChangeEvent,userData))e.preventDefault()};if(eventTypeString=="orientationchange"&&screen.mozOrientation!==undefined){eventTypeString="mozorientationchange"}var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:orientationChangeEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["registerOrientationChangeEventCallback"]=registerOrientationChangeEventCallback;function _emscripten_set_orientationchange_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!screen||!screen["addEventListener"])return-1;registerOrientationChangeEventCallback(screen,userData,useCapture,callbackfunc,18,"orientationchange",targetThread);return 0}Module["_emscripten_set_orientationchange_callback_on_thread"]=_emscripten_set_orientationchange_callback_on_thread;_emscripten_set_orientationchange_callback_on_thread.sig="iiiii";function _emscripten_get_orientation_status(orientationChangeEvent){if(!screenOrientation()&&typeof orientation==="undefined")return-1;fillOrientationChangeEventData(orientationChangeEvent);return 0}Module["_emscripten_get_orientation_status"]=_emscripten_get_orientation_status;_emscripten_get_orientation_status.sig="ii";function _emscripten_lock_orientation(allowedOrientations){var orientations=[];if(allowedOrientations&1)orientations.push("portrait-primary");if(allowedOrientations&2)orientations.push("portrait-secondary");if(allowedOrientations&4)orientations.push("landscape-primary");if(allowedOrientations&8)orientations.push("landscape-secondary");var succeeded;if(screen.lockOrientation){succeeded=screen.lockOrientation(orientations)}else if(screen.mozLockOrientation){succeeded=screen.mozLockOrientation(orientations)}else if(screen.webkitLockOrientation){succeeded=screen.webkitLockOrientation(orientations)}else if(screen.msLockOrientation){succeeded=screen.msLockOrientation(orientations)}else{return-1}if(succeeded){return 0}else{return-6}}Module["_emscripten_lock_orientation"]=_emscripten_lock_orientation;_emscripten_lock_orientation.sig="ii";function _emscripten_unlock_orientation(){if(screen.unlockOrientation){screen.unlockOrientation()}else if(screen.mozUnlockOrientation){screen.mozUnlockOrientation()}else if(screen.webkitUnlockOrientation){screen.webkitUnlockOrientation()}else if(screen.msUnlockOrientation){screen.msUnlockOrientation()}else{return-1}return 0}Module["_emscripten_unlock_orientation"]=_emscripten_unlock_orientation;_emscripten_unlock_orientation.sig="i";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}}Module["fillFullscreenChangeEventData"]=fillFullscreenChangeEventData;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)}Module["registerFullscreenChangeEventCallback"]=registerFullscreenChangeEventCallback;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}Module["_emscripten_set_fullscreenchange_callback_on_thread"]=_emscripten_set_fullscreenchange_callback_on_thread;_emscripten_set_fullscreenchange_callback_on_thread.sig="iiiiii";function _emscripten_get_fullscreen_status(fullscreenStatus){if(!JSEvents.fullscreenEnabled())return-1;fillFullscreenChangeEventData(fullscreenStatus);return 0}Module["_emscripten_get_fullscreen_status"]=_emscripten_get_fullscreen_status;_emscripten_get_fullscreen_status.sig="ii";function _emscripten_get_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>2]=canvas.width;HEAP32[height>>2]=canvas.height}Module["_emscripten_get_canvas_element_size"]=_emscripten_get_canvas_element_size;function getCanvasElementSize(target){var stackTop=stackSave();var w=stackAlloc(8);var h=w+4;var targetInt=stackAlloc(target.id.length+1);stringToUTF8(target.id,targetInt,target.id.length+1);var ret=_emscripten_get_canvas_element_size(targetInt,w,h);var size=[HEAP32[w>>2],HEAP32[h>>2]];stackRestore(stackTop);return size}Module["getCanvasElementSize"]=getCanvasElementSize;function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0}Module["_emscripten_set_canvas_element_size"]=_emscripten_set_canvas_element_size;_emscripten_set_canvas_element_size.sig="iiii";function setCanvasElementSize(target,width,height){if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{var stackTop=stackSave();var targetInt=stackAlloc(target.id.length+1);stringToUTF8(target.id,targetInt,target.id.length+1);_emscripten_set_canvas_element_size(targetInt,width,height);stackRestore(stackTop)}}Module["setCanvasElementSize"]=setCanvasElementSize;function registerRestoreOldStyle(canvas){var canvasSize=getCanvasElementSize(canvas);var oldWidth=canvasSize[0];var oldHeight=canvasSize[1];var oldCssWidth=canvas.style.width;var oldCssHeight=canvas.style.height;var oldBackgroundColor=canvas.style.backgroundColor;var oldDocumentBackgroundColor=document.body.style.backgroundColor;var oldPaddingLeft=canvas.style.paddingLeft;var oldPaddingRight=canvas.style.paddingRight;var oldPaddingTop=canvas.style.paddingTop;var oldPaddingBottom=canvas.style.paddingBottom;var oldMarginLeft=canvas.style.marginLeft;var oldMarginRight=canvas.style.marginRight;var oldMarginTop=canvas.style.marginTop;var oldMarginBottom=canvas.style.marginBottom;var oldDocumentBodyMargin=document.body.style.margin;var oldDocumentOverflow=document.documentElement.style.overflow;var oldDocumentScroll=document.body.scroll;var oldImageRendering=canvas.style.imageRendering;function restoreOldStyle(){var fullscreenElement=document.fullscreenElement||document.webkitFullscreenElement||document.msFullscreenElement;if(!fullscreenElement){document.removeEventListener("fullscreenchange",restoreOldStyle);document.removeEventListener("webkitfullscreenchange",restoreOldStyle);setCanvasElementSize(canvas,oldWidth,oldHeight);canvas.style.width=oldCssWidth;canvas.style.height=oldCssHeight;canvas.style.backgroundColor=oldBackgroundColor;if(!oldDocumentBackgroundColor)document.body.style.backgroundColor="white";document.body.style.backgroundColor=oldDocumentBackgroundColor;canvas.style.paddingLeft=oldPaddingLeft;canvas.style.paddingRight=oldPaddingRight;canvas.style.paddingTop=oldPaddingTop;canvas.style.paddingBottom=oldPaddingBottom;canvas.style.marginLeft=oldMarginLeft;canvas.style.marginRight=oldMarginRight;canvas.style.marginTop=oldMarginTop;canvas.style.marginBottom=oldMarginBottom;document.body.style.margin=oldDocumentBodyMargin;document.documentElement.style.overflow=oldDocumentOverflow;document.body.scroll=oldDocumentScroll;canvas.style.imageRendering=oldImageRendering;if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,oldWidth,oldHeight);if(currentFullscreenStrategy.canvasResizedCallback){wasmTable.get(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}}document.addEventListener("fullscreenchange",restoreOldStyle);document.addEventListener("webkitfullscreenchange",restoreOldStyle);return restoreOldStyle}Module["registerRestoreOldStyle"]=registerRestoreOldStyle;function setLetterbox(element,topBottom,leftRight){element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"}Module["setLetterbox"]=setLetterbox;function _JSEvents_resizeCanvasForFullscreen(target,strategy){var restoreOldStyle=registerRestoreOldStyle(target);var cssWidth=strategy.softFullscreen?innerWidth:screen.width;var cssHeight=strategy.softFullscreen?innerHeight:screen.height;var rect=getBoundingClientRect(target);var windowedCssWidth=rect.width;var windowedCssHeight=rect.height;var canvasSize=getCanvasElementSize(target);var windowedRttWidth=canvasSize[0];var windowedRttHeight=canvasSize[1];if(strategy.scaleMode==3){setLetterbox(target,(cssHeight-windowedCssHeight)/2,(cssWidth-windowedCssWidth)/2);cssWidth=windowedCssWidth;cssHeight=windowedCssHeight}else if(strategy.scaleMode==2){if(cssWidth*windowedRttHeightx*h)w=h*x/y|0;topMargin=(screenHeight-h)/2|0}if(inPixelPerfectFullscreenMode){setCanvasElementSize(canvas,w,h);if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,w,h)}if(inHiDPIFullscreenMode){topMargin/=dpr;w/=dpr;h/=dpr;w=Math.round(w*1e4)/1e4;h=Math.round(h*1e4)/1e4;topMargin=Math.round(topMargin*1e4)/1e4}if(inCenteredWithoutScalingFullscreenMode){var t=(innerHeight-jstoi_q(canvas.style.height))/2;var b=(innerWidth-jstoi_q(canvas.style.width))/2;setLetterbox(canvas,t,b)}else{canvas.style.width=w+"px";canvas.style.height=h+"px";var b=(innerWidth-w)/2;setLetterbox(canvas,topMargin,b)}if(!inCenteredWithoutScalingFullscreenMode&¤tFullscreenStrategy.canvasResizedCallback){wasmTable.get(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}Module["softFullscreenResizeWebGLRenderTarget"]=softFullscreenResizeWebGLRenderTarget;function doRequestFullscreen(target,strategy){if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(_JSEvents_requestFullscreen,1,[target,strategy]);return 1}else{return-2}}return _JSEvents_requestFullscreen(target,strategy)}Module["doRequestFullscreen"]=doRequestFullscreen;function _emscripten_request_fullscreen(target,deferUntilInEventHandler){var strategy={scaleMode:0,canvasResolutionScaleMode:0,filteringMode:0,deferUntilInEventHandler:deferUntilInEventHandler,canvasResizedCallbackTargetThread:2};return doRequestFullscreen(target,strategy)}Module["_emscripten_request_fullscreen"]=_emscripten_request_fullscreen;_emscripten_request_fullscreen.sig="iii";function _emscripten_request_fullscreen_strategy(target,deferUntilInEventHandler,fullscreenStrategy){var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],deferUntilInEventHandler:deferUntilInEventHandler,canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2]};return doRequestFullscreen(target,strategy)}Module["_emscripten_request_fullscreen_strategy"]=_emscripten_request_fullscreen_strategy;_emscripten_request_fullscreen_strategy.sig="iiii";function _emscripten_enter_soft_fullscreen(target,fullscreenStrategy){target=findEventTarget(target);if(!target)return-4;var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2],target:target,softFullscreen:true};var restoreOldStyle=_JSEvents_resizeCanvasForFullscreen(target,strategy);document.documentElement.style.overflow="hidden";document.body.scroll="no";document.body.style.margin="0px";var hiddenElements=hideEverythingExceptGivenElement(target);function restoreWindowedState(){restoreOldStyle();restoreHiddenElements(hiddenElements);removeEventListener("resize",softFullscreenResizeWebGLRenderTarget);if(strategy.canvasResizedCallback){wasmTable.get(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}currentFullscreenStrategy=0}restoreOldWindowedStyle=restoreWindowedState;currentFullscreenStrategy=strategy;addEventListener("resize",softFullscreenResizeWebGLRenderTarget);if(strategy.canvasResizedCallback){wasmTable.get(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}return 0}Module["_emscripten_enter_soft_fullscreen"]=_emscripten_enter_soft_fullscreen;_emscripten_enter_soft_fullscreen.sig="iii";function _emscripten_exit_soft_fullscreen(){if(restoreOldWindowedStyle)restoreOldWindowedStyle();restoreOldWindowedStyle=null;return 0}Module["_emscripten_exit_soft_fullscreen"]=_emscripten_exit_soft_fullscreen;_emscripten_exit_soft_fullscreen.sig="i";function _emscripten_exit_fullscreen(){if(!JSEvents.fullscreenEnabled())return-1;JSEvents.removeDeferredCalls(_JSEvents_requestFullscreen);var d=specialHTMLTargets[1];if(d.exitFullscreen){d.fullscreenElement&&d.exitFullscreen()}else if(d.webkitExitFullscreen){d.webkitFullscreenElement&&d.webkitExitFullscreen()}else{return-1}return 0}Module["_emscripten_exit_fullscreen"]=_emscripten_exit_fullscreen;_emscripten_exit_fullscreen.sig="i";function fillPointerlockChangeEventData(eventStruct){var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)}Module["fillPointerlockChangeEventData"]=fillPointerlockChangeEventData;function registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.pointerlockChangeEvent)JSEvents.pointerlockChangeEvent=_malloc(260);var pointerlockChangeEventHandlerFunc=function(ev){var e=ev||event;var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["registerPointerlockChangeEventCallback"]=registerPointerlockChangeEventCallback;function _emscripten_set_pointerlockchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!document||!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mozpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"webkitpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mspointerlockchange",targetThread);return 0}Module["_emscripten_set_pointerlockchange_callback_on_thread"]=_emscripten_set_pointerlockchange_callback_on_thread;_emscripten_set_pointerlockchange_callback_on_thread.sig="iiiiii";function registerPointerlockErrorEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){var pointerlockErrorEventHandlerFunc=function(ev){var e=ev||event;if(wasmTable.get(callbackfunc)(eventTypeId,0,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:pointerlockErrorEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["registerPointerlockErrorEventCallback"]=registerPointerlockErrorEventCallback;function _emscripten_set_pointerlockerror_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(!document||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;registerPointerlockErrorEventCallback(target,userData,useCapture,callbackfunc,38,"pointerlockerror",targetThread);registerPointerlockErrorEventCallback(target,userData,useCapture,callbackfunc,38,"mozpointerlockerror",targetThread);registerPointerlockErrorEventCallback(target,userData,useCapture,callbackfunc,38,"webkitpointerlockerror",targetThread);registerPointerlockErrorEventCallback(target,userData,useCapture,callbackfunc,38,"mspointerlockerror",targetThread);return 0}Module["_emscripten_set_pointerlockerror_callback_on_thread"]=_emscripten_set_pointerlockerror_callback_on_thread;_emscripten_set_pointerlockerror_callback_on_thread.sig="iiiiii";function _emscripten_get_pointerlock_status(pointerlockStatus){if(pointerlockStatus)fillPointerlockChangeEventData(pointerlockStatus);if(!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}return 0}Module["_emscripten_get_pointerlock_status"]=_emscripten_get_pointerlock_status;_emscripten_get_pointerlock_status.sig="ii";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}Module["requestPointerLock"]=requestPointerLock;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)}Module["_emscripten_request_pointerlock"]=_emscripten_request_pointerlock;_emscripten_request_pointerlock.sig="iii";function _emscripten_exit_pointerlock(){JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else if(document.msExitPointerLock){document.msExitPointerLock()}else{return-1}return 0}Module["_emscripten_exit_pointerlock"]=_emscripten_exit_pointerlock;_emscripten_exit_pointerlock.sig="i";function _emscripten_vibrate(msecs){if(!navigator.vibrate)return-1;navigator.vibrate(msecs);return 0}Module["_emscripten_vibrate"]=_emscripten_vibrate;_emscripten_vibrate.sig="ii";function _emscripten_vibrate_pattern(msecsArray,numEntries){if(!navigator.vibrate)return-1;var vibrateList=[];for(var i=0;i>2];vibrateList.push(msecs)}navigator.vibrate(vibrateList);return 0}Module["_emscripten_vibrate_pattern"]=_emscripten_vibrate_pattern;_emscripten_vibrate_pattern.sig="iii";function fillVisibilityChangeEventData(eventStruct){var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP32[eventStruct>>2]=document.hidden;HEAP32[eventStruct+4>>2]=visibilityState}Module["fillVisibilityChangeEventData"]=fillVisibilityChangeEventData;function registerVisibilityChangeEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.visibilityChangeEvent)JSEvents.visibilityChangeEvent=_malloc(8);var visibilityChangeEventHandlerFunc=function(ev){var e=ev||event;var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(wasmTable.get(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["registerVisibilityChangeEventCallback"]=registerVisibilityChangeEventCallback;function _emscripten_set_visibilitychange_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(!specialHTMLTargets[1]){return-4}registerVisibilityChangeEventCallback(specialHTMLTargets[1],userData,useCapture,callbackfunc,21,"visibilitychange",targetThread);return 0}Module["_emscripten_set_visibilitychange_callback_on_thread"]=_emscripten_set_visibilitychange_callback_on_thread;_emscripten_set_visibilitychange_callback_on_thread.sig="iiiii";function _emscripten_get_visibility_status(visibilityStatus){if(typeof document.visibilityState==="undefined"&&typeof document.hidden==="undefined"){return-1}fillVisibilityChangeEventData(visibilityStatus);return 0}Module["_emscripten_get_visibility_status"]=_emscripten_get_visibility_status;_emscripten_get_visibility_status.sig="ii";function registerTouchEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=function(e){var touches={};var et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){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+8>>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)}Module["registerTouchEventCallback"]=registerTouchEventCallback;function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);return 0}Module["_emscripten_set_touchstart_callback_on_thread"]=_emscripten_set_touchstart_callback_on_thread;_emscripten_set_touchstart_callback_on_thread.sig="iiiiii";function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);return 0}Module["_emscripten_set_touchend_callback_on_thread"]=_emscripten_set_touchend_callback_on_thread;_emscripten_set_touchend_callback_on_thread.sig="iiiiii";function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);return 0}Module["_emscripten_set_touchmove_callback_on_thread"]=_emscripten_set_touchmove_callback_on_thread;_emscripten_set_touchmove_callback_on_thread.sig="iiiiii";function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);return 0}Module["_emscripten_set_touchcancel_callback_on_thread"]=_emscripten_set_touchcancel_callback_on_thread;_emscripten_set_touchcancel_callback_on_thread.sig="iiiiii";function fillGamepadEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)}Module["fillGamepadEventData"]=fillGamepadEventData;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)}Module["registerGamepadEventCallback"]=registerGamepadEventCallback;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}Module["_emscripten_set_gamepadconnected_callback_on_thread"]=_emscripten_set_gamepadconnected_callback_on_thread;_emscripten_set_gamepadconnected_callback_on_thread.sig="iiiii";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}Module["_emscripten_set_gamepaddisconnected_callback_on_thread"]=_emscripten_set_gamepaddisconnected_callback_on_thread;_emscripten_set_gamepaddisconnected_callback_on_thread.sig="iiiii";function _emscripten_sample_gamepad_data(){return(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1}Module["_emscripten_sample_gamepad_data"]=_emscripten_sample_gamepad_data;_emscripten_sample_gamepad_data.sig="i";function _emscripten_get_num_gamepads(){return JSEvents.lastGamepadState.length}Module["_emscripten_get_num_gamepads"]=_emscripten_get_num_gamepads;_emscripten_get_num_gamepads.sig="i";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}Module["_emscripten_get_gamepad_status"]=_emscripten_get_gamepad_status;_emscripten_get_gamepad_status.sig="iii";function registerBeforeUnloadEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString){var beforeUnloadEventHandlerFunc=function(ev){var e=ev||event;var confirmationMessage=wasmTable.get(callbackfunc)(eventTypeId,0,userData);if(confirmationMessage){confirmationMessage=UTF8ToString(confirmationMessage)}if(confirmationMessage){e.preventDefault();e.returnValue=confirmationMessage;return confirmationMessage}};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["registerBeforeUnloadEventCallback"]=registerBeforeUnloadEventCallback;function _emscripten_set_beforeunload_callback_on_thread(userData,callbackfunc,targetThread){if(typeof onbeforeunload==="undefined")return-1;if(targetThread!==1)return-5;registerBeforeUnloadEventCallback(2,userData,true,callbackfunc,28,"beforeunload");return 0}Module["_emscripten_set_beforeunload_callback_on_thread"]=_emscripten_set_beforeunload_callback_on_thread;_emscripten_set_beforeunload_callback_on_thread.sig="iii";function fillBatteryEventData(eventStruct,e){HEAPF64[eventStruct>>3]=e.chargingTime;HEAPF64[eventStruct+8>>3]=e.dischargingTime;HEAPF64[eventStruct+16>>3]=e.level;HEAP32[eventStruct+24>>2]=e.charging}Module["fillBatteryEventData"]=fillBatteryEventData;function battery(){return navigator.battery||navigator.mozBattery||navigator.webkitBattery}Module["battery"]=battery;function registerBatteryEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){if(!JSEvents.batteryEvent)JSEvents.batteryEvent=_malloc(32);var batteryEventHandlerFunc=function(ev){var e=ev||event;var batteryEvent=JSEvents.batteryEvent;fillBatteryEventData(batteryEvent,battery());if(wasmTable.get(callbackfunc)(eventTypeId,batteryEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:batteryEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["registerBatteryEventCallback"]=registerBatteryEventCallback;function _emscripten_set_batterychargingchange_callback_on_thread(userData,callbackfunc,targetThread){if(!battery())return-1;registerBatteryEventCallback(battery(),userData,true,callbackfunc,29,"chargingchange",targetThread);return 0}Module["_emscripten_set_batterychargingchange_callback_on_thread"]=_emscripten_set_batterychargingchange_callback_on_thread;_emscripten_set_batterychargingchange_callback_on_thread.sig="iii";function _emscripten_set_batterylevelchange_callback_on_thread(userData,callbackfunc,targetThread){if(!battery())return-1;registerBatteryEventCallback(battery(),userData,true,callbackfunc,30,"levelchange",targetThread);return 0}Module["_emscripten_set_batterylevelchange_callback_on_thread"]=_emscripten_set_batterylevelchange_callback_on_thread;_emscripten_set_batterylevelchange_callback_on_thread.sig="iii";function _emscripten_get_battery_status(batteryState){if(!battery())return-1;fillBatteryEventData(batteryState,battery());return 0}Module["_emscripten_get_battery_status"]=_emscripten_get_battery_status;_emscripten_get_battery_status.sig="ii";function _emscripten_set_element_css_size(target,width,height){target=findEventTarget(target);if(!target)return-4;target.style.width=width+"px";target.style.height=height+"px";return 0}Module["_emscripten_set_element_css_size"]=_emscripten_set_element_css_size;_emscripten_set_element_css_size.sig="iiii";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}Module["_emscripten_get_element_css_size"]=_emscripten_get_element_css_size;_emscripten_get_element_css_size.sig="iiii";function _emscripten_html5_remove_all_event_listeners(){JSEvents.removeAllEventListeners()}Module["_emscripten_html5_remove_all_event_listeners"]=_emscripten_html5_remove_all_event_listeners;_emscripten_html5_remove_all_event_listeners.sig="v";function _emscripten_request_animation_frame(cb,userData){return requestAnimationFrame(function(timeStamp){wasmTable.get(cb)(timeStamp,userData)})}Module["_emscripten_request_animation_frame"]=_emscripten_request_animation_frame;function _emscripten_cancel_animation_frame(id){cancelAnimationFrame(id)}Module["_emscripten_cancel_animation_frame"]=_emscripten_cancel_animation_frame;function _emscripten_request_animation_frame_loop(cb,userData){function tick(timeStamp){if(wasmTable.get(cb)(timeStamp,userData)){requestAnimationFrame(tick)}}return requestAnimationFrame(tick)}Module["_emscripten_request_animation_frame_loop"]=_emscripten_request_animation_frame_loop;function polyfillSetImmediate(){}Module["polyfillSetImmediate"]=polyfillSetImmediate;function _emscripten_set_immediate(cb,userData){polyfillSetImmediate();return emSetImmediate(function(){callUserCallback(function(){wasmTable.get(cb)(userData)})})}Module["_emscripten_set_immediate"]=_emscripten_set_immediate;function _emscripten_clear_immediate(id){emClearImmediate(id)}Module["_emscripten_clear_immediate"]=_emscripten_clear_immediate;function _emscripten_set_immediate_loop(cb,userData){polyfillSetImmediate();function tick(){callUserCallback(function(){if(wasmTable.get(cb)(userData)){emSetImmediate(tick)}})}return emSetImmediate(tick)}Module["_emscripten_set_immediate_loop"]=_emscripten_set_immediate_loop;function _emscripten_set_timeout(cb,msecs,userData){return setTimeout(function(){callUserCallback(function(){wasmTable.get(cb)(userData)})},msecs)}Module["_emscripten_set_timeout"]=_emscripten_set_timeout;function _emscripten_clear_timeout(id){clearTimeout(id)}Module["_emscripten_clear_timeout"]=_emscripten_clear_timeout;function _emscripten_set_timeout_loop(cb,msecs,userData){function tick(){var t=performance.now();var n=t+msecs;callUserCallback(function(){if(wasmTable.get(cb)(t,userData)){setTimeout(tick,n-performance.now())}})}return setTimeout(tick,0)}Module["_emscripten_set_timeout_loop"]=_emscripten_set_timeout_loop;function _emscripten_set_interval(cb,msecs,userData){return setInterval(function(){callUserCallback(function(){wasmTable.get(cb)(userData)})},msecs)}Module["_emscripten_set_interval"]=_emscripten_set_interval;function _emscripten_clear_interval(id){clearInterval(id)}Module["_emscripten_clear_interval"]=_emscripten_clear_interval;function _emscripten_date_now(){return Date.now()}Module["_emscripten_date_now"]=_emscripten_date_now;function _emscripten_performance_now(){return performance.now()}Module["_emscripten_performance_now"]=_emscripten_performance_now;function _emscripten_console_log(str){out(UTF8ToString(str))}Module["_emscripten_console_log"]=_emscripten_console_log;function _emscripten_console_warn(str){console.warn(UTF8ToString(str))}Module["_emscripten_console_warn"]=_emscripten_console_warn;function _emscripten_console_error(str){err(UTF8ToString(str))}Module["_emscripten_console_error"]=_emscripten_console_error;function _emscripten_throw_number(number){throw number}Module["_emscripten_throw_number"]=_emscripten_throw_number;function _emscripten_throw_string(str){throw UTF8ToString(str)}Module["_emscripten_throw_string"]=_emscripten_throw_string;function _emscripten_unwind_to_js_event_loop(){throw"unwind"}Module["_emscripten_unwind_to_js_event_loop"]=_emscripten_unwind_to_js_event_loop;function _emscripten_get_device_pixel_ratio(){return typeof devicePixelRatio==="number"&&devicePixelRatio||1}Module["_emscripten_get_device_pixel_ratio"]=_emscripten_get_device_pixel_ratio;_emscripten_get_device_pixel_ratio.sig="d";function checkWasiClock(clock_id){return clock_id==0||clock_id==1||clock_id==2||clock_id==3}Module["checkWasiClock"]=checkWasiClock;function _clock_time_get(clk_id,precision_low,precision_high,ptime){if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=Date.now()}else if(_emscripten_get_now_is_monotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP32[ptime>>2]=nsec>>>0;HEAP32[ptime+4>>2]=nsec/Math.pow(2,32)>>>0;return 0}Module["_clock_time_get"]=_clock_time_get;_clock_time_get.sig="iiiii";function _clock_res_get(clk_id,pres){if(!checkWasiClock(clk_id)){return 28}var nsec;if(clk_id===0){nsec=1e3*1e3}else if(_emscripten_get_now_is_monotonic){nsec=_emscripten_get_now_res()}else{return 52}HEAP32[pres>>2]=nsec>>>0;HEAP32[pres+4>>2]=nsec/Math.pow(2,32)>>>0;return 0}Module["_clock_res_get"]=_clock_res_get;_clock_res_get.sig="iii";function writeI53ToI64Clamped(ptr,num){if(num>0x8000000000000000){HEAPU32[ptr>>2]=4294967295;HEAPU32[ptr+4>>2]=2147483647}else if(num<-0x8000000000000000){HEAPU32[ptr>>2]=0;HEAPU32[ptr+4>>2]=2147483648}else{HEAPU32[ptr>>2]=num;HEAPU32[ptr+4>>2]=(num-HEAPU32[ptr>>2])/4294967296}}Module["writeI53ToI64Clamped"]=writeI53ToI64Clamped;function writeI53ToI64Signaling(ptr,num){if(num>0x8000000000000000||num<-0x8000000000000000){throw"RangeError:"+num}HEAPU32[ptr>>2]=num;HEAPU32[ptr+4>>2]=(num-HEAPU32[ptr>>2])/4294967296}Module["writeI53ToI64Signaling"]=writeI53ToI64Signaling;function writeI53ToU64Clamped(ptr,num){if(num>0x10000000000000000)HEAPU32[ptr>>2]=HEAPU32[ptr+4>>2]=4294967295;else if(num<0)HEAPU32[ptr>>2]=HEAPU32[ptr+4>>2]=0;else{HEAPU32[ptr>>2]=num;HEAPU32[ptr+4>>2]=(num-HEAPU32[ptr>>2])/4294967296}}Module["writeI53ToU64Clamped"]=writeI53ToU64Clamped;function writeI53ToU64Signaling(ptr,num){if(num<0||num>0x10000000000000000){throw"RangeError:"+num}HEAPU32[ptr>>2]=num;HEAPU32[ptr+4>>2]=(num-HEAPU32[ptr>>2])/4294967296}Module["writeI53ToU64Signaling"]=writeI53ToU64Signaling;function readI53FromI64(ptr){return HEAPU32[ptr>>2]+HEAP32[ptr+4>>2]*4294967296}Module["readI53FromI64"]=readI53FromI64;function readI53FromU64(ptr){return HEAPU32[ptr>>2]+HEAPU32[ptr+4>>2]*4294967296}Module["readI53FromU64"]=readI53FromU64;function _emscripten_dlopen(filename,flags,user_data,onsuccess,onerror){function errorCallback(e){DLFCN.errorMsg="Could not load dynamic lib: "+UTF8ToString(filename)+"\n"+e;callUserCallback(function(){wasmTable.get(onerror)(user_data)})}function successCallback(handle){callUserCallback(function(){wasmTable.get(onsuccess)(user_data,handle)})}var promise=dlopenInternal(filename,flags,{loadAsync:true});if(promise){promise.then(successCallback,errorCallback)}else{errorCallback()}}Module["_emscripten_dlopen"]=_emscripten_dlopen;_emscripten_dlopen.sig="iii";function _dladdr(addr,info){var fname=stringToNewUTF8(getExecutableName());HEAP32[info>>2]=fname;HEAP32[info+4>>2]=0;HEAP32[info+8>>2]=0;HEAP32[info+12>>2]=0;return 1}Module["_dladdr"]=_dladdr;_dladdr.sig="iii";function _llvm_eh_typeid_for(type){return type}Module["_llvm_eh_typeid_for"]=_llvm_eh_typeid_for;function ___cxa_get_exception_ptr(ptr){return new CatchInfo(ptr).get_exception_ptr()}Module["___cxa_get_exception_ptr"]=___cxa_get_exception_ptr;function ___cxa_call_unexpected(exception){err("Unexpected exception thrown, this is not properly supported - aborting");ABORT=true;throw exception}Module["___cxa_call_unexpected"]=___cxa_call_unexpected;function ___cxa_find_matching_catch(){var thrown=exceptionLast;if(!thrown){setTempRet0(0);return 0|0}var info=new ExceptionInfo(thrown);var thrownType=info.get_type();var catchInfo=new CatchInfo;catchInfo.set_base_ptr(thrown);catchInfo.set_adjusted_ptr(thrown);if(!thrownType){setTempRet0(0);return catchInfo.ptr|0}var typeArray=Array.prototype.slice.call(arguments);for(var i=0;i0){dependenciesFulfilled=onload}else{onload()}}};script.onerror=function(){if(onerror)onerror()};script.src=UTF8ToString(url);document.body.appendChild(script)}Module["_emscripten_async_load_script"]=_emscripten_async_load_script;function _emscripten_get_main_loop_timing(mode,value){if(mode)HEAP32[mode>>2]=Browser.mainLoop.timingMode;if(value)HEAP32[value>>2]=Browser.mainLoop.timingValue}Module["_emscripten_get_main_loop_timing"]=_emscripten_get_main_loop_timing;_emscripten_get_main_loop_timing.sig="vii";function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=wasmTable.get(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}Module["_emscripten_set_main_loop"]=_emscripten_set_main_loop;function _emscripten_set_main_loop_arg(func,arg,fps,simulateInfiniteLoop){var browserIterationFunc=function(){wasmTable.get(func)(arg)};setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg)}Module["_emscripten_set_main_loop_arg"]=_emscripten_set_main_loop_arg;_emscripten_set_main_loop_arg.sig="viiii";function _emscripten_cancel_main_loop(){Browser.mainLoop.pause();Browser.mainLoop.func=null}Module["_emscripten_cancel_main_loop"]=_emscripten_cancel_main_loop;_emscripten_cancel_main_loop.sig="v";function _emscripten_pause_main_loop(){Browser.mainLoop.pause()}Module["_emscripten_pause_main_loop"]=_emscripten_pause_main_loop;_emscripten_pause_main_loop.sig="v";function _emscripten_resume_main_loop(){Browser.mainLoop.resume()}Module["_emscripten_resume_main_loop"]=_emscripten_resume_main_loop;_emscripten_resume_main_loop.sig="v";function __emscripten_push_main_loop_blocker(func,arg,name){Browser.mainLoop.queue.push({func:function(){wasmTable.get(func)(arg)},name:UTF8ToString(name),counted:true});Browser.mainLoop.updateStatus()}Module["__emscripten_push_main_loop_blocker"]=__emscripten_push_main_loop_blocker;function __emscripten_push_uncounted_main_loop_blocker(func,arg,name){Browser.mainLoop.queue.push({func:function(){wasmTable.get(func)(arg)},name:UTF8ToString(name),counted:false});Browser.mainLoop.updateStatus()}Module["__emscripten_push_uncounted_main_loop_blocker"]=__emscripten_push_uncounted_main_loop_blocker;function _emscripten_set_main_loop_expected_blockers(num){Browser.mainLoop.expectedBlockers=num;Browser.mainLoop.remainingBlockers=num;Browser.mainLoop.updateStatus()}Module["_emscripten_set_main_loop_expected_blockers"]=_emscripten_set_main_loop_expected_blockers;_emscripten_set_main_loop_expected_blockers.sig="vi";function _emscripten_async_call(func,arg,millis){function wrapper(){wasmTable.get(func)(arg)}if(millis>=0||ENVIRONMENT_IS_NODE){safeSetTimeout(wrapper,millis)}else{Browser.safeRequestAnimationFrame(wrapper)}}Module["_emscripten_async_call"]=_emscripten_async_call;_emscripten_async_call.sig="viii";function _emscripten_get_window_title(){var buflen=256;if(!_emscripten_get_window_title.buffer){_emscripten_get_window_title.buffer=_malloc(buflen)}writeAsciiToMemory(document.title.slice(0,buflen-1),_emscripten_get_window_title.buffer);return _emscripten_get_window_title.buffer}Module["_emscripten_get_window_title"]=_emscripten_get_window_title;_emscripten_get_window_title.sig="iv";function _emscripten_set_window_title(title){setWindowTitle(AsciiToString(title))}Module["_emscripten_set_window_title"]=_emscripten_set_window_title;_emscripten_set_window_title.sig="vi";function _emscripten_get_screen_size(width,height){HEAP32[width>>2]=screen.width;HEAP32[height>>2]=screen.height}Module["_emscripten_get_screen_size"]=_emscripten_get_screen_size;_emscripten_get_screen_size.sig="vii";function _emscripten_hide_mouse(){var styleSheet=document.styleSheets[0];var rules=styleSheet.cssRules;for(var i=0;i>2]=canvas.width;HEAP32[height>>2]=canvas.height;HEAP32[isFullscreen>>2]=Browser.isFullscreen?1:0}Module["_emscripten_get_canvas_size"]=_emscripten_get_canvas_size;_emscripten_get_canvas_size.sig="viii";function _emscripten_create_worker(url){url=UTF8ToString(url);var id=Browser.workers.length;var info={worker:new Worker(url),callbacks:[],awaited:0,buffer:0,bufferSize:0};info.worker.onmessage=function info_worker_onmessage(msg){if(ABORT)return;var info=Browser.workers[id];if(!info)return;var callbackId=msg.data["callbackId"];var callbackInfo=info.callbacks[callbackId];if(!callbackInfo)return;if(msg.data["finalResponse"]){info.awaited--;info.callbacks[callbackId]=null}var data=msg.data["data"];if(data){if(!data.byteLength)data=new Uint8Array(data);if(!info.buffer||info.bufferSize>2]=canvas.width;HEAP32[h>>2]=canvas.height;return buf}return 0}Module["_emscripten_get_preloaded_image_data"]=_emscripten_get_preloaded_image_data;_emscripten_get_preloaded_image_data.sig="iiii";function _emscripten_get_preloaded_image_data_from_FILE(file,w,h){var fd=Module["_fileno"](file);var stream=FS.getStream(fd);if(stream){return _emscripten_get_preloaded_image_data(stream.path,w,h)}return 0}Module["_emscripten_get_preloaded_image_data_from_FILE"]=_emscripten_get_preloaded_image_data_from_FILE;_emscripten_get_preloaded_image_data_from_FILE.sig="iiii";var wget={wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function(){var handle=wget.nextWgetRequestHandle;wget.nextWgetRequestHandle++;return handle}};Module["wget"]=wget;function _emscripten_async_wget(url,file,onload,onerror){var _url=UTF8ToString(url);var _file=UTF8ToString(file);_file=PATH_FS.resolve(_file);function doCallback(callback){if(callback){callUserCallback(function(){var stack=stackSave();wasmTable.get(callback)(allocate(intArrayFromString(_file),ALLOC_STACK));stackRestore(stack)})}}var destinationDirectory=PATH.dirname(_file);FS.createPreloadedFile(destinationDirectory,PATH.basename(_file),_url,true,true,function(){doCallback(onload)},function(){doCallback(onerror)},false,false,function(){try{FS.unlink(_file)}catch(e){}FS.mkdirTree(destinationDirectory)})}Module["_emscripten_async_wget"]=_emscripten_async_wget;_emscripten_async_wget.sig="viiii";function _emscripten_async_wget_data(url,arg,onload,onerror){asyncLoad(UTF8ToString(url),function(byteArray){callUserCallback(function(){var buffer=_malloc(byteArray.length);HEAPU8.set(byteArray,buffer);wasmTable.get(onload)(arg,buffer,byteArray.length);_free(buffer)})},function(){if(onerror){callUserCallback(function(){wasmTable.get(onerror)(arg)})}},true)}Module["_emscripten_async_wget_data"]=_emscripten_async_wget_data;_emscripten_async_wget_data.sig="viiii";function _emscripten_async_wget2(url,file,request,param,arg,onload,onerror,onprogress){var _url=UTF8ToString(url);var _file=UTF8ToString(file);_file=PATH_FS.resolve(_file);var _request=UTF8ToString(request);var _param=UTF8ToString(param);var index=_file.lastIndexOf("/");var http=new XMLHttpRequest;http.open(_request,_url,true);http.responseType="arraybuffer";var handle=wget.getNextWgetRequestHandle();var destinationDirectory=PATH.dirname(_file);http.onload=function http_onload(e){if(http.status>=200&&http.status<300){try{FS.unlink(_file)}catch(e){}FS.mkdirTree(destinationDirectory);FS.createDataFile(_file.substr(0,index),_file.substr(index+1),new Uint8Array(http.response),true,true,false);if(onload){var stack=stackSave();wasmTable.get(onload)(handle,arg,allocate(intArrayFromString(_file),ALLOC_STACK));stackRestore(stack)}}else{if(onerror)wasmTable.get(onerror)(handle,arg,http.status)}delete wget.wgetRequests[handle]};http.onerror=function http_onerror(e){if(onerror)wasmTable.get(onerror)(handle,arg,http.status);delete wget.wgetRequests[handle]};http.onprogress=function http_onprogress(e){if(e.lengthComputable||e.lengthComputable===undefined&&e.total!=0){var percentComplete=e.loaded/e.total*100;if(onprogress)wasmTable.get(onprogress)(handle,arg,percentComplete)}};http.onabort=function http_onabort(e){delete wget.wgetRequests[handle]};if(_request=="POST"){http.setRequestHeader("Content-type","application/x-www-form-urlencoded");http.send(_param)}else{http.send(null)}wget.wgetRequests[handle]=http;return handle}Module["_emscripten_async_wget2"]=_emscripten_async_wget2;_emscripten_async_wget2.sig="iiiiiiiii";function _emscripten_async_wget2_data(url,request,param,arg,free,onload,onerror,onprogress){var _url=UTF8ToString(url);var _request=UTF8ToString(request);var _param=UTF8ToString(param);var http=new XMLHttpRequest;http.open(_request,_url,true);http.responseType="arraybuffer";var handle=wget.getNextWgetRequestHandle();function onerrorjs(){if(onerror){var statusText=0;if(http.statusText){var len=lengthBytesUTF8(http.statusText)+1;statusText=stackAlloc(len);stringToUTF8(http.statusText,statusText,len)}wasmTable.get(onerror)(handle,arg,http.status,statusText)}}http.onload=function http_onload(e){if(http.status>=200&&http.status<300||http.status===0&&_url.substr(0,4).toLowerCase()!="http"){var byteArray=new Uint8Array(http.response);var buffer=_malloc(byteArray.length);HEAPU8.set(byteArray,buffer);if(onload)wasmTable.get(onload)(handle,arg,buffer,byteArray.length);if(free)_free(buffer)}else{onerrorjs()}delete wget.wgetRequests[handle]};http.onerror=function http_onerror(e){onerrorjs();delete wget.wgetRequests[handle]};http.onprogress=function http_onprogress(e){if(onprogress)wasmTable.get(onprogress)(handle,arg,e.loaded,e.lengthComputable||e.lengthComputable===undefined?e.total:0)};http.onabort=function http_onabort(e){delete wget.wgetRequests[handle]};if(_request=="POST"){http.setRequestHeader("Content-type","application/x-www-form-urlencoded");http.send(_param)}else{http.send(null)}wget.wgetRequests[handle]=http;return handle}Module["_emscripten_async_wget2_data"]=_emscripten_async_wget2_data;_emscripten_async_wget2_data.sig="iiiiiiiii";function _emscripten_async_wget2_abort(handle){var http=wget.wgetRequests[handle];if(http){http.abort()}}Module["_emscripten_async_wget2_abort"]=_emscripten_async_wget2_abort;_emscripten_async_wget2_abort.sig="vi";function _setNetworkCallback(event,userData,callback){function _callback(data){try{if(event==="error"){var sp=stackSave();var msg=allocate(intArrayFromString(data[2]),ALLOC_STACK);wasmTable.get(callback)(data[0],data[1],msg,userData);stackRestore(sp)}else{wasmTable.get(callback)(data,userData)}}catch(e){if(e instanceof ExitStatus){return}else{if(e&&typeof e==="object"&&e.stack)err("exception thrown: "+[e,e.stack]);throw e}}}Module["websocket"]["on"](event,callback?_callback:null)}Module["_setNetworkCallback"]=_setNetworkCallback;function _emscripten_set_socket_error_callback(userData,callback){_setNetworkCallback("error",userData,callback)}Module["_emscripten_set_socket_error_callback"]=_emscripten_set_socket_error_callback;function _emscripten_set_socket_open_callback(userData,callback){_setNetworkCallback("open",userData,callback)}Module["_emscripten_set_socket_open_callback"]=_emscripten_set_socket_open_callback;function _emscripten_set_socket_listen_callback(userData,callback){_setNetworkCallback("listen",userData,callback)}Module["_emscripten_set_socket_listen_callback"]=_emscripten_set_socket_listen_callback;function _emscripten_set_socket_connection_callback(userData,callback){_setNetworkCallback("connection",userData,callback)}Module["_emscripten_set_socket_connection_callback"]=_emscripten_set_socket_connection_callback;function _emscripten_set_socket_message_callback(userData,callback){_setNetworkCallback("message",userData,callback)}Module["_emscripten_set_socket_message_callback"]=_emscripten_set_socket_message_callback;function _emscripten_set_socket_close_callback(userData,callback){_setNetworkCallback("close",userData,callback)}Module["_emscripten_set_socket_close_callback"]=_emscripten_set_socket_close_callback;function _emscripten_webgl_enable_ANGLE_instanced_arrays(ctx){return __webgl_enable_ANGLE_instanced_arrays(GL.contexts[ctx].GLctx)}Module["_emscripten_webgl_enable_ANGLE_instanced_arrays"]=_emscripten_webgl_enable_ANGLE_instanced_arrays;function _emscripten_webgl_enable_OES_vertex_array_object(ctx){return __webgl_enable_OES_vertex_array_object(GL.contexts[ctx].GLctx)}Module["_emscripten_webgl_enable_OES_vertex_array_object"]=_emscripten_webgl_enable_OES_vertex_array_object;function _emscripten_webgl_enable_WEBGL_draw_buffers(ctx){return __webgl_enable_WEBGL_draw_buffers(GL.contexts[ctx].GLctx)}Module["_emscripten_webgl_enable_WEBGL_draw_buffers"]=_emscripten_webgl_enable_WEBGL_draw_buffers;function _emscripten_webgl_enable_WEBGL_multi_draw(ctx){return __webgl_enable_WEBGL_multi_draw(GL.contexts[ctx].GLctx)}Module["_emscripten_webgl_enable_WEBGL_multi_draw"]=_emscripten_webgl_enable_WEBGL_multi_draw;function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}Module["_glPixelStorei"]=_glPixelStorei;_glPixelStorei.sig="vii";function _glGetString(name_){var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));ret=stringToNewUTF8(exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s&&stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret}Module["_glGetString"]=_glGetString;_glGetString.sig="ii";function _glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}Module["_glGetIntegerv"]=_glGetIntegerv;_glGetIntegerv.sig="vii";function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}Module["_glGetFloatv"]=_glGetFloatv;_glGetFloatv.sig="vii";function _glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}Module["_glGetBooleanv"]=_glGetBooleanv;_glGetBooleanv.sig="vii";function _glDeleteTextures(n,textures){for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}Module["_glDeleteTextures"]=_glDeleteTextures;_glDeleteTextures.sig="vii";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)}Module["_glCompressedTexImage2D"]=_glCompressedTexImage2D;_glCompressedTexImage2D.sig="viiiiiiii";function _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)}Module["_glCompressedTexSubImage2D"]=_glCompressedTexSubImage2D;_glCompressedTexSubImage2D.sig="viiiiiiiii";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)}Module["_glTexImage2D"]=_glTexImage2D;_glTexImage2D.sig="viiiiiiiii";function _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)}Module["_glTexSubImage2D"]=_glTexSubImage2D;_glTexSubImage2D.sig="viiiiiiiii";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)}Module["_glReadPixels"]=_glReadPixels;_glReadPixels.sig="viiiiiii";function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}Module["_glBindTexture"]=_glBindTexture;_glBindTexture.sig="vii";function _glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}Module["_glGetTexParameterfv"]=_glGetTexParameterfv;_glGetTexParameterfv.sig="viii";function _glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}Module["_glGetTexParameteriv"]=_glGetTexParameteriv;_glGetTexParameteriv.sig="viii";function _glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}Module["_glTexParameterfv"]=_glTexParameterfv;_glTexParameterfv.sig="viii";function _glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}Module["_glTexParameteriv"]=_glTexParameteriv;_glTexParameteriv.sig="viii";function _glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}Module["_glIsTexture"]=_glIsTexture;_glIsTexture.sig="ii";function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}Module["_glGenBuffers"]=_glGenBuffers;_glGenBuffers.sig="vii";function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}Module["_glGenTextures"]=_glGenTextures;_glGenTextures.sig="vii";function _glDeleteBuffers(n,buffers){for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}}Module["_glDeleteBuffers"]=_glDeleteBuffers;_glDeleteBuffers.sig="vii";function _glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}Module["_glGetBufferParameteriv"]=_glGetBufferParameteriv;_glGetBufferParameteriv.sig="viii";function _glBufferData(target,size,data,usage){GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}Module["_glBufferData"]=_glBufferData;_glBufferData.sig="viiii";function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}Module["_glBufferSubData"]=_glBufferSubData;_glBufferSubData.sig="viiii";function _glGenQueriesEXT(n,ids){for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}}Module["_glGenQueriesEXT"]=_glGenQueriesEXT;_glGenQueriesEXT.sig="vii";function _glDeleteQueriesEXT(n,ids){for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}}Module["_glDeleteQueriesEXT"]=_glDeleteQueriesEXT;_glDeleteQueriesEXT.sig="vii";function _glIsQueryEXT(id){var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}Module["_glIsQueryEXT"]=_glIsQueryEXT;_glIsQueryEXT.sig="ii";function _glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])}Module["_glBeginQueryEXT"]=_glBeginQueryEXT;_glBeginQueryEXT.sig="vii";function _glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}Module["_glEndQueryEXT"]=_glEndQueryEXT;_glEndQueryEXT.sig="vi";function _glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)}Module["_glQueryCounterEXT"]=_glQueryCounterEXT;_glQueryCounterEXT.sig="vii";function _glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}Module["_glGetQueryivEXT"]=_glGetQueryivEXT;_glGetQueryivEXT.sig="viii";function _glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}Module["_glGetQueryObjectivEXT"]=_glGetQueryObjectivEXT;_glGetQueryObjectivEXT.sig="viii";function _glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}Module["_glGetQueryObjectuivEXT"]=_glGetQueryObjectuivEXT;_glGetQueryObjectuivEXT.sig="viii";function _glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}Module["_glGetQueryObjecti64vEXT"]=_glGetQueryObjecti64vEXT;_glGetQueryObjecti64vEXT.sig="viii";function _glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}Module["_glGetQueryObjectui64vEXT"]=_glGetQueryObjectui64vEXT;_glGetQueryObjectui64vEXT.sig="viii";function _glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}Module["_glIsBuffer"]=_glIsBuffer;_glIsBuffer.sig="ii";function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}Module["_glGenRenderbuffers"]=_glGenRenderbuffers;_glGenRenderbuffers.sig="vii";function _glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}Module["_glDeleteRenderbuffers"]=_glDeleteRenderbuffers;_glDeleteRenderbuffers.sig="vii";function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}Module["_glBindRenderbuffer"]=_glBindRenderbuffer;_glBindRenderbuffer.sig="vii";function _glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}Module["_glGetRenderbufferParameteriv"]=_glGetRenderbufferParameteriv;_glGetRenderbufferParameteriv.sig="viii";function _glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}Module["_glIsRenderbuffer"]=_glIsRenderbuffer;_glIsRenderbuffer.sig="ii";function _glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}Module["_glGetUniformfv"]=_glGetUniformfv;_glGetUniformfv.sig="viii";function _glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}Module["_glGetUniformiv"]=_glGetUniformiv;_glGetUniformiv.sig="viii";function _glGetUniformLocation(program,name){name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex>2]=GLctx.getVertexAttribOffset(index,pname)}Module["_glGetVertexAttribPointerv"]=_glGetVertexAttribPointerv;_glGetVertexAttribPointerv.sig="viii";function _glUniform1f(location,v0){GLctx.uniform1f(webglGetUniformLocation(location),v0)}Module["_glUniform1f"]=_glUniform1f;_glUniform1f.sig="vif";function _glUniform2f(location,v0,v1){GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)}Module["_glUniform2f"]=_glUniform2f;_glUniform2f.sig="viff";function _glUniform3f(location,v0,v1,v2){GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)}Module["_glUniform3f"]=_glUniform3f;_glUniform3f.sig="vifff";function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)}Module["_glUniform4f"]=_glUniform4f;_glUniform4f.sig="viffff";function _glUniform1i(location,v0){GLctx.uniform1i(webglGetUniformLocation(location),v0)}Module["_glUniform1i"]=_glUniform1i;_glUniform1i.sig="vii";function _glUniform2i(location,v0,v1){GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)}Module["_glUniform2i"]=_glUniform2i;_glUniform2i.sig="viii";function _glUniform3i(location,v0,v1,v2){GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)}Module["_glUniform3i"]=_glUniform3i;_glUniform3i.sig="viiii";function _glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)}Module["_glUniform4i"]=_glUniform4i;_glUniform4i.sig="viiiii";function _glUniform1iv(location,count,value){if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)}Module["_glUniform1iv"]=_glUniform1iv;_glUniform1iv.sig="viii";function _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(webglGetUniformLocation(location),view)}Module["_glUniform2iv"]=_glUniform2iv;_glUniform2iv.sig="viii";function _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(webglGetUniformLocation(location),view)}Module["_glUniform3iv"]=_glUniform3iv;_glUniform3iv.sig="viii";function _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(webglGetUniformLocation(location),view)}Module["_glUniform4iv"]=_glUniform4iv;_glUniform4iv.sig="viii";function _glUniform1fv(location,count,value){if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)}Module["_glUniform1fv"]=_glUniform1fv;_glUniform1fv.sig="viii";function _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(webglGetUniformLocation(location),view)}Module["_glUniform2fv"]=_glUniform2fv;_glUniform2fv.sig="viii";function _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(webglGetUniformLocation(location),view)}Module["_glUniform3fv"]=_glUniform3fv;_glUniform3fv.sig="viii";function _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(webglGetUniformLocation(location),view)}Module["_glUniform4fv"]=_glUniform4fv;_glUniform4fv.sig="viii";function _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(webglGetUniformLocation(location),!!transpose,view)}Module["_glUniformMatrix2fv"]=_glUniformMatrix2fv;_glUniformMatrix2fv.sig="viiii";function _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(webglGetUniformLocation(location),!!transpose,view)}Module["_glUniformMatrix3fv"]=_glUniformMatrix3fv;_glUniformMatrix3fv.sig="viiii";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(webglGetUniformLocation(location),!!transpose,view)}Module["_glUniformMatrix4fv"]=_glUniformMatrix4fv;_glUniformMatrix4fv.sig="viiii";function _glBindBuffer(target,buffer){GLctx.bindBuffer(target,GL.buffers[buffer])}Module["_glBindBuffer"]=_glBindBuffer;_glBindBuffer.sig="vii";function _glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}Module["_glVertexAttrib1fv"]=_glVertexAttrib1fv;_glVertexAttrib1fv.sig="vii";function _glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}Module["_glVertexAttrib2fv"]=_glVertexAttrib2fv;_glVertexAttrib2fv.sig="vii";function _glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}Module["_glVertexAttrib3fv"]=_glVertexAttrib3fv;_glVertexAttrib3fv.sig="vii";function _glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}Module["_glVertexAttrib4fv"]=_glVertexAttrib4fv;_glVertexAttrib4fv.sig="vii";function _glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}Module["_glGetAttribLocation"]=_glGetAttribLocation;_glGetAttribLocation.sig="iii";function _glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}Module["_glGetActiveAttrib"]=_glGetActiveAttrib;_glGetActiveAttrib.sig="viiiiiii";function _glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}Module["_glGetActiveUniform"]=_glGetActiveUniform;_glGetActiveUniform.sig="viiiiiii";function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}Module["_glCreateShader"]=_glCreateShader;_glCreateShader.sig="ii";function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}Module["_glDeleteShader"]=_glDeleteShader;_glDeleteShader.sig="vi";function _glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}}Module["_glGetAttachedShaders"]=_glGetAttachedShaders;_glGetAttachedShaders.sig="viiii";function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}Module["_glShaderSource"]=_glShaderSource;_glShaderSource.sig="viiii";function _glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}Module["_glGetShaderSource"]=_glGetShaderSource;_glGetShaderSource.sig="viiii";function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}Module["_glCompileShader"]=_glCompileShader;_glCompileShader.sig="vi";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}Module["_glGetShaderInfoLog"]=_glGetShaderInfoLog;_glGetShaderInfoLog.sig="viiii";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)}}Module["_glGetShaderiv"]=_glGetShaderiv;_glGetShaderiv.sig="viii";function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){for(var i=0;i>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){for(var i=0;i>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){for(var i=0;i>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}}Module["_glGetProgramiv"]=_glGetProgramiv;_glGetProgramiv.sig="viii";function _glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}Module["_glIsShader"]=_glIsShader;_glIsShader.sig="ii";function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id}Module["_glCreateProgram"]=_glCreateProgram;_glCreateProgram.sig="i";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}Module["_glDeleteProgram"]=_glDeleteProgram;_glDeleteProgram.sig="vi";function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}Module["_glAttachShader"]=_glAttachShader;_glAttachShader.sig="vii";function _glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}Module["_glDetachShader"]=_glDetachShader;_glDetachShader.sig="vii";function _glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}Module["_glGetShaderPrecisionFormat"]=_glGetShaderPrecisionFormat;_glGetShaderPrecisionFormat.sig="viiii";function _glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}Module["_glLinkProgram"]=_glLinkProgram;_glLinkProgram.sig="vi";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}Module["_glGetProgramInfoLog"]=_glGetProgramInfoLog;_glGetProgramInfoLog.sig="viiii";function _glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}Module["_glUseProgram"]=_glUseProgram;_glUseProgram.sig="vi";function _glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}Module["_glValidateProgram"]=_glValidateProgram;_glValidateProgram.sig="vi";function _glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}Module["_glIsProgram"]=_glIsProgram;_glIsProgram.sig="ii";function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}Module["_glBindAttribLocation"]=_glBindAttribLocation;_glBindAttribLocation.sig="viii";function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])}Module["_glBindFramebuffer"]=_glBindFramebuffer;_glBindFramebuffer.sig="vii";function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}Module["_glGenFramebuffers"]=_glGenFramebuffers;_glGenFramebuffers.sig="vii";function _glDeleteFramebuffers(n,framebuffers){for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}Module["_glDeleteFramebuffers"]=_glDeleteFramebuffers;_glDeleteFramebuffers.sig="vii";function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}Module["_glFramebufferRenderbuffer"]=_glFramebufferRenderbuffer;_glFramebufferRenderbuffer.sig="viiii";function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}Module["_glFramebufferTexture2D"]=_glFramebufferTexture2D;_glFramebufferTexture2D.sig="viiiii";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}Module["_glGetFramebufferAttachmentParameteriv"]=_glGetFramebufferAttachmentParameteriv;_glGetFramebufferAttachmentParameteriv.sig="viiii";function _glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}Module["_glIsFramebuffer"]=_glIsFramebuffer;_glIsFramebuffer.sig="ii";function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}Module["_glGenVertexArrays"]=_glGenVertexArrays;_glGenVertexArrays.sig="vii";function _glDeleteVertexArrays(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}Module["_glDeleteVertexArrays"]=_glDeleteVertexArrays;_glDeleteVertexArrays.sig="vii";function _glBindVertexArray(vao){GLctx["bindVertexArray"](GL.vaos[vao])}Module["_glBindVertexArray"]=_glBindVertexArray;_glBindVertexArray.sig="vi";function _glIsVertexArray(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}Module["_glIsVertexArray"]=_glIsVertexArray;_glIsVertexArray.sig="ii";function _glVertexPointer(){throw"Legacy GL function (glVertexPointer) called. If you want legacy GL emulation, you need to compile with -s LEGACY_GL_EMULATION=1 to enable legacy GL emulation."}Module["_glVertexPointer"]=_glVertexPointer;function _glMatrixMode(){throw"Legacy GL function (glMatrixMode) called. If you want legacy GL emulation, you need to compile with -s LEGACY_GL_EMULATION=1 to enable legacy GL emulation."}Module["_glMatrixMode"]=_glMatrixMode;function _glBegin(){throw"Legacy GL function (glBegin) called. If you want legacy GL emulation, you need to compile with -s LEGACY_GL_EMULATION=1 to enable legacy GL emulation."}Module["_glBegin"]=_glBegin;function _glLoadIdentity(){throw"Legacy GL function (glLoadIdentity) called. If you want legacy GL emulation, you need to compile with -s LEGACY_GL_EMULATION=1 to enable legacy GL emulation."}Module["_glLoadIdentity"]=_glLoadIdentity;function _glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}Module["_glGenVertexArraysOES"]=_glGenVertexArraysOES;_glGenVertexArraysOES.sig="vii";function _glDeleteVertexArraysOES(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}Module["_glDeleteVertexArraysOES"]=_glDeleteVertexArraysOES;_glDeleteVertexArraysOES.sig="vii";function _glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}Module["_glBindVertexArrayOES"]=_glBindVertexArrayOES;_glBindVertexArrayOES.sig="vi";function _glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}Module["_glIsVertexArrayOES"]=_glIsVertexArrayOES;_glIsVertexArrayOES.sig="ii";function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}Module["_glVertexAttribPointer"]=_glVertexAttribPointer;_glVertexAttribPointer.sig="viiiiii";function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}Module["_glEnableVertexAttribArray"]=_glEnableVertexAttribArray;_glEnableVertexAttribArray.sig="vi";function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}Module["_glDisableVertexAttribArray"]=_glDisableVertexAttribArray;_glDisableVertexAttribArray.sig="vi";function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}Module["_glDrawArrays"]=_glDrawArrays;_glDrawArrays.sig="viii";function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}Module["_glDrawElements"]=_glDrawElements;_glDrawElements.sig="viiii";function _glShaderBinary(){GL.recordError(1280)}Module["_glShaderBinary"]=_glShaderBinary;_glShaderBinary.sig="v";function _glReleaseShaderCompiler(){}Module["_glReleaseShaderCompiler"]=_glReleaseShaderCompiler;_glReleaseShaderCompiler.sig="v";function _glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}Module["_glGetError"]=_glGetError;_glGetError.sig="i";function _glVertexAttribDivisor(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}Module["_glVertexAttribDivisor"]=_glVertexAttribDivisor;_glVertexAttribDivisor.sig="vii";function _glDrawArraysInstanced(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}Module["_glDrawArraysInstanced"]=_glDrawArraysInstanced;_glDrawArraysInstanced.sig="viiii";function _glDrawElementsInstanced(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}Module["_glDrawElementsInstanced"]=_glDrawElementsInstanced;_glDrawElementsInstanced.sig="viiiii";function _glVertexAttribDivisorNV(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}Module["_glVertexAttribDivisorNV"]=_glVertexAttribDivisorNV;_glVertexAttribDivisorNV.sig="vii";function _glDrawArraysInstancedNV(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}Module["_glDrawArraysInstancedNV"]=_glDrawArraysInstancedNV;_glDrawArraysInstancedNV.sig="viiii";function _glDrawElementsInstancedNV(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}Module["_glDrawElementsInstancedNV"]=_glDrawElementsInstancedNV;_glDrawElementsInstancedNV.sig="viiiii";function _glVertexAttribDivisorEXT(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}Module["_glVertexAttribDivisorEXT"]=_glVertexAttribDivisorEXT;_glVertexAttribDivisorEXT.sig="vii";function _glDrawArraysInstancedEXT(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}Module["_glDrawArraysInstancedEXT"]=_glDrawArraysInstancedEXT;_glDrawArraysInstancedEXT.sig="viiii";function _glDrawElementsInstancedEXT(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}Module["_glDrawElementsInstancedEXT"]=_glDrawElementsInstancedEXT;_glDrawElementsInstancedEXT.sig="viiiii";function _glVertexAttribDivisorARB(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}Module["_glVertexAttribDivisorARB"]=_glVertexAttribDivisorARB;_glVertexAttribDivisorARB.sig="vii";function _glDrawArraysInstancedARB(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}Module["_glDrawArraysInstancedARB"]=_glDrawArraysInstancedARB;_glDrawArraysInstancedARB.sig="viiii";function _glDrawElementsInstancedARB(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}Module["_glDrawElementsInstancedARB"]=_glDrawElementsInstancedARB;_glDrawElementsInstancedARB.sig="viiiii";function _glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}Module["_glVertexAttribDivisorANGLE"]=_glVertexAttribDivisorANGLE;_glVertexAttribDivisorANGLE.sig="vii";function _glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}Module["_glDrawArraysInstancedANGLE"]=_glDrawArraysInstancedANGLE;_glDrawArraysInstancedANGLE.sig="viiii";function _glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}Module["_glDrawElementsInstancedANGLE"]=_glDrawElementsInstancedANGLE;_glDrawElementsInstancedANGLE.sig="viiiii";function _glDrawBuffers(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}Module["_glDrawBuffers"]=_glDrawBuffers;_glDrawBuffers.sig="vii";function _glDrawBuffersEXT(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}Module["_glDrawBuffersEXT"]=_glDrawBuffersEXT;_glDrawBuffersEXT.sig="vii";function _glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}Module["_glDrawBuffersWEBGL"]=_glDrawBuffersWEBGL;_glDrawBuffersWEBGL.sig="vii";function _glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}Module["_glColorMask"]=_glColorMask;_glColorMask.sig="viiii";function _glDepthMask(flag){GLctx.depthMask(!!flag)}Module["_glDepthMask"]=_glDepthMask;_glDepthMask.sig="vi";function _glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}Module["_glSampleCoverage"]=_glSampleCoverage;_glSampleCoverage.sig="vii";function _glMultiDrawArrays(mode,firsts,counts,drawcount){GLctx.multiDrawWebgl["multiDrawArraysWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,drawcount)}Module["_glMultiDrawArrays"]=_glMultiDrawArrays;_glMultiDrawArrays.sig="viiii";function _glMultiDrawArraysANGLE(mode,firsts,counts,drawcount){GLctx.multiDrawWebgl["multiDrawArraysWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,drawcount)}Module["_glMultiDrawArraysANGLE"]=_glMultiDrawArraysANGLE;_glMultiDrawArraysANGLE.sig="viiii";function _glMultiDrawArraysWEBGL(mode,firsts,counts,drawcount){GLctx.multiDrawWebgl["multiDrawArraysWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,drawcount)}Module["_glMultiDrawArraysWEBGL"]=_glMultiDrawArraysWEBGL;_glMultiDrawArraysWEBGL.sig="viiii";function _glMultiDrawArraysInstancedANGLE(mode,firsts,counts,instanceCounts,drawcount){GLctx.multiDrawWebgl["multiDrawArraysInstancedWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,HEAP32,instanceCounts>>2,drawcount)}Module["_glMultiDrawArraysInstancedANGLE"]=_glMultiDrawArraysInstancedANGLE;_glMultiDrawArraysInstancedANGLE.sig="viiiii";function _glMultiDrawArraysInstancedWEBGL(mode,firsts,counts,instanceCounts,drawcount){GLctx.multiDrawWebgl["multiDrawArraysInstancedWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,HEAP32,instanceCounts>>2,drawcount)}Module["_glMultiDrawArraysInstancedWEBGL"]=_glMultiDrawArraysInstancedWEBGL;_glMultiDrawArraysInstancedWEBGL.sig="viiiii";function _glMultiDrawElements(mode,counts,type,offsets,drawcount){GLctx.multiDrawWebgl["multiDrawElementsWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,drawcount)}Module["_glMultiDrawElements"]=_glMultiDrawElements;_glMultiDrawElements.sig="viiiii";function _glMultiDrawElementsANGLE(mode,counts,type,offsets,drawcount){GLctx.multiDrawWebgl["multiDrawElementsWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,drawcount)}Module["_glMultiDrawElementsANGLE"]=_glMultiDrawElementsANGLE;_glMultiDrawElementsANGLE.sig="viiiii";function _glMultiDrawElementsWEBGL(mode,counts,type,offsets,drawcount){GLctx.multiDrawWebgl["multiDrawElementsWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,drawcount)}Module["_glMultiDrawElementsWEBGL"]=_glMultiDrawElementsWEBGL;_glMultiDrawElementsWEBGL.sig="viiiii";function _glMultiDrawElementsInstancedANGLE(mode,counts,type,offsets,instanceCounts,drawcount){GLctx.multiDrawWebgl["multiDrawElementsInstancedWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,HEAP32,instanceCounts>>2,drawcount)}Module["_glMultiDrawElementsInstancedANGLE"]=_glMultiDrawElementsInstancedANGLE;_glMultiDrawElementsInstancedANGLE.sig="viiiiii";function _glMultiDrawElementsInstancedWEBGL(mode,counts,type,offsets,instanceCounts,drawcount){GLctx.multiDrawWebgl["multiDrawElementsInstancedWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,HEAP32,instanceCounts>>2,drawcount)}Module["_glMultiDrawElementsInstancedWEBGL"]=_glMultiDrawElementsInstancedWEBGL;_glMultiDrawElementsInstancedWEBGL.sig="viiiiii";function _glFinish(){GLctx["finish"]()}Module["_glFinish"]=_glFinish;_glFinish.sig="v";function _glFlush(){GLctx["flush"]()}Module["_glFlush"]=_glFlush;_glFlush.sig="v";function _glClearDepth(x0){GLctx["clearDepth"](x0)}Module["_glClearDepth"]=_glClearDepth;_glClearDepth.sig="vi";function _glClearDepthf(x0){GLctx["clearDepth"](x0)}Module["_glClearDepthf"]=_glClearDepthf;_glClearDepthf.sig="vi";function _glDepthFunc(x0){GLctx["depthFunc"](x0)}Module["_glDepthFunc"]=_glDepthFunc;_glDepthFunc.sig="vi";function _glEnable(x0){GLctx["enable"](x0)}Module["_glEnable"]=_glEnable;_glEnable.sig="vi";function _glDisable(x0){GLctx["disable"](x0)}Module["_glDisable"]=_glDisable;_glDisable.sig="vi";function _glFrontFace(x0){GLctx["frontFace"](x0)}Module["_glFrontFace"]=_glFrontFace;_glFrontFace.sig="vi";function _glCullFace(x0){GLctx["cullFace"](x0)}Module["_glCullFace"]=_glCullFace;_glCullFace.sig="vi";function _glClear(x0){GLctx["clear"](x0)}Module["_glClear"]=_glClear;_glClear.sig="vi";function _glLineWidth(x0){GLctx["lineWidth"](x0)}Module["_glLineWidth"]=_glLineWidth;_glLineWidth.sig="vi";function _glClearStencil(x0){GLctx["clearStencil"](x0)}Module["_glClearStencil"]=_glClearStencil;_glClearStencil.sig="vi";function _glStencilMask(x0){GLctx["stencilMask"](x0)}Module["_glStencilMask"]=_glStencilMask;_glStencilMask.sig="vi";function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}Module["_glCheckFramebufferStatus"]=_glCheckFramebufferStatus;_glCheckFramebufferStatus.sig="ii";function _glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}Module["_glGenerateMipmap"]=_glGenerateMipmap;_glGenerateMipmap.sig="vi";function _glActiveTexture(x0){GLctx["activeTexture"](x0)}Module["_glActiveTexture"]=_glActiveTexture;_glActiveTexture.sig="vi";function _glBlendEquation(x0){GLctx["blendEquation"](x0)}Module["_glBlendEquation"]=_glBlendEquation;_glBlendEquation.sig="vi";function _glIsEnabled(x0){return GLctx["isEnabled"](x0)}Module["_glIsEnabled"]=_glIsEnabled;_glIsEnabled.sig="ii";function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}Module["_glBlendFunc"]=_glBlendFunc;_glBlendFunc.sig="vii";function _glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}Module["_glBlendEquationSeparate"]=_glBlendEquationSeparate;_glBlendEquationSeparate.sig="vii";function _glDepthRange(x0,x1){GLctx["depthRange"](x0,x1)}Module["_glDepthRange"]=_glDepthRange;_glDepthRange.sig="vii";function _glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}Module["_glDepthRangef"]=_glDepthRangef;_glDepthRangef.sig="vii";function _glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}Module["_glStencilMaskSeparate"]=_glStencilMaskSeparate;_glStencilMaskSeparate.sig="vii";function _glHint(x0,x1){GLctx["hint"](x0,x1)}Module["_glHint"]=_glHint;_glHint.sig="vii";function _glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}Module["_glPolygonOffset"]=_glPolygonOffset;_glPolygonOffset.sig="vii";function _glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}Module["_glVertexAttrib1f"]=_glVertexAttrib1f;_glVertexAttrib1f.sig="vii";function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}Module["_glTexParameteri"]=_glTexParameteri;_glTexParameteri.sig="viii";function _glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}Module["_glTexParameterf"]=_glTexParameterf;_glTexParameterf.sig="viii";function _glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}Module["_glVertexAttrib2f"]=_glVertexAttrib2f;_glVertexAttrib2f.sig="viii";function _glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}Module["_glStencilFunc"]=_glStencilFunc;_glStencilFunc.sig="viii";function _glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}Module["_glStencilOp"]=_glStencilOp;_glStencilOp.sig="viii";function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}Module["_glViewport"]=_glViewport;_glViewport.sig="viiii";function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}Module["_glClearColor"]=_glClearColor;_glClearColor.sig="viiii";function _glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}Module["_glScissor"]=_glScissor;_glScissor.sig="viiii";function _glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}Module["_glVertexAttrib3f"]=_glVertexAttrib3f;_glVertexAttrib3f.sig="viiii";function _glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}Module["_glRenderbufferStorage"]=_glRenderbufferStorage;_glRenderbufferStorage.sig="viiii";function _glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}Module["_glBlendFuncSeparate"]=_glBlendFuncSeparate;_glBlendFuncSeparate.sig="viiii";function _glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}Module["_glBlendColor"]=_glBlendColor;_glBlendColor.sig="vffff";function _glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}Module["_glStencilFuncSeparate"]=_glStencilFuncSeparate;_glStencilFuncSeparate.sig="viiii";function _glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}Module["_glStencilOpSeparate"]=_glStencilOpSeparate;_glStencilOpSeparate.sig="viiii";function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}Module["_glVertexAttrib4f"]=_glVertexAttrib4f;_glVertexAttrib4f.sig="viiiii";function _glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}Module["_glCopyTexImage2D"]=_glCopyTexImage2D;_glCopyTexImage2D.sig="viiiiiiii";function _glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}Module["_glCopyTexSubImage2D"]=_glCopyTexSubImage2D;_glCopyTexSubImage2D.sig="viiiiiiii";function _emscripten_glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}Module["_emscripten_glGenVertexArrays"]=_emscripten_glGenVertexArrays;_emscripten_glGenVertexArrays.sig="vii";function _emscripten_glDeleteVertexArrays(n,vaos){for(var i=0;i>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}Module["_emscripten_glDeleteVertexArrays"]=_emscripten_glDeleteVertexArrays;_emscripten_glDeleteVertexArrays.sig="vii";function _emscripten_glBindVertexArray(vao){GLctx["bindVertexArray"](GL.vaos[vao])}Module["_emscripten_glBindVertexArray"]=_emscripten_glBindVertexArray;_emscripten_glBindVertexArray.sig="vi";function _emscripten_glIsVertexArray(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}Module["_emscripten_glIsVertexArray"]=_emscripten_glIsVertexArray;_emscripten_glIsVertexArray.sig="ii";function _emscripten_glVertexPointer(){throw"Legacy GL function (glVertexPointer) called. If you want legacy GL emulation, you need to compile with -s LEGACY_GL_EMULATION=1 to enable legacy GL emulation."}Module["_emscripten_glVertexPointer"]=_emscripten_glVertexPointer;function _emscripten_glMatrixMode(){throw"Legacy GL function (glMatrixMode) called. If you want legacy GL emulation, you need to compile with -s LEGACY_GL_EMULATION=1 to enable legacy GL emulation."}Module["_emscripten_glMatrixMode"]=_emscripten_glMatrixMode;function _emscripten_glBegin(){throw"Legacy GL function (glBegin) called. If you want legacy GL emulation, you need to compile with -s LEGACY_GL_EMULATION=1 to enable legacy GL emulation."}Module["_emscripten_glBegin"]=_emscripten_glBegin;function _emscripten_glLoadIdentity(){throw"Legacy GL function (glLoadIdentity) called. If you want legacy GL emulation, you need to compile with -s LEGACY_GL_EMULATION=1 to enable legacy GL emulation."}Module["_emscripten_glLoadIdentity"]=_emscripten_glLoadIdentity;function _emscripten_glVertexAttribDivisor(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}Module["_emscripten_glVertexAttribDivisor"]=_emscripten_glVertexAttribDivisor;_emscripten_glVertexAttribDivisor.sig="vii";function _emscripten_glDrawArraysInstanced(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}Module["_emscripten_glDrawArraysInstanced"]=_emscripten_glDrawArraysInstanced;_emscripten_glDrawArraysInstanced.sig="viiii";function _emscripten_glDrawElementsInstanced(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}Module["_emscripten_glDrawElementsInstanced"]=_emscripten_glDrawElementsInstanced;_emscripten_glDrawElementsInstanced.sig="viiiii";function _emscripten_glVertexAttribDivisorNV(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}Module["_emscripten_glVertexAttribDivisorNV"]=_emscripten_glVertexAttribDivisorNV;_emscripten_glVertexAttribDivisorNV.sig="vii";function _emscripten_glDrawArraysInstancedNV(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}Module["_emscripten_glDrawArraysInstancedNV"]=_emscripten_glDrawArraysInstancedNV;_emscripten_glDrawArraysInstancedNV.sig="viiii";function _emscripten_glDrawElementsInstancedNV(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}Module["_emscripten_glDrawElementsInstancedNV"]=_emscripten_glDrawElementsInstancedNV;_emscripten_glDrawElementsInstancedNV.sig="viiiii";function _emscripten_glVertexAttribDivisorEXT(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}Module["_emscripten_glVertexAttribDivisorEXT"]=_emscripten_glVertexAttribDivisorEXT;_emscripten_glVertexAttribDivisorEXT.sig="vii";function _emscripten_glDrawArraysInstancedEXT(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}Module["_emscripten_glDrawArraysInstancedEXT"]=_emscripten_glDrawArraysInstancedEXT;_emscripten_glDrawArraysInstancedEXT.sig="viiii";function _emscripten_glDrawElementsInstancedEXT(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}Module["_emscripten_glDrawElementsInstancedEXT"]=_emscripten_glDrawElementsInstancedEXT;_emscripten_glDrawElementsInstancedEXT.sig="viiiii";function _emscripten_glVertexAttribDivisorARB(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}Module["_emscripten_glVertexAttribDivisorARB"]=_emscripten_glVertexAttribDivisorARB;_emscripten_glVertexAttribDivisorARB.sig="vii";function _emscripten_glDrawArraysInstancedARB(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}Module["_emscripten_glDrawArraysInstancedARB"]=_emscripten_glDrawArraysInstancedARB;_emscripten_glDrawArraysInstancedARB.sig="viiii";function _emscripten_glDrawElementsInstancedARB(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}Module["_emscripten_glDrawElementsInstancedARB"]=_emscripten_glDrawElementsInstancedARB;_emscripten_glDrawElementsInstancedARB.sig="viiiii";function _emscripten_glDrawBuffers(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}Module["_emscripten_glDrawBuffers"]=_emscripten_glDrawBuffers;_emscripten_glDrawBuffers.sig="vii";function _emscripten_glDrawBuffersEXT(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx["drawBuffers"](bufArray)}Module["_emscripten_glDrawBuffersEXT"]=_emscripten_glDrawBuffersEXT;_emscripten_glDrawBuffersEXT.sig="vii";function _emscripten_glMultiDrawArrays(mode,firsts,counts,drawcount){GLctx.multiDrawWebgl["multiDrawArraysWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,drawcount)}Module["_emscripten_glMultiDrawArrays"]=_emscripten_glMultiDrawArrays;_emscripten_glMultiDrawArrays.sig="viiii";function _emscripten_glMultiDrawArraysANGLE(mode,firsts,counts,drawcount){GLctx.multiDrawWebgl["multiDrawArraysWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,drawcount)}Module["_emscripten_glMultiDrawArraysANGLE"]=_emscripten_glMultiDrawArraysANGLE;_emscripten_glMultiDrawArraysANGLE.sig="viiii";function _emscripten_glMultiDrawArraysWEBGL(mode,firsts,counts,drawcount){GLctx.multiDrawWebgl["multiDrawArraysWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,drawcount)}Module["_emscripten_glMultiDrawArraysWEBGL"]=_emscripten_glMultiDrawArraysWEBGL;_emscripten_glMultiDrawArraysWEBGL.sig="viiii";function _emscripten_glMultiDrawArraysInstancedANGLE(mode,firsts,counts,instanceCounts,drawcount){GLctx.multiDrawWebgl["multiDrawArraysInstancedWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,HEAP32,instanceCounts>>2,drawcount)}Module["_emscripten_glMultiDrawArraysInstancedANGLE"]=_emscripten_glMultiDrawArraysInstancedANGLE;_emscripten_glMultiDrawArraysInstancedANGLE.sig="viiiii";function _emscripten_glMultiDrawArraysInstancedWEBGL(mode,firsts,counts,instanceCounts,drawcount){GLctx.multiDrawWebgl["multiDrawArraysInstancedWEBGL"](mode,HEAP32,firsts>>2,HEAP32,counts>>2,HEAP32,instanceCounts>>2,drawcount)}Module["_emscripten_glMultiDrawArraysInstancedWEBGL"]=_emscripten_glMultiDrawArraysInstancedWEBGL;_emscripten_glMultiDrawArraysInstancedWEBGL.sig="viiiii";function _emscripten_glMultiDrawElements(mode,counts,type,offsets,drawcount){GLctx.multiDrawWebgl["multiDrawElementsWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,drawcount)}Module["_emscripten_glMultiDrawElements"]=_emscripten_glMultiDrawElements;_emscripten_glMultiDrawElements.sig="viiiii";function _emscripten_glMultiDrawElementsANGLE(mode,counts,type,offsets,drawcount){GLctx.multiDrawWebgl["multiDrawElementsWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,drawcount)}Module["_emscripten_glMultiDrawElementsANGLE"]=_emscripten_glMultiDrawElementsANGLE;_emscripten_glMultiDrawElementsANGLE.sig="viiiii";function _emscripten_glMultiDrawElementsWEBGL(mode,counts,type,offsets,drawcount){GLctx.multiDrawWebgl["multiDrawElementsWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,drawcount)}Module["_emscripten_glMultiDrawElementsWEBGL"]=_emscripten_glMultiDrawElementsWEBGL;_emscripten_glMultiDrawElementsWEBGL.sig="viiiii";function _emscripten_glMultiDrawElementsInstancedANGLE(mode,counts,type,offsets,instanceCounts,drawcount){GLctx.multiDrawWebgl["multiDrawElementsInstancedWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,HEAP32,instanceCounts>>2,drawcount)}Module["_emscripten_glMultiDrawElementsInstancedANGLE"]=_emscripten_glMultiDrawElementsInstancedANGLE;_emscripten_glMultiDrawElementsInstancedANGLE.sig="viiiiii";function _emscripten_glMultiDrawElementsInstancedWEBGL(mode,counts,type,offsets,instanceCounts,drawcount){GLctx.multiDrawWebgl["multiDrawElementsInstancedWEBGL"](mode,HEAP32,counts>>2,type,HEAP32,offsets>>2,HEAP32,instanceCounts>>2,drawcount)}Module["_emscripten_glMultiDrawElementsInstancedWEBGL"]=_emscripten_glMultiDrawElementsInstancedWEBGL;_emscripten_glMultiDrawElementsInstancedWEBGL.sig="viiiiii";function _emscripten_glClearDepth(x0){GLctx["clearDepth"](x0)}Module["_emscripten_glClearDepth"]=_emscripten_glClearDepth;_emscripten_glClearDepth.sig="vi";function _emscripten_glDepthRange(x0,x1){GLctx["depthRange"](x0,x1)}Module["_emscripten_glDepthRange"]=_emscripten_glDepthRange;_emscripten_glDepthRange.sig="vii";function writeGLArray(arr,dst,dstLength,heapType){var len=arr.length;var writeLength=dstLength>2)+i]=arr[i]}return len}Module["writeGLArray"]=writeGLArray;function _emscripten_webgl_init_context_attributes(attributes){var a=attributes>>2;for(var i=0;i<56>>2;++i){HEAP32[a+i]=0}HEAP32[a+(0>>2)]=HEAP32[a+(4>>2)]=HEAP32[a+(12>>2)]=HEAP32[a+(16>>2)]=HEAP32[a+(32>>2)]=HEAP32[a+(40>>2)]=1}Module["_emscripten_webgl_init_context_attributes"]=_emscripten_webgl_init_context_attributes;var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];Module["__emscripten_webgl_power_preferences"]=__emscripten_webgl_power_preferences;function _emscripten_webgl_do_create_context(target,attributes){var a=attributes>>2;var powerPreference=HEAP32[a+(24>>2)];var contextAttributes={"alpha":!!HEAP32[a+(0>>2)],"depth":!!HEAP32[a+(4>>2)],"stencil":!!HEAP32[a+(8>>2)],"antialias":!!HEAP32[a+(12>>2)],"premultipliedAlpha":!!HEAP32[a+(16>>2)],"preserveDrawingBuffer":!!HEAP32[a+(20>>2)],"powerPreference":__emscripten_webgl_power_preferences[powerPreference],"failIfMajorPerformanceCaveat":!!HEAP32[a+(28>>2)],majorVersion:HEAP32[a+(32>>2)],minorVersion:HEAP32[a+(36>>2)],enableExtensionsByDefault:HEAP32[a+(40>>2)],explicitSwapControl:HEAP32[a+(44>>2)],proxyContextToMainThread:HEAP32[a+(48>>2)],renderViaOffscreenBackBuffer:HEAP32[a+(52>>2)]};var canvas=findCanvasEventTarget(target);if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}Module["_emscripten_webgl_do_create_context"]=_emscripten_webgl_do_create_context;_emscripten_webgl_do_create_context.sig="iii";function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}Module["_emscripten_webgl_create_context"]=_emscripten_webgl_create_context;_emscripten_webgl_create_context.sig="iii";function _emscripten_webgl_do_get_current_context(){return GL.currentContext?GL.currentContext.handle:0}Module["_emscripten_webgl_do_get_current_context"]=_emscripten_webgl_do_get_current_context;_emscripten_webgl_do_get_current_context.sig="i";function _emscripten_webgl_get_current_context(){return _emscripten_webgl_do_get_current_context()}Module["_emscripten_webgl_get_current_context"]=_emscripten_webgl_get_current_context;_emscripten_webgl_get_current_context.sig="i";function _emscripten_webgl_do_commit_frame(){if(!GL.currentContext||!GL.currentContext.GLctx){return-3}if(!GL.currentContext.attributes.explicitSwapControl){return-3}return 0}Module["_emscripten_webgl_do_commit_frame"]=_emscripten_webgl_do_commit_frame;_emscripten_webgl_do_commit_frame.sig="i";function _emscripten_webgl_commit_frame(){return _emscripten_webgl_do_commit_frame()}Module["_emscripten_webgl_commit_frame"]=_emscripten_webgl_commit_frame;_emscripten_webgl_commit_frame.sig="i";function _emscripten_webgl_make_context_current(contextHandle){var success=GL.makeContextCurrent(contextHandle);return success?0:-5}Module["_emscripten_webgl_make_context_current"]=_emscripten_webgl_make_context_current;function _emscripten_webgl_get_drawing_buffer_size(contextHandle,width,height){var GLContext=GL.getContext(contextHandle);if(!GLContext||!GLContext.GLctx||!width||!height){return-5}HEAP32[width>>2]=GLContext.GLctx.drawingBufferWidth;HEAP32[height>>2]=GLContext.GLctx.drawingBufferHeight;return 0}Module["_emscripten_webgl_get_drawing_buffer_size"]=_emscripten_webgl_get_drawing_buffer_size;_emscripten_webgl_get_drawing_buffer_size.sig="iiii";function _emscripten_webgl_get_context_attributes(c,a){if(!a)return-5;c=GL.contexts[c];if(!c)return-3;var t=c.GLctx;if(!t)return-3;t=t.getContextAttributes();HEAP32[a>>2]=t.alpha;HEAP32[a+4>>2]=t.depth;HEAP32[a+8>>2]=t.stencil;HEAP32[a+12>>2]=t.antialias;HEAP32[a+16>>2]=t.premultipliedAlpha;HEAP32[a+20>>2]=t.preserveDrawingBuffer;var power=t["powerPreference"]&&__emscripten_webgl_power_preferences.indexOf(t["powerPreference"]);HEAP32[a+24>>2]=power;HEAP32[a+28>>2]=t.failIfMajorPerformanceCaveat;HEAP32[a+32>>2]=c.version;HEAP32[a+36>>2]=0;HEAP32[a+40>>2]=c.attributes.enableExtensionsByDefault;return 0}Module["_emscripten_webgl_get_context_attributes"]=_emscripten_webgl_get_context_attributes;_emscripten_webgl_get_context_attributes.sig="iii";function _emscripten_webgl_destroy_context(contextHandle){if(GL.currentContext==contextHandle)GL.currentContext=0;GL.deleteContext(contextHandle)}Module["_emscripten_webgl_destroy_context"]=_emscripten_webgl_destroy_context;_emscripten_webgl_destroy_context.sig="vi";function _emscripten_webgl_destroy_context_before_on_calling_thread(contextHandle){if(_emscripten_webgl_get_current_context()==contextHandle)_emscripten_webgl_make_context_current(0)}Module["_emscripten_webgl_destroy_context_before_on_calling_thread"]=_emscripten_webgl_destroy_context_before_on_calling_thread;function _emscripten_webgl_enable_extension(contextHandle,extension){var context=GL.getContext(contextHandle);var extString=UTF8ToString(extension);if(extString.startsWith("GL_"))extString=extString.substr(3);if(extString=="ANGLE_instanced_arrays")__webgl_enable_ANGLE_instanced_arrays(GLctx);if(extString=="OES_vertex_array_object")__webgl_enable_OES_vertex_array_object(GLctx);if(extString=="WEBGL_draw_buffers")__webgl_enable_WEBGL_draw_buffers(GLctx);if(extString=="WEBGL_multi_draw")__webgl_enable_WEBGL_multi_draw(GLctx);var ext=context.GLctx.getExtension(extString);return!!ext}Module["_emscripten_webgl_enable_extension"]=_emscripten_webgl_enable_extension;_emscripten_webgl_enable_extension.sig="iii";function _emscripten_supports_offscreencanvas(){return 0}Module["_emscripten_supports_offscreencanvas"]=_emscripten_supports_offscreencanvas;function __registerWebGlEventCallback(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread){var webGlEventHandlerFunc=function(ev){var e=ev||event;if(wasmTable.get(callbackfunc)(eventTypeId,0,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:webGlEventHandlerFunc,useCapture:useCapture};JSEvents.registerOrRemoveHandler(eventHandler)}Module["__registerWebGlEventCallback"]=__registerWebGlEventCallback;function _emscripten_set_webglcontextlost_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerWebGlEventCallback(target,userData,useCapture,callbackfunc,31,"webglcontextlost",targetThread);return 0}Module["_emscripten_set_webglcontextlost_callback_on_thread"]=_emscripten_set_webglcontextlost_callback_on_thread;_emscripten_set_webglcontextlost_callback_on_thread.sig="iiiiii";function _emscripten_set_webglcontextrestored_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){__registerWebGlEventCallback(target,userData,useCapture,callbackfunc,32,"webglcontextrestored",targetThread);return 0}Module["_emscripten_set_webglcontextrestored_callback_on_thread"]=_emscripten_set_webglcontextrestored_callback_on_thread;_emscripten_set_webglcontextrestored_callback_on_thread.sig="iiiiii";function _emscripten_is_webgl_context_lost(contextHandle){return!GL.contexts[contextHandle]||GL.contexts[contextHandle].GLctx.isContextLost()}Module["_emscripten_is_webgl_context_lost"]=_emscripten_is_webgl_context_lost;_emscripten_is_webgl_context_lost.sig="ii";function _emscripten_webgl_get_supported_extensions(){return stringToNewUTF8(GLctx.getSupportedExtensions().join(" "))}Module["_emscripten_webgl_get_supported_extensions"]=_emscripten_webgl_get_supported_extensions;_emscripten_webgl_get_supported_extensions.sig="i";function _emscripten_webgl_get_program_parameter_d(program,param){return GLctx.getProgramParameter(GL.programs[program],param)}Module["_emscripten_webgl_get_program_parameter_d"]=_emscripten_webgl_get_program_parameter_d;_emscripten_webgl_get_program_parameter_d.sig="fii";function _emscripten_webgl_get_program_info_log_utf8(program){return stringToNewUTF8(GLctx.getProgramInfoLog(GL.programs[program]))}Module["_emscripten_webgl_get_program_info_log_utf8"]=_emscripten_webgl_get_program_info_log_utf8;_emscripten_webgl_get_program_info_log_utf8.sig="ii";function _emscripten_webgl_get_shader_parameter_d(shader,param){return GLctx.getShaderParameter(GL.shaders[shader],param)}Module["_emscripten_webgl_get_shader_parameter_d"]=_emscripten_webgl_get_shader_parameter_d;_emscripten_webgl_get_shader_parameter_d.sig="fii";function _emscripten_webgl_get_shader_info_log_utf8(shader){return stringToNewUTF8(GLctx.getShaderInfoLog(GL.shaders[shader]))}Module["_emscripten_webgl_get_shader_info_log_utf8"]=_emscripten_webgl_get_shader_info_log_utf8;_emscripten_webgl_get_shader_info_log_utf8.sig="ii";function _emscripten_webgl_get_shader_source_utf8(shader){return stringToNewUTF8(GLctx.getShaderSource(GL.shaders[shader]))}Module["_emscripten_webgl_get_shader_source_utf8"]=_emscripten_webgl_get_shader_source_utf8;_emscripten_webgl_get_shader_source_utf8.sig="ii";function _emscripten_webgl_get_vertex_attrib_d(index,param){return GLctx.getVertexAttrib(index,param)}Module["_emscripten_webgl_get_vertex_attrib_d"]=_emscripten_webgl_get_vertex_attrib_d;_emscripten_webgl_get_vertex_attrib_d.sig="iii";function _emscripten_webgl_get_vertex_attrib_o(index,param){var obj=GLctx.getVertexAttrib(index,param);return obj&&obj.name}Module["_emscripten_webgl_get_vertex_attrib_o"]=_emscripten_webgl_get_vertex_attrib_o;_emscripten_webgl_get_vertex_attrib_o.sig="iii";function _emscripten_webgl_get_vertex_attrib_v(index,param,dst,dstLength,dstType){return writeGLArray(GLctx.getVertexAttrib(index,param),dst,dstLength,dstType)}Module["_emscripten_webgl_get_vertex_attrib_v"]=_emscripten_webgl_get_vertex_attrib_v;_emscripten_webgl_get_vertex_attrib_v.sig="iiiiii";function _emscripten_webgl_get_uniform_d(program,location){return GLctx.getUniform(GL.programs[program],webglGetUniformLocation(location))}Module["_emscripten_webgl_get_uniform_d"]=_emscripten_webgl_get_uniform_d;_emscripten_webgl_get_uniform_d.sig="fii";function _emscripten_webgl_get_uniform_v(program,location,dst,dstLength,dstType){return writeGLArray(GLctx.getUniform(GL.programs[program],webglGetUniformLocation(location)),dst,dstLength,dstType)}Module["_emscripten_webgl_get_uniform_v"]=_emscripten_webgl_get_uniform_v;_emscripten_webgl_get_uniform_v.sig="iiiiii";function _emscripten_webgl_get_parameter_v(param,dst,dstLength,dstType){return writeGLArray(GLctx.getParameter(param),dst,dstLength,dstType)}Module["_emscripten_webgl_get_parameter_v"]=_emscripten_webgl_get_parameter_v;_emscripten_webgl_get_parameter_v.sig="iiiii";function _emscripten_webgl_get_parameter_d(param){return GLctx.getParameter(param)}Module["_emscripten_webgl_get_parameter_d"]=_emscripten_webgl_get_parameter_d;_emscripten_webgl_get_parameter_d.sig="fi";function _emscripten_webgl_get_parameter_o(param){var obj=GLctx.getParameter(param);return obj&&obj.name}Module["_emscripten_webgl_get_parameter_o"]=_emscripten_webgl_get_parameter_o;_emscripten_webgl_get_parameter_o.sig="ii";function _emscripten_webgl_get_parameter_utf8(param){return stringToNewUTF8(GLctx.getParameter(param))}Module["_emscripten_webgl_get_parameter_utf8"]=_emscripten_webgl_get_parameter_utf8;_emscripten_webgl_get_parameter_utf8.sig="ii";function _emscripten_webgl_get_parameter_i64v(param,dst){writeI53ToI64(dst,GLctx.getParameter(param))}Module["_emscripten_webgl_get_parameter_i64v"]=_emscripten_webgl_get_parameter_i64v;_emscripten_webgl_get_parameter_i64v.sig="vii";function _SDL_GetTicks(){return Date.now()-SDL.startTime|0}Module["_SDL_GetTicks"]=_SDL_GetTicks;_SDL_GetTicks.sig="i";function _SDL_LockSurface(surf){var surfData=SDL.surfaces[surf];surfData.locked++;if(surfData.locked>1)return 0;if(!surfData.buffer){surfData.buffer=_malloc(surfData.width*surfData.height*4);HEAP32[surf+20>>2]=surfData.buffer}HEAP32[surf+20>>2]=surfData.buffer;if(surf==SDL.screen&&Module.screenIsReadOnly&&surfData.image)return 0;if(SDL.defaults.discardOnLock){if(!surfData.image){surfData.image=surfData.ctx.createImageData(surfData.width,surfData.height)}if(!SDL.defaults.opaqueFrontBuffer)return}else{surfData.image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height)}if(surf==SDL.screen&&SDL.defaults.opaqueFrontBuffer){var data=surfData.image.data;var num=data.length;for(var i=0;i>2],y:HEAP32[rect+4>>2],w:HEAP32[rect+8>>2],h:HEAP32[rect+12>>2]}},updateRect:function(rect,r){HEAP32[rect>>2]=r.x;HEAP32[rect+4>>2]=r.y;HEAP32[rect+8>>2]=r.w;HEAP32[rect+12>>2]=r.h},intersectionOfRects:function(first,second){var leftX=Math.max(first.x,second.x);var leftY=Math.max(first.y,second.y);var rightX=Math.min(first.x+first.w,second.x+second.w);var rightY=Math.min(first.y+first.h,second.y+second.h);return{x:leftX,y:leftY,w:Math.max(leftX,rightX)-leftX,h:Math.max(leftY,rightY)-leftY}},checkPixelFormat:function(fmt){},loadColorToCSSRGB:function(color){var rgba=HEAP32[color>>2];return"rgb("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+")"},loadColorToCSSRGBA:function(color){var rgba=HEAP32[color>>2];return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>24&255)/255+")"},translateColorToCSSRGBA:function(rgba){return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>>24)/255+")"},translateRGBAToCSSRGBA:function(r,g,b,a){return"rgba("+(r&255)+","+(g&255)+","+(b&255)+","+(a&255)/255+")"},translateRGBAToColor:function(r,g,b,a){return r|g<<8|b<<16|a<<24},makeSurface:function(width,height,flags,usePageCanvas,source,rmask,gmask,bmask,amask){flags=flags||0;var is_SDL_HWSURFACE=flags&1;var is_SDL_HWPALETTE=flags&2097152;var is_SDL_OPENGL=flags&67108864;var surf=_malloc(60);var pixelFormat=_malloc(44);var bpp=is_SDL_HWPALETTE?1:4;var buffer=0;if(!is_SDL_HWSURFACE&&!is_SDL_OPENGL){buffer=_malloc(width*height*4)}HEAP32[surf>>2]=flags;HEAP32[surf+4>>2]=pixelFormat;HEAP32[surf+8>>2]=width;HEAP32[surf+12>>2]=height;HEAP32[surf+16>>2]=width*bpp;HEAP32[surf+20>>2]=buffer;HEAP32[surf+36>>2]=0;HEAP32[surf+40>>2]=0;HEAP32[surf+44>>2]=Module["canvas"].width;HEAP32[surf+48>>2]=Module["canvas"].height;HEAP32[surf+56>>2]=1;HEAP32[pixelFormat>>2]=-2042224636;HEAP32[pixelFormat+4>>2]=0;HEAP8[pixelFormat+8>>0]=bpp*8;HEAP8[pixelFormat+9>>0]=bpp;HEAP32[pixelFormat+12>>2]=rmask||255;HEAP32[pixelFormat+16>>2]=gmask||65280;HEAP32[pixelFormat+20>>2]=bmask||16711680;HEAP32[pixelFormat+24>>2]=amask||4278190080;SDL.GL=SDL.GL||is_SDL_OPENGL;var canvas;if(!usePageCanvas){if(SDL.canvasPool.length>0){canvas=SDL.canvasPool.pop()}else{canvas=document.createElement("canvas")}canvas.width=width;canvas.height=height}else{canvas=Module["canvas"]}var webGLContextAttributes={antialias:SDL.glAttributes[13]!=0&&SDL.glAttributes[14]>1,depth:SDL.glAttributes[6]>0,stencil:SDL.glAttributes[7]>0,alpha:SDL.glAttributes[3]>0};var ctx=Browser.createContext(canvas,is_SDL_OPENGL,usePageCanvas,webGLContextAttributes);SDL.surfaces[surf]={width:width,height:height,canvas:canvas,ctx:ctx,surf:surf,buffer:buffer,pixelFormat:pixelFormat,alpha:255,flags:flags,locked:0,usePageCanvas:usePageCanvas,source:source,isFlagSet:function(flag){return flags&flag}};return surf},copyIndexedColorData:function(surfData,rX,rY,rW,rH){if(!surfData.colors){return}var fullWidth=Module["canvas"].width;var fullHeight=Module["canvas"].height;var startX=rX||0;var startY=rY||0;var endX=(rW||fullWidth-startX)+startX;var endY=(rH||fullHeight-startY)+startY;var buffer=surfData.buffer;if(!surfData.image.data32){surfData.image.data32=new Uint32Array(surfData.image.data.buffer)}var data32=surfData.image.data32;var colors32=surfData.colors32;for(var y=startY;y>0]]}}},freeSurface:function(surf){var refcountPointer=surf+56;var refcount=HEAP32[refcountPointer>>2];if(refcount>1){HEAP32[refcountPointer>>2]=refcount-1;return}var info=SDL.surfaces[surf];if(!info.usePageCanvas&&info.canvas)SDL.canvasPool.push(info.canvas);if(info.buffer)_free(info.buffer);_free(info.pixelFormat);_free(surf);SDL.surfaces[surf]=null;if(surf===SDL.screen){SDL.screen=null}},blitSurface:function(src,srcrect,dst,dstrect,scale){var srcData=SDL.surfaces[src];var dstData=SDL.surfaces[dst];var sr,dr;if(srcrect){sr=SDL.loadRect(srcrect)}else{sr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstrect){dr=SDL.loadRect(dstrect)}else{dr={x:0,y:0,w:srcData.width,h:srcData.height}}if(dstData.clipRect){var widthScale=!scale||sr.w===0?1:sr.w/dr.w;var heightScale=!scale||sr.h===0?1:sr.h/dr.h;dr=SDL.intersectionOfRects(dstData.clipRect,dr);sr.w=dr.w*widthScale;sr.h=dr.h*heightScale;if(dstrect){SDL.updateRect(dstrect,dr)}}var blitw,blith;if(scale){blitw=dr.w;blith=dr.h}else{blitw=sr.w;blith=sr.h}if(sr.w===0||sr.h===0||blitw===0||blith===0){return 0}var oldAlpha=dstData.ctx.globalAlpha;dstData.ctx.globalAlpha=srcData.alpha/255;dstData.ctx.drawImage(srcData.canvas,sr.x,sr.y,sr.w,sr.h,dr.x,dr.y,blitw,blith);dstData.ctx.globalAlpha=oldAlpha;if(dst!=SDL.screen){warnOnce("WARNING: copying canvas data to memory for compatibility");_SDL_LockSurface(dst);dstData.locked--}return 0},downFingers:{},savedKeydown:null,receiveEvent:function(event){function unpressAllPressedKeys(){for(var code in SDL.keyboardMap){SDL.events.push({type:"keyup",keyCode:SDL.keyboardMap[code]})}}switch(event.type){case"touchstart":case"touchmove":{event.preventDefault();var touches=[];if(event.type==="touchstart"){for(var i=0;i0?Math.max(delta,1):Math.min(delta,-1);var button=delta>0?3:4;SDL.events.push({type:"mousedown",button:button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"mouseup",button:button,pageX:event.pageX,pageY:event.pageY});SDL.events.push({type:"wheel",deltaX:0,deltaY:delta});event.preventDefault();break;case"mousemove":if(SDL.DOMButtons[0]===1){SDL.events.push({type:"touchmove",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}if(Browser.pointerLock){if("mozMovementX"in event){event["movementX"]=event["mozMovementX"];event["movementY"]=event["mozMovementY"]}if(event["movementX"]==0&&event["movementY"]==0){event.preventDefault();return}}case"keydown":case"keyup":case"keypress":case"mousedown":case"mouseup":if(event.type!=="keydown"||!SDL_unicode()&&!SDL.textInput||(event.keyCode===8||event.keyCode===9)){event.preventDefault()}if(event.type=="mousedown"){SDL.DOMButtons[event.button]=1;SDL.events.push({type:"touchstart",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}else if(event.type=="mouseup"){if(!SDL.DOMButtons[event.button]){return}SDL.events.push({type:"touchend",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}});SDL.DOMButtons[event.button]=0}if(event.type==="keydown"||event.type==="mousedown"){SDL.canRequestFullscreen=true}else if(event.type==="keyup"||event.type==="mouseup"){if(SDL.isRequestingFullscreen){Module["requestFullscreen"](true,true);SDL.isRequestingFullscreen=false}SDL.canRequestFullscreen=false}if(event.type==="keypress"&&SDL.savedKeydown){SDL.savedKeydown.keypressCharCode=event.charCode;SDL.savedKeydown=null}else if(event.type==="keydown"){SDL.savedKeydown=event}if(event.type!=="keypress"||SDL.textInput){SDL.events.push(event)}break;case"mouseout":for(var i=0;i<3;i++){if(SDL.DOMButtons[i]){SDL.events.push({type:"mouseup",button:i,pageX:event.pageX,pageY:event.pageY});SDL.DOMButtons[i]=0}}event.preventDefault();break;case"focus":SDL.events.push(event);event.preventDefault();break;case"blur":SDL.events.push(event);unpressAllPressedKeys();event.preventDefault();break;case"visibilitychange":SDL.events.push({type:"visibilitychange",visible:!document.hidden});unpressAllPressedKeys();event.preventDefault();break;case"unload":if(Browser.mainLoop.runner){SDL.events.push(event);Browser.mainLoop.runner()}return;case"resize":SDL.events.push(event);if(event.preventDefault){event.preventDefault()}break}if(SDL.events.length>=1e4){err("SDL event queue full, dropping events");SDL.events=SDL.events.slice(0,1e4)}SDL.flushEventsToHandler();return},lookupKeyCodeForEvent:function(event){var code=event.keyCode;if(code>=65&&code<=90){code+=32}else{code=SDL.keyCodes[event.keyCode]||event.keyCode;if(event.location===2&&code>=(224|1<<10)&&code<=(227|1<<10)){code+=4}}return code},handleEvent:function(event){if(event.handled)return;event.handled=true;switch(event.type){case"touchstart":case"touchend":case"touchmove":{Browser.calculateMouseEvent(event);break}case"keydown":case"keyup":{var down=event.type==="keydown";var code=SDL.lookupKeyCodeForEvent(event);HEAP8[SDL.keyboardState+code>>0]=down;SDL.modState=(HEAP8[SDL.keyboardState+1248>>0]?64:0)|(HEAP8[SDL.keyboardState+1249>>0]?1:0)|(HEAP8[SDL.keyboardState+1250>>0]?256:0)|(HEAP8[SDL.keyboardState+1252>>0]?128:0)|(HEAP8[SDL.keyboardState+1253>>0]?2:0)|(HEAP8[SDL.keyboardState+1254>>0]?512:0);if(down){SDL.keyboardMap[code]=event.keyCode}else{delete SDL.keyboardMap[code]}break}case"mousedown":case"mouseup":if(event.type=="mousedown"){SDL.buttonState|=1<0){if(SDL.makeCEvent(SDL.events.shift(),ptr)!==false)return 1}return 0}else{return SDL.events.length>0}},makeCEvent:function(event,ptr){if(typeof event==="number"){_memcpy(ptr,event,28);_free(event);return}SDL.handleEvent(event);switch(event.type){case"keydown":case"keyup":{var down=event.type==="keydown";var key=SDL.lookupKeyCodeForEvent(event);var scan;if(key>=1024){scan=key-1024}else{scan=SDL.scanCodes[key]||key}HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+8>>0]=down?1:0;HEAP8[ptr+9>>0]=0;HEAP32[ptr+12>>2]=scan;HEAP32[ptr+16>>2]=key;HEAP16[ptr+20>>1]=SDL.modState;HEAP32[ptr+24>>2]=event.keypressCharCode||key;break}case"keypress":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];var cStr=intArrayFromString(String.fromCharCode(event.charCode));for(var i=0;i>0]=cStr[i]}break}case"mousedown":case"mouseup":case"mousemove":{if(event.type!="mousemove"){var down=event.type==="mousedown";HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP8[ptr+16>>0]=event.button+1;HEAP8[ptr+17>>0]=down?1:0;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY}else{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP32[ptr+16>>2]=SDL.buttonState;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY;HEAP32[ptr+28>>2]=Browser.mouseMovementX;HEAP32[ptr+32>>2]=Browser.mouseMovementY}break}case"wheel":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+16>>2]=event.deltaX;HEAP32[ptr+20>>2]=event.deltaY;break}case"touchstart":case"touchend":case"touchmove":{var touch=event.touch;if(!Browser.touches[touch.identifier])break;var w=Module["canvas"].width;var h=Module["canvas"].height;var x=Browser.touches[touch.identifier].x/w;var y=Browser.touches[touch.identifier].y/h;var lx=Browser.lastTouches[touch.identifier].x/w;var ly=Browser.lastTouches[touch.identifier].y/h;var dx=x-lx;var dy=y-ly;if(touch["deviceID"]===undefined)touch.deviceID=SDL.TOUCH_DEFAULT_ID;if(dx===0&&dy===0&&event.type==="touchmove")return false;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=_SDL_GetTicks();tempI64=[touch.deviceID>>>0,(tempDouble=touch.deviceID,+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+8>>2]=tempI64[0],HEAP32[ptr+12>>2]=tempI64[1];tempI64=[touch.identifier>>>0,(tempDouble=touch.identifier,+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+16>>2]=tempI64[0],HEAP32[ptr+20>>2]=tempI64[1];HEAPF32[ptr+24>>2]=x;HEAPF32[ptr+28>>2]=y;HEAPF32[ptr+32>>2]=dx;HEAPF32[ptr+36>>2]=dy;if(touch.force!==undefined){HEAPF32[ptr+40>>2]=touch.force}else{HEAPF32[ptr+40>>2]=event.type=="touchend"?0:1}break}case"unload":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];break}case"resize":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=event.w;HEAP32[ptr+8>>2]=event.h;break}case"joystick_button_up":case"joystick_button_down":{var state=event.type==="joystick_button_up"?0:1;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>0]=event.index;HEAP8[ptr+5>>0]=event.button;HEAP8[ptr+6>>0]=state;break}case"joystick_axis_motion":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>0]=event.index;HEAP8[ptr+5>>0]=event.axis;HEAP32[ptr+8>>2]=SDL.joystickAxisValueConversion(event.value);break}case"focus":{var SDL_WINDOWEVENT_FOCUS_GAINED=12;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=SDL_WINDOWEVENT_FOCUS_GAINED;break}case"blur":{var SDL_WINDOWEVENT_FOCUS_LOST=13;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=SDL_WINDOWEVENT_FOCUS_LOST;break}case"visibilitychange":{var SDL_WINDOWEVENT_SHOWN=1;var SDL_WINDOWEVENT_HIDDEN=2;var visibilityEventID=event.visible?SDL_WINDOWEVENT_SHOWN:SDL_WINDOWEVENT_HIDDEN;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=visibilityEventID;break}default:throw"Unhandled SDL event: "+event.type}},makeFontString:function(height,fontName){if(fontName.charAt(0)!="'"&&fontName.charAt(0)!='"'){fontName='"'+fontName+'"'}return height+"px "+fontName+", serif"},estimateTextWidth:function(fontData,text){var h=fontData.size;var fontString=SDL.makeFontString(h,fontData.name);var tempCtx=SDL_ttfContext();tempCtx.font=fontString;var ret=tempCtx.measureText(text).width|0;return ret},allocateChannels:function(num){if(SDL.numChannels&&SDL.numChannels>=num&&num!=0)return;SDL.numChannels=num;SDL.channels=[];for(var i=0;i>1]/32768}}else if(audio.format==8){for(var j=0;j>0];channelData[j]=(v>=0?v-128:v+128)/128}}else if(audio.format==33056){for(var j=0;j>2]}}else{throw"Invalid SDL audio format "+audio.format+"!"}}},debugSurface:function(surfData){out("dumping surface "+[surfData.surf,surfData.source,surfData.width,surfData.height]);var image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height);var data=image.data;var num=Math.min(surfData.width,surfData.height);for(var i=0;i0}},queryJoysticks:function(){for(var joystick in SDL.lastJoystickState){var state=SDL.getGamepad(joystick-1);var prevState=SDL.lastJoystickState[joystick];if(typeof state==="undefined")return;if(state===null)return;if(typeof state.timestamp!=="number"||state.timestamp!==prevState.timestamp||!state.timestamp){var i;for(i=0;ideviceIndex&&deviceIndex>=0){return gamepads[deviceIndex]}return null}};Module["SDL"]=SDL;function SDL_unicode(){return SDL.unicode}Module["SDL_unicode"]=SDL_unicode;function _SDL_Linked_Version(){if(SDL.version===null){SDL.version=_malloc(3);HEAP8[SDL.version+0>>0]=1;HEAP8[SDL.version+1>>0]=3;HEAP8[SDL.version+2>>0]=0}return SDL.version}Module["_SDL_Linked_Version"]=_SDL_Linked_Version;_SDL_Linked_Version.sig="i";function _SDL_Init(initFlags){SDL.startTime=Date.now();SDL.initFlags=initFlags;if(!Module["doNotCaptureKeyboard"]){var keyboardListeningElement=Module["keyboardListeningElement"]||document;keyboardListeningElement.addEventListener("keydown",SDL.receiveEvent);keyboardListeningElement.addEventListener("keyup",SDL.receiveEvent);keyboardListeningElement.addEventListener("keypress",SDL.receiveEvent);window.addEventListener("focus",SDL.receiveEvent);window.addEventListener("blur",SDL.receiveEvent);document.addEventListener("visibilitychange",SDL.receiveEvent)}window.addEventListener("unload",SDL.receiveEvent);SDL.keyboardState=_malloc(65536);zeroMemory(SDL.keyboardState,65536);SDL.DOMEventToSDLEvent["keydown"]=768;SDL.DOMEventToSDLEvent["keyup"]=769;SDL.DOMEventToSDLEvent["keypress"]=771;SDL.DOMEventToSDLEvent["mousedown"]=1025;SDL.DOMEventToSDLEvent["mouseup"]=1026;SDL.DOMEventToSDLEvent["mousemove"]=1024;SDL.DOMEventToSDLEvent["wheel"]=1027;SDL.DOMEventToSDLEvent["touchstart"]=1792;SDL.DOMEventToSDLEvent["touchend"]=1793;SDL.DOMEventToSDLEvent["touchmove"]=1794;SDL.DOMEventToSDLEvent["unload"]=256;SDL.DOMEventToSDLEvent["resize"]=28673;SDL.DOMEventToSDLEvent["visibilitychange"]=512;SDL.DOMEventToSDLEvent["focus"]=512;SDL.DOMEventToSDLEvent["blur"]=512;SDL.DOMEventToSDLEvent["joystick_axis_motion"]=1536;SDL.DOMEventToSDLEvent["joystick_button_down"]=1539;SDL.DOMEventToSDLEvent["joystick_button_up"]=1540;return 0}Module["_SDL_Init"]=_SDL_Init;_SDL_Init.sig="ii";function _SDL_WasInit(){if(SDL.startTime===null){_SDL_Init()}return 1}Module["_SDL_WasInit"]=_SDL_WasInit;_SDL_WasInit.sig="i";function _SDL_GetVideoInfo(){var ret=_malloc(5*4);HEAP32[ret+0>>2]=0;HEAP32[ret+4>>2]=0;HEAP32[ret+8>>2]=0;HEAP32[ret+12>>2]=Module["canvas"].width;HEAP32[ret+16>>2]=Module["canvas"].height;return ret}Module["_SDL_GetVideoInfo"]=_SDL_GetVideoInfo;_SDL_GetVideoInfo.sig="i";function _SDL_ListModes(format,flags){return-1}Module["_SDL_ListModes"]=_SDL_ListModes;function _SDL_VideoModeOK(width,height,depth,flags){return depth}Module["_SDL_VideoModeOK"]=_SDL_VideoModeOK;function _SDL_VideoDriverName(buf,max_size){if(SDL.startTime===null){return 0}var driverName=[101,109,115,99,114,105,112,116,101,110,95,115,100,108,95,100,114,105,118,101,114];var index=0;var size=driverName.length;if(max_size<=size){size=max_size-1}while(index>0]=value;index++}HEAP8[buf+index>>0]=0;return buf}Module["_SDL_VideoDriverName"]=_SDL_VideoDriverName;_SDL_VideoDriverName.sig="iii";function _SDL_AudioDriverName(buf,max_size){return _SDL_VideoDriverName(buf,max_size)}Module["_SDL_AudioDriverName"]=_SDL_AudioDriverName;function _SDL_SetVideoMode(width,height,depth,flags){["touchstart","touchend","touchmove","mousedown","mouseup","mousemove","DOMMouseScroll","mousewheel","wheel","mouseout"].forEach(function(event){Module["canvas"].addEventListener(event,SDL.receiveEvent,true)});var canvas=Module["canvas"];if(width==0&&height==0){width=canvas.width;height=canvas.height}if(!SDL.addedResizeListener){SDL.addedResizeListener=true;Browser.resizeListeners.push(function(w,h){if(!SDL.settingVideoMode){SDL.receiveEvent({type:"resize",w:w,h:h})}})}SDL.settingVideoMode=true;Browser.setCanvasSize(width,height);SDL.settingVideoMode=false;if(SDL.screen){SDL.freeSurface(SDL.screen);assert(!SDL.screen)}if(SDL.GL)flags=flags|67108864;SDL.screen=SDL.makeSurface(width,height,flags,true,"screen");return SDL.screen}Module["_SDL_SetVideoMode"]=_SDL_SetVideoMode;_SDL_SetVideoMode.sig="iiiii";function _SDL_GetVideoSurface(){return SDL.screen}Module["_SDL_GetVideoSurface"]=_SDL_GetVideoSurface;_SDL_GetVideoSurface.sig="i";function _SDL_AudioQuit(){for(var i=0;i0){return}if(surfData.isFlagSet(2097152)){SDL.copyIndexedColorData(surfData)}else if(!surfData.colors){var data=surfData.image.data;var buffer=surfData.buffer;assert(buffer%4==0,"Invalid buffer offset: "+buffer);var src=buffer>>2;var dst=0;var isScreen=surf==SDL.screen;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=isScreen?255:val>>24&255;src++;dst+=4}}else{var data32=new Uint32Array(data.buffer);if(isScreen&&SDL.defaults.opaqueFrontBuffer){num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=new Uint8Array(data.buffer);var i=3;var j=i+4*num;if(num%8==0){while(i>0]*4;var start=base+x*4;data[start]=colors[val];data[start+1]=colors[val+1];data[start+2]=colors[val+2]}s+=width*3}}surfData.ctx.putImageData(surfData.image,0,0)}Module["_SDL_UnlockSurface"]=_SDL_UnlockSurface;_SDL_UnlockSurface.sig="vi";function _SDL_Flip(surf){}Module["_SDL_Flip"]=_SDL_Flip;function _SDL_UpdateRect(surf,x,y,w,h){}Module["_SDL_UpdateRect"]=_SDL_UpdateRect;function _SDL_UpdateRects(surf,numrects,rects){}Module["_SDL_UpdateRects"]=_SDL_UpdateRects;function _SDL_Delay(delay){if(!ENVIRONMENT_IS_WORKER)abort("SDL_Delay called on the main thread! Potential infinite loop, quitting. (consider building with async support like ASYNCIFY)");var now=Date.now();while(Date.now()-now>2]=65536}return SDL.keyboardState}Module["_SDL_GetKeyboardState"]=_SDL_GetKeyboardState;_SDL_GetKeyboardState.sig="ii";function _SDL_GetKeyState(){return _SDL_GetKeyboardState()}Module["_SDL_GetKeyState"]=_SDL_GetKeyState;function _SDL_GetKeyName(key){if(!SDL.keyName){SDL.keyName=allocate(intArrayFromString("unknown key"),ALLOC_NORMAL)}return SDL.keyName}Module["_SDL_GetKeyName"]=_SDL_GetKeyName;_SDL_GetKeyName.sig="ii";function _SDL_GetModState(){return SDL.modState}Module["_SDL_GetModState"]=_SDL_GetModState;_SDL_GetModState.sig="i";function _SDL_GetMouseState(x,y){if(x)HEAP32[x>>2]=Browser.mouseX;if(y)HEAP32[y>>2]=Browser.mouseY;return SDL.buttonState}Module["_SDL_GetMouseState"]=_SDL_GetMouseState;_SDL_GetMouseState.sig="iii";function _SDL_WarpMouse(x,y){return}Module["_SDL_WarpMouse"]=_SDL_WarpMouse;_SDL_WarpMouse.sig="vii";function _SDL_ShowCursor(toggle){switch(toggle){case 0:if(Browser.isFullscreen){Module["canvas"].requestPointerLock();return 0}else{return 1}break;case 1:Module["canvas"].exitPointerLock();return 1;break;case-1:return!Browser.pointerLock;break;default:out("SDL_ShowCursor called with unknown toggle parameter value: "+toggle+".");break}}Module["_SDL_ShowCursor"]=_SDL_ShowCursor;_SDL_ShowCursor.sig="ii";function _SDL_GetError(){if(!SDL.errorMessage){SDL.errorMessage=allocate(intArrayFromString("unknown SDL-emscripten error"),ALLOC_NORMAL)}return SDL.errorMessage}Module["_SDL_GetError"]=_SDL_GetError;_SDL_GetError.sig="i";function _SDL_SetError(){}Module["_SDL_SetError"]=_SDL_SetError;function _SDL_malloc(size){return _malloc(size)}Module["_SDL_malloc"]=_SDL_malloc;_SDL_malloc.sig="ii";function _SDL_free(ptr){_free(ptr)}Module["_SDL_free"]=_SDL_free;_SDL_free.sig="vi";function _SDL_CreateRGBSurface(flags,width,height,depth,rmask,gmask,bmask,amask){return SDL.makeSurface(width,height,flags,false,"CreateRGBSurface",rmask,gmask,bmask,amask)}Module["_SDL_CreateRGBSurface"]=_SDL_CreateRGBSurface;_SDL_CreateRGBSurface.sig="iiiiiiiii";function _SDL_CreateRGBSurfaceFrom(pixels,width,height,depth,pitch,rmask,gmask,bmask,amask){var surf=SDL.makeSurface(width,height,0,false,"CreateRGBSurfaceFrom",rmask,gmask,bmask,amask);if(depth!==32){out("TODO: Partially unimplemented SDL_CreateRGBSurfaceFrom called!");return surf}var data=SDL.surfaces[surf];var image=data.ctx.createImageData(width,height);var pitchOfDst=width*4;for(var row=0;row>0]}}data.ctx.putImageData(image,0,0);return surf}Module["_SDL_CreateRGBSurfaceFrom"]=_SDL_CreateRGBSurfaceFrom;_SDL_CreateRGBSurfaceFrom.sig="iiiiiiiiii";function _SDL_ConvertSurface(surf,format,flags){if(format){SDL.checkPixelFormat(format)}var oldData=SDL.surfaces[surf];var ret=SDL.makeSurface(oldData.width,oldData.height,oldData.flags,false,"copy:"+oldData.source);var newData=SDL.surfaces[ret];newData.ctx.globalCompositeOperation="copy";newData.ctx.drawImage(oldData.canvas,0,0);newData.ctx.globalCompositeOperation=oldData.ctx.globalCompositeOperation;return ret}Module["_SDL_ConvertSurface"]=_SDL_ConvertSurface;_SDL_ConvertSurface.sig="iiii";function _SDL_DisplayFormatAlpha(surf){return _SDL_ConvertSurface(surf)}Module["_SDL_DisplayFormatAlpha"]=_SDL_DisplayFormatAlpha;function _SDL_FreeSurface(surf){if(surf)SDL.freeSurface(surf)}Module["_SDL_FreeSurface"]=_SDL_FreeSurface;_SDL_FreeSurface.sig="vi";function _SDL_UpperBlit(src,srcrect,dst,dstrect){return SDL.blitSurface(src,srcrect,dst,dstrect,false)}Module["_SDL_UpperBlit"]=_SDL_UpperBlit;_SDL_UpperBlit.sig="iiiii";function _SDL_UpperBlitScaled(src,srcrect,dst,dstrect){return SDL.blitSurface(src,srcrect,dst,dstrect,true)}Module["_SDL_UpperBlitScaled"]=_SDL_UpperBlitScaled;_SDL_UpperBlitScaled.sig="iiiii";function _SDL_LowerBlit(a0,a1,a2,a3){return _SDL_UpperBlit(a0,a1,a2,a3)}Module["_SDL_LowerBlit"]=_SDL_LowerBlit;_SDL_LowerBlit.sig="iiiii";function _SDL_LowerBlitScaled(a0,a1,a2,a3){return _SDL_UpperBlitScaled(a0,a1,a2,a3)}Module["_SDL_LowerBlitScaled"]=_SDL_LowerBlitScaled;_SDL_LowerBlitScaled.sig="iiiii";function _SDL_GetClipRect(surf,rect){assert(rect);var surfData=SDL.surfaces[surf];var r=surfData.clipRect||{x:0,y:0,w:surfData.width,h:surfData.height};SDL.updateRect(rect,r)}Module["_SDL_GetClipRect"]=_SDL_GetClipRect;_SDL_GetClipRect.sig="vii";function _SDL_SetClipRect(surf,rect){var surfData=SDL.surfaces[surf];if(rect){surfData.clipRect=SDL.intersectionOfRects({x:0,y:0,w:surfData.width,h:surfData.height},SDL.loadRect(rect))}else{delete surfData.clipRect}}Module["_SDL_SetClipRect"]=_SDL_SetClipRect;_SDL_SetClipRect.sig="vii";function _SDL_FillRect(surf,rect,color){var surfData=SDL.surfaces[surf];assert(!surfData.locked);if(surfData.isFlagSet(2097152)){color=surfData.colors32[color]}var r=rect?SDL.loadRect(rect):{x:0,y:0,w:surfData.width,h:surfData.height};if(surfData.clipRect){r=SDL.intersectionOfRects(surfData.clipRect,r);if(rect){SDL.updateRect(rect,r)}}surfData.ctx.save();surfData.ctx.fillStyle=SDL.translateColorToCSSRGBA(color);surfData.ctx.fillRect(r.x,r.y,r.w,r.h);surfData.ctx.restore();return 0}Module["_SDL_FillRect"]=_SDL_FillRect;_SDL_FillRect.sig="iiii";function _SDL_BlitSurface(src,srcrect,dst,dstrect){return SDL.blitSurface(src,srcrect,dst,dstrect,false)}Module["_SDL_BlitSurface"]=_SDL_BlitSurface;_SDL_BlitSurface.sig="iiiii";function _SDL_BlitScaled(src,srcrect,dst,dstrect){return SDL.blitSurface(src,srcrect,dst,dstrect,true)}Module["_SDL_BlitScaled"]=_SDL_BlitScaled;_SDL_BlitScaled.sig="iiiii";function _zoomSurface(src,x,y,smooth){var srcData=SDL.surfaces[src];var w=srcData.width*x;var h=srcData.height*y;var ret=SDL.makeSurface(Math.abs(w),Math.abs(h),srcData.flags,false,"zoomSurface");var dstData=SDL.surfaces[ret];if(x>=0&&y>=0)dstData.ctx.drawImage(srcData.canvas,0,0,w,h);else{dstData.ctx.save();dstData.ctx.scale(x<0?-1:1,y<0?-1:1);dstData.ctx.drawImage(srcData.canvas,w<0?w:0,h<0?h:0,Math.abs(w),Math.abs(h));dstData.ctx.restore()}return ret}Module["_zoomSurface"]=_zoomSurface;function _rotozoomSurface(src,angle,zoom,smooth){if(angle%360===0){return _zoomSurface(src,zoom,zoom,smooth)}var srcData=SDL.surfaces[src];var w=srcData.width*zoom;var h=srcData.height*zoom;var diagonal=Math.ceil(Math.sqrt(Math.pow(w,2)+Math.pow(h,2)));var ret=SDL.makeSurface(diagonal,diagonal,srcData.flags,false,"rotozoomSurface");var dstData=SDL.surfaces[ret];dstData.ctx.translate(diagonal/2,diagonal/2);dstData.ctx.rotate(-angle*Math.PI/180);dstData.ctx.drawImage(srcData.canvas,-w/2,-h/2,w,h);return ret}Module["_rotozoomSurface"]=_rotozoomSurface;function _SDL_SetAlpha(surf,flag,alpha){var surfData=SDL.surfaces[surf];surfData.alpha=alpha;if(!(flag&65536)){surfData.alpha=255}}Module["_SDL_SetAlpha"]=_SDL_SetAlpha;_SDL_SetAlpha.sig="iiii";function _SDL_SetColorKey(surf,flag,key){warnOnce("SDL_SetColorKey is a no-op for performance reasons");return 0}Module["_SDL_SetColorKey"]=_SDL_SetColorKey;function _SDL_PollEvent(ptr){return SDL.pollEvent(ptr)}Module["_SDL_PollEvent"]=_SDL_PollEvent;_SDL_PollEvent.sig="ii";function _SDL_PushEvent(ptr){var copy=_malloc(28);_memcpy(copy,ptr,28);SDL.events.push(copy);return 0}Module["_SDL_PushEvent"]=_SDL_PushEvent;_SDL_PushEvent.sig="ii";function _SDL_PeepEvents(events,requestedEventCount,action,from,to){switch(action){case 2:{assert(requestedEventCount==1);var index=0;var retrievedEventCount=0;while(index>0];surfData.colors[index+1]=HEAPU8[colors+(i*4+1)>>0];surfData.colors[index+2]=HEAPU8[colors+(i*4+2)>>0];surfData.colors[index+3]=255}return 1}Module["_SDL_SetColors"]=_SDL_SetColors;_SDL_SetColors.sig="iiiii";function _SDL_SetPalette(surf,flags,colors,firstColor,nColors){return _SDL_SetColors(surf,colors,firstColor,nColors)}Module["_SDL_SetPalette"]=_SDL_SetPalette;function _SDL_MapRGB(fmt,r,g,b){SDL.checkPixelFormat(fmt);return r&255|(g&255)<<8|(b&255)<<16|4278190080}Module["_SDL_MapRGB"]=_SDL_MapRGB;_SDL_MapRGB.sig="iiiii";function _SDL_MapRGBA(fmt,r,g,b,a){SDL.checkPixelFormat(fmt);return r&255|(g&255)<<8|(b&255)<<16|(a&255)<<24}Module["_SDL_MapRGBA"]=_SDL_MapRGBA;_SDL_MapRGBA.sig="iiiiii";function _SDL_GetRGB(pixel,fmt,r,g,b){SDL.checkPixelFormat(fmt);if(r){HEAP8[r>>0]=pixel&255}if(g){HEAP8[g>>0]=pixel>>8&255}if(b){HEAP8[b>>0]=pixel>>16&255}}Module["_SDL_GetRGB"]=_SDL_GetRGB;_SDL_GetRGB.sig="viiiii";function _SDL_GetRGBA(pixel,fmt,r,g,b,a){SDL.checkPixelFormat(fmt);if(r){HEAP8[r>>0]=pixel&255}if(g){HEAP8[g>>0]=pixel>>8&255}if(b){HEAP8[b>>0]=pixel>>16&255}if(a){HEAP8[a>>0]=pixel>>24&255}}Module["_SDL_GetRGBA"]=_SDL_GetRGBA;_SDL_GetRGBA.sig="viiiiii";function _SDL_GetAppState(){var state=0;if(Browser.pointerLock){state|=1}if(document.hasFocus()){state|=2}state|=4;return state}Module["_SDL_GetAppState"]=_SDL_GetAppState;_SDL_GetAppState.sig="i";function _SDL_WM_GrabInput(){}Module["_SDL_WM_GrabInput"]=_SDL_WM_GrabInput;function _SDL_WM_ToggleFullScreen(surf){if(Browser.exitFullscreen()){return 1}else{if(!SDL.canRequestFullscreen){return 0}SDL.isRequestingFullscreen=true;return 1}}Module["_SDL_WM_ToggleFullScreen"]=_SDL_WM_ToggleFullScreen;_SDL_WM_ToggleFullScreen.sig="ii";function _IMG_Init(flags){return flags}Module["_IMG_Init"]=_IMG_Init;function _SDL_FreeRW(rwopsID){SDL.rwops[rwopsID]=null;while(SDL.rwops.length>0&&SDL.rwops[SDL.rwops.length-1]===null){SDL.rwops.pop()}}Module["_SDL_FreeRW"]=_SDL_FreeRW;_SDL_FreeRW.sig="vi";function _IMG_Load_RW(rwopsID,freeSrc){try{var cleanup=function(){if(rwops&&freeSrc)_SDL_FreeRW(rwopsID)};var addCleanup=function(func){var old=cleanup;cleanup=function added_cleanup(){old();func()}};var callStbImage=function(func,params){var x=Module["_malloc"](4);var y=Module["_malloc"](4);var comp=Module["_malloc"](4);addCleanup(function(){Module["_free"](x);Module["_free"](y);Module["_free"](comp);if(data)Module["_stbi_image_free"](data)});var data=Module["_"+func].apply(null,params.concat([x,y,comp,0]));if(!data)return null;return{rawData:true,data:data,width:HEAP32[x>>2],height:HEAP32[y>>2],size:HEAP32[x>>2]*HEAP32[y>>2]*HEAP32[comp>>2],bpp:HEAP32[comp>>2]}};var rwops=SDL.rwops[rwopsID];if(rwops===undefined){return 0}var raw;var filename=rwops.filename;if(filename===undefined){warnOnce("Only file names that have been preloaded are supported for IMG_Load_RW. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js), or package files with --use-preload-plugins");return 0}if(!raw){filename=PATH_FS.resolve(filename);raw=Module["preloadedImages"][filename];if(!raw){if(raw===null)err("Trying to reuse preloaded image, but freePreloadedMediaOnUse is set!");warnOnce("Cannot find preloaded image "+filename);warnOnce("Cannot find preloaded image "+filename+". Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js), or package files with --use-preload-plugins");return 0}else if(Module["freePreloadedMediaOnUse"]){Module["preloadedImages"][filename]=null}}var surf=SDL.makeSurface(raw.width,raw.height,0,false,"load:"+filename);var surfData=SDL.surfaces[surf];surfData.ctx.globalCompositeOperation="copy";if(!raw.rawData){surfData.ctx.drawImage(raw,0,0,raw.width,raw.height,0,0,raw.width,raw.height)}else{var imageData=surfData.ctx.getImageData(0,0,surfData.width,surfData.height);if(raw.bpp==4){imageData.data.set(HEAPU8.subarray(raw.data,raw.data+raw.size))}else if(raw.bpp==3){var pixels=raw.size/3;var data=imageData.data;var sourcePtr=raw.data;var destPtr=0;for(var i=0;i>0];data[destPtr++]=HEAPU8[sourcePtr++>>0];data[destPtr++]=HEAPU8[sourcePtr++>>0];data[destPtr++]=255}}else if(raw.bpp==2){var pixels=raw.size;var data=imageData.data;var sourcePtr=raw.data;var destPtr=0;for(var i=0;i>0];var alpha=HEAPU8[sourcePtr++>>0];data[destPtr++]=gray;data[destPtr++]=gray;data[destPtr++]=gray;data[destPtr++]=alpha}}else if(raw.bpp==1){var pixels=raw.size;var data=imageData.data;var sourcePtr=raw.data;var destPtr=0;for(var i=0;i>0];data[destPtr++]=value;data[destPtr++]=value;data[destPtr++]=value;data[destPtr++]=255}}else{err("cannot handle bpp "+raw.bpp);return 0}surfData.ctx.putImageData(imageData,0,0)}surfData.ctx.globalCompositeOperation="source-over";_SDL_LockSurface(surf);surfData.locked--;if(SDL.GL){surfData.canvas=surfData.ctx=null}return surf}finally{cleanup()}}Module["_IMG_Load_RW"]=_IMG_Load_RW;_IMG_Load_RW.sig="iii";function _SDL_RWFromFile(_name,mode){var id=SDL.rwops.length;var name=UTF8ToString(_name);SDL.rwops.push({filename:name,mimetype:Browser.getMimetype(name)});return id}Module["_SDL_RWFromFile"]=_SDL_RWFromFile;_SDL_RWFromFile.sig="iii";function _IMG_Load(filename){var rwops=_SDL_RWFromFile(filename);var result=_IMG_Load_RW(rwops,1);return result}Module["_IMG_Load"]=_IMG_Load;_IMG_Load.sig="ii";function _SDL_LoadBMP(a0){return _IMG_Load(a0)}Module["_SDL_LoadBMP"]=_SDL_LoadBMP;_SDL_LoadBMP.sig="ii";function _SDL_LoadBMP_RW(a0,a1){return _IMG_Load_RW(a0,a1)}Module["_SDL_LoadBMP_RW"]=_SDL_LoadBMP_RW;_SDL_LoadBMP_RW.sig="iii";function _IMG_Quit(){out("IMG_Quit called (and ignored)")}Module["_IMG_Quit"]=_IMG_Quit;function _SDL_OpenAudio(desired,obtained){try{SDL.audio={freq:HEAPU32[desired>>2],format:HEAPU16[desired+4>>1],channels:HEAPU8[desired+6>>0],samples:HEAPU16[desired+8>>1],callback:HEAPU32[desired+16>>2],userdata:HEAPU32[desired+20>>2],paused:true,timer:null};if(SDL.audio.format==8){SDL.audio.silence=128}else if(SDL.audio.format==32784){SDL.audio.silence=0}else if(SDL.audio.format==33056){SDL.audio.silence=0}else{throw"Invalid SDL audio format "+SDL.audio.format+"!"}if(SDL.audio.freq<=0){throw"Unsupported sound frequency "+SDL.audio.freq+"!"}else if(SDL.audio.freq<=22050){SDL.audio.freq=22050}else if(SDL.audio.freq<=32e3){SDL.audio.freq=32e3}else if(SDL.audio.freq<=44100){SDL.audio.freq=44100}else if(SDL.audio.freq<=48e3){SDL.audio.freq=48e3}else if(SDL.audio.freq<=96e3){SDL.audio.freq=96e3}else{throw"Unsupported sound frequency "+SDL.audio.freq+"!"}if(SDL.audio.channels==0){SDL.audio.channels=1}else if(SDL.audio.channels<0||SDL.audio.channels>32){throw"Unsupported number of audio channels for SDL audio: "+SDL.audio.channels+"!"}else if(SDL.audio.channels!=1&&SDL.audio.channels!=2){out("Warning: Using untested number of audio channels "+SDL.audio.channels)}if(SDL.audio.samples<128||SDL.audio.samples>524288){throw"Unsupported audio callback buffer size "+SDL.audio.samples+"!"}else if((SDL.audio.samples&SDL.audio.samples-1)!=0){throw"Audio callback buffer size "+SDL.audio.samples+" must be a power-of-two!"}var totalSamples=SDL.audio.samples*SDL.audio.channels;if(SDL.audio.format==8){SDL.audio.bytesPerSample=1}else if(SDL.audio.format==32784){SDL.audio.bytesPerSample=2}else if(SDL.audio.format==33056){SDL.audio.bytesPerSample=4}else{throw"Invalid SDL audio format "+SDL.audio.format+"!"}SDL.audio.bufferSize=totalSamples*SDL.audio.bytesPerSample;SDL.audio.bufferDurationSecs=SDL.audio.bufferSize/SDL.audio.bytesPerSample/SDL.audio.channels/SDL.audio.freq;SDL.audio.bufferingDelay=50/1e3;SDL.audio.buffer=_malloc(SDL.audio.bufferSize);SDL.audio.numSimultaneouslyQueuedBuffers=Module["SDL_numSimultaneouslyQueuedBuffers"]||5;SDL.audio.queueNewAudioData=function SDL_queueNewAudioData(){if(!SDL.audio)return;for(var i=0;i=SDL.audio.bufferingDelay+SDL.audio.bufferDurationSecs*SDL.audio.numSimultaneouslyQueuedBuffers)return;wasmTable.get(SDL.audio.callback)(SDL.audio.userdata,SDL.audio.buffer,SDL.audio.bufferSize);SDL.audio.pushAudio(SDL.audio.buffer,SDL.audio.bufferSize)}};SDL.audio.caller=function SDL_audioCaller(){if(!SDL.audio)return;--SDL.audio.numAudioTimersPending;SDL.audio.queueNewAudioData();var secsUntilNextPlayStart=SDL.audio.nextPlayTime-SDL.audioContext["currentTime"];var preemptBufferFeedSecs=SDL.audio.bufferDurationSecs/2;if(SDL.audio.numAudioTimersPending>2]=SDL.audio.freq;HEAP16[obtained+4>>1]=SDL.audio.format;HEAP8[obtained+6>>0]=SDL.audio.channels;HEAP8[obtained+7>>0]=SDL.audio.silence;HEAP16[obtained+8>>1]=SDL.audio.samples;HEAP32[obtained+16>>2]=SDL.audio.callback;HEAP32[obtained+20>>2]=SDL.audio.userdata}SDL.allocateChannels(32)}catch(e){out('Initializing SDL audio threw an exception: "'+e.toString()+'"! Continuing without audio.');SDL.audio=null;SDL.allocateChannels(0);if(obtained){HEAP32[obtained>>2]=0;HEAP16[obtained+4>>1]=0;HEAP8[obtained+6>>0]=0;HEAP8[obtained+7>>0]=0;HEAP16[obtained+8>>1]=0;HEAP32[obtained+16>>2]=0;HEAP32[obtained+20>>2]=0}}if(!SDL.audio){return-1}return 0}Module["_SDL_OpenAudio"]=_SDL_OpenAudio;_SDL_OpenAudio.sig="iii";function _SDL_PauseAudio(pauseOn){if(!SDL.audio){return}if(pauseOn){if(SDL.audio.timer!==undefined){clearTimeout(SDL.audio.timer);SDL.audio.numAudioTimersPending=0;SDL.audio.timer=undefined}}else if(!SDL.audio.timer){SDL.audio.numAudioTimersPending=1;SDL.audio.timer=safeSetTimeout(SDL.audio.caller,1)}SDL.audio.paused=pauseOn}Module["_SDL_PauseAudio"]=_SDL_PauseAudio;_SDL_PauseAudio.sig="vi";function _SDL_CloseAudio(){if(SDL.audio){if(SDL.audio.callbackRemover){SDL.audio.callbackRemover();SDL.audio.callbackRemover=null}_SDL_PauseAudio(1);_free(SDL.audio.buffer);SDL.audio=null;SDL.allocateChannels(0)}}Module["_SDL_CloseAudio"]=_SDL_CloseAudio;_SDL_CloseAudio.sig="v";function _SDL_LockAudio(){}Module["_SDL_LockAudio"]=_SDL_LockAudio;function _SDL_UnlockAudio(){}Module["_SDL_UnlockAudio"]=_SDL_UnlockAudio;function _SDL_CreateMutex(){return 0}Module["_SDL_CreateMutex"]=_SDL_CreateMutex;function _SDL_LockMutex(){}Module["_SDL_LockMutex"]=_SDL_LockMutex;function _SDL_UnlockMutex(){}Module["_SDL_UnlockMutex"]=_SDL_UnlockMutex;function _SDL_mutexP(){return 0}Module["_SDL_mutexP"]=_SDL_mutexP;function _SDL_mutexV(){return 0}Module["_SDL_mutexV"]=_SDL_mutexV;function _SDL_DestroyMutex(){}Module["_SDL_DestroyMutex"]=_SDL_DestroyMutex;function _SDL_CreateCond(){return 0}Module["_SDL_CreateCond"]=_SDL_CreateCond;function _SDL_CondSignal(){}Module["_SDL_CondSignal"]=_SDL_CondSignal;function _SDL_CondWait(){}Module["_SDL_CondWait"]=_SDL_CondWait;function _SDL_DestroyCond(){}Module["_SDL_DestroyCond"]=_SDL_DestroyCond;function _SDL_StartTextInput(){SDL.textInput=true}Module["_SDL_StartTextInput"]=_SDL_StartTextInput;_SDL_StartTextInput.sig="v";function _SDL_StopTextInput(){SDL.textInput=false}Module["_SDL_StopTextInput"]=_SDL_StopTextInput;_SDL_StopTextInput.sig="v";function _Mix_Init(flags){if(!flags)return 0;return 8}Module["_Mix_Init"]=_Mix_Init;function _Mix_Quit(){}Module["_Mix_Quit"]=_Mix_Quit;function _Mix_OpenAudio(frequency,format,channels,chunksize){SDL.openAudioContext();autoResumeAudioContext(SDL.audioContext);SDL.allocateChannels(32);SDL.mixerFrequency=frequency;SDL.mixerFormat=format;SDL.mixerNumChannels=channels;SDL.mixerChunkSize=chunksize;return 0}Module["_Mix_OpenAudio"]=_Mix_OpenAudio;_Mix_OpenAudio.sig="iiiii";function _Mix_CloseAudio(){_SDL_CloseAudio()}Module["_Mix_CloseAudio"]=_Mix_CloseAudio;_Mix_CloseAudio.sig="v";function _Mix_AllocateChannels(num){SDL.allocateChannels(num);return num}Module["_Mix_AllocateChannels"]=_Mix_AllocateChannels;_Mix_AllocateChannels.sig="ii";function _Mix_ChannelFinished(func){SDL.channelFinished=func}Module["_Mix_ChannelFinished"]=_Mix_ChannelFinished;_Mix_ChannelFinished.sig="vi";function _Mix_Volume(channel,volume){if(channel==-1){for(var i=0;i>1;var buffer=new Float32Array(numSamples);for(var i=0;i>1]/32768}if(SDL.webAudioAvailable()){webAudio={};webAudio.decodedBuffer=buffer}else{audio=new Audio;audio.mozAudioChannelType="content";audio.numChannels=SDL.mixerNumChannels;audio.frequency=SDL.mixerFrequency}var id=SDL.audios.length;SDL.audios.push({source:"",audio:audio,webAudio:webAudio,buffer:buffer});return id}Module["_Mix_QuickLoad_RAW"]=_Mix_QuickLoad_RAW;_Mix_QuickLoad_RAW.sig="iii";function _Mix_FreeChunk(id){SDL.audios[id]=null}Module["_Mix_FreeChunk"]=_Mix_FreeChunk;_Mix_FreeChunk.sig="vi";function _Mix_ReserveChannels(num){SDL.channelMinimumNumber=num}Module["_Mix_ReserveChannels"]=_Mix_ReserveChannels;_Mix_ReserveChannels.sig="ii";function _Mix_PlayChannel(channel,id,loops){var info=SDL.audios[id];if(!info)return-1;if(!info.audio&&!info.webAudio)return-1;if(channel==-1){for(var i=SDL.channelMinimumNumber;i>2]=SDL.estimateTextWidth(fontData,UTF8ToString(text))}if(h){HEAP32[h>>2]=fontData.size}return 0}Module["_TTF_SizeText"]=_TTF_SizeText;_TTF_SizeText.sig="iiiii";function _TTF_SizeUTF8(a0,a1,a2,a3){return _TTF_SizeText(a0,a1,a2,a3)}Module["_TTF_SizeUTF8"]=_TTF_SizeUTF8;_TTF_SizeUTF8.sig="iiiii";function _TTF_GlyphMetrics(font,ch,minx,maxx,miny,maxy,advance){var fontData=SDL.fonts[font];var width=SDL.estimateTextWidth(fontData,String.fromCharCode(ch));if(advance){HEAP32[advance>>2]=width}if(minx){HEAP32[minx>>2]=0}if(maxx){HEAP32[maxx>>2]=width}if(miny){HEAP32[miny>>2]=0}if(maxy){HEAP32[maxy>>2]=fontData.size}}Module["_TTF_GlyphMetrics"]=_TTF_GlyphMetrics;_TTF_GlyphMetrics.sig="iiiiiiii";function _TTF_FontAscent(font){var fontData=SDL.fonts[font];return fontData.size*.98|0}Module["_TTF_FontAscent"]=_TTF_FontAscent;_TTF_FontAscent.sig="ii";function _TTF_FontDescent(font){var fontData=SDL.fonts[font];return fontData.size*.02|0}Module["_TTF_FontDescent"]=_TTF_FontDescent;_TTF_FontDescent.sig="ii";function _TTF_FontHeight(font){var fontData=SDL.fonts[font];return fontData.size}Module["_TTF_FontHeight"]=_TTF_FontHeight;_TTF_FontHeight.sig="ii";function _TTF_FontLineSkip(a0){return _TTF_FontHeight(a0)}Module["_TTF_FontLineSkip"]=_TTF_FontLineSkip;_TTF_FontLineSkip.sig="ii";function _TTF_Quit(){out("TTF_Quit called (and ignored)")}Module["_TTF_Quit"]=_TTF_Quit;var SDL_gfx={drawRectangle:function(surf,x1,y1,x2,y2,action,cssColor){x1=x1<<16>>16;y1=y1<<16>>16;x2=x2<<16>>16;y2=y2<<16>>16;var surfData=SDL.surfaces[surf];assert(!surfData.locked);var x=x1>16;y1=y1<<16>>16;x2=x2<<16>>16;y2=y2<<16>>16;var surfData=SDL.surfaces[surf];assert(!surfData.locked);surfData.ctx.save();surfData.ctx.strokeStyle=cssColor;surfData.ctx.beginPath();surfData.ctx.moveTo(x1,y1);surfData.ctx.lineTo(x2,y2);surfData.ctx.stroke();surfData.ctx.restore()},drawEllipse:function(surf,x,y,rx,ry,action,cssColor){x=x<<16>>16;y=y<<16>>16;rx=rx<<16>>16;ry=ry<<16>>16;var surfData=SDL.surfaces[surf];assert(!surfData.locked);surfData.ctx.save();surfData.ctx.beginPath();surfData.ctx.translate(x,y);surfData.ctx.scale(rx,ry);surfData.ctx.arc(0,0,1,0,2*Math.PI);surfData.ctx.restore();surfData.ctx.save();surfData.ctx[action+"Style"]=cssColor;surfData.ctx[action]();surfData.ctx.restore()},translateColorToCSSRGBA:function(rgba){return"rgba("+(rgba>>>24)+","+(rgba>>16&255)+","+(rgba>>8&255)+","+(rgba&255)+")"}};Module["SDL_gfx"]=SDL_gfx;function _boxColor(surf,x1,y1,x2,y2,color){return SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"fill",SDL_gfx.translateColorToCSSRGBA(color))}Module["_boxColor"]=_boxColor;function _boxRGBA(surf,x1,y1,x2,y2,r,g,b,a){return SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"fill",SDL.translateRGBAToCSSRGBA(r,g,b,a))}Module["_boxRGBA"]=_boxRGBA;function _rectangleColor(surf,x1,y1,x2,y2,color){return SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"stroke",SDL_gfx.translateColorToCSSRGBA(color))}Module["_rectangleColor"]=_rectangleColor;function _rectangleRGBA(surf,x1,y1,x2,y2,r,g,b,a){return SDL_gfx.drawRectangle(surf,x1,y1,x2,y2,"stroke",SDL.translateRGBAToCSSRGBA(r,g,b,a))}Module["_rectangleRGBA"]=_rectangleRGBA;function _ellipseColor(surf,x,y,rx,ry,color){return SDL_gfx.drawEllipse(surf,x,y,rx,ry,"stroke",SDL_gfx.translateColorToCSSRGBA(color))}Module["_ellipseColor"]=_ellipseColor;function _ellipseRGBA(surf,x,y,rx,ry,r,g,b,a){return SDL_gfx.drawEllipse(surf,x,y,rx,ry,"stroke",SDL.translateRGBAToCSSRGBA(r,g,b,a))}Module["_ellipseRGBA"]=_ellipseRGBA;function _filledEllipseColor(surf,x,y,rx,ry,color){return SDL_gfx.drawEllipse(surf,x,y,rx,ry,"fill",SDL_gfx.translateColorToCSSRGBA(color))}Module["_filledEllipseColor"]=_filledEllipseColor;function _filledEllipseRGBA(surf,x,y,rx,ry,r,g,b,a){return SDL_gfx.drawEllipse(surf,x,y,rx,ry,"fill",SDL.translateRGBAToCSSRGBA(r,g,b,a))}Module["_filledEllipseRGBA"]=_filledEllipseRGBA;function _lineColor(surf,x1,y1,x2,y2,color){return SDL_gfx.drawLine(surf,x1,y1,x2,y2,SDL_gfx.translateColorToCSSRGBA(color))}Module["_lineColor"]=_lineColor;function _lineRGBA(surf,x1,y1,x2,y2,r,g,b,a){return SDL_gfx.drawLine(surf,x1,y1,x2,y2,SDL.translateRGBAToCSSRGBA(r,g,b,a))}Module["_lineRGBA"]=_lineRGBA;function _pixelRGBA(surf,x1,y1,r,g,b,a){_boxRGBA(surf,x1,y1,x1,y1,r,g,b,a)}Module["_pixelRGBA"]=_pixelRGBA;function _SDL_GL_SetAttribute(attr,value){if(!(attr in SDL.glAttributes)){abort("Unknown SDL GL attribute ("+attr+"). Please check if your SDL version is supported.")}SDL.glAttributes[attr]=value}Module["_SDL_GL_SetAttribute"]=_SDL_GL_SetAttribute;_SDL_GL_SetAttribute.sig="iii";function _SDL_GL_GetAttribute(attr,value){if(!(attr in SDL.glAttributes)){abort("Unknown SDL GL attribute ("+attr+"). Please check if your SDL version is supported.")}if(value)HEAP32[value>>2]=SDL.glAttributes[attr];return 0}Module["_SDL_GL_GetAttribute"]=_SDL_GL_GetAttribute;_SDL_GL_GetAttribute.sig="iii";function _SDL_GL_SwapBuffers(){if(Browser.doSwapBuffers)Browser.doSwapBuffers()}Module["_SDL_GL_SwapBuffers"]=_SDL_GL_SwapBuffers;_SDL_GL_SwapBuffers.sig="v";function _SDL_GL_ExtensionSupported(extension){return Module.ctx.getExtension(extension)|0}Module["_SDL_GL_ExtensionSupported"]=_SDL_GL_ExtensionSupported;_SDL_GL_ExtensionSupported.sig="ii";function _SDL_DestroyWindow(window){}Module["_SDL_DestroyWindow"]=_SDL_DestroyWindow;function _SDL_DestroyRenderer(renderer){}Module["_SDL_DestroyRenderer"]=_SDL_DestroyRenderer;function _SDL_GetWindowFlags(){}Module["_SDL_GetWindowFlags"]=_SDL_GetWindowFlags;_SDL_GetWindowFlags.sig="iii";function _SDL_GL_SwapWindow(window){}Module["_SDL_GL_SwapWindow"]=_SDL_GL_SwapWindow;function _SDL_GL_MakeCurrent(window,context){}Module["_SDL_GL_MakeCurrent"]=_SDL_GL_MakeCurrent;function _SDL_GL_DeleteContext(context){}Module["_SDL_GL_DeleteContext"]=_SDL_GL_DeleteContext;function _SDL_GL_GetSwapInterval(state){if(Browser.mainLoop.timingMode==1)return Browser.mainLoop.timingValue;else return 0}Module["_SDL_GL_GetSwapInterval"]=_SDL_GL_GetSwapInterval;_SDL_GL_GetSwapInterval.sig="ii";function _SDL_GL_SetSwapInterval(state){_emscripten_set_main_loop_timing(1,state)}Module["_SDL_GL_SetSwapInterval"]=_SDL_GL_SetSwapInterval;function _SDL_SetWindowTitle(window,title){if(title)document.title=UTF8ToString(title)}Module["_SDL_SetWindowTitle"]=_SDL_SetWindowTitle;_SDL_SetWindowTitle.sig="vii";function _SDL_GetWindowSize(window,width,height){var w=Module["canvas"].width;var h=Module["canvas"].height;if(width)HEAP32[width>>2]=w;if(height)HEAP32[height>>2]=h}Module["_SDL_GetWindowSize"]=_SDL_GetWindowSize;_SDL_GetWindowSize.sig="viii";function _SDL_LogSetOutputFunction(callback,userdata){}Module["_SDL_LogSetOutputFunction"]=_SDL_LogSetOutputFunction;function _SDL_SetWindowFullscreen(window,fullscreen){if(Browser.isFullscreen){Module["canvas"].exitFullscreen();return 1}else{return 0}}Module["_SDL_SetWindowFullscreen"]=_SDL_SetWindowFullscreen;_SDL_SetWindowFullscreen.sig="iii";function _SDL_ClearError(){}Module["_SDL_ClearError"]=_SDL_ClearError;function _SDL_SetGamma(r,g,b){return-1}Module["_SDL_SetGamma"]=_SDL_SetGamma;function _SDL_SetGammaRamp(redTable,greenTable,blueTable){return-1}Module["_SDL_SetGammaRamp"]=_SDL_SetGammaRamp;function _SDL_NumJoysticks(){var count=0;var gamepads=SDL.getGamepads();for(var i=0;iaxis){return SDL.joystickAxisValueConversion(gamepad.axes[axis])}return 0}Module["_SDL_JoystickGetAxis"]=_SDL_JoystickGetAxis;_SDL_JoystickGetAxis.sig="iii";function _SDL_JoystickGetHat(joystick,hat){return 0}Module["_SDL_JoystickGetHat"]=_SDL_JoystickGetHat;function _SDL_JoystickGetBall(joystick,ball,dxptr,dyptr){return-1}Module["_SDL_JoystickGetBall"]=_SDL_JoystickGetBall;function _SDL_JoystickGetButton(joystick,button){var gamepad=SDL.getGamepad(joystick-1);if(gamepad&&gamepad.buttons.length>button){return SDL.getJoystickButtonState(gamepad.buttons[button])?1:0}return 0}Module["_SDL_JoystickGetButton"]=_SDL_JoystickGetButton;_SDL_JoystickGetButton.sig="iii";function _SDL_JoystickClose(joystick){delete SDL.lastJoystickState[joystick]}Module["_SDL_JoystickClose"]=_SDL_JoystickClose;_SDL_JoystickClose.sig="vi";function _SDL_InitSubSystem(flags){return 0}Module["_SDL_InitSubSystem"]=_SDL_InitSubSystem;function _SDL_RWFromConstMem(mem,size){var id=SDL.rwops.length;SDL.rwops.push({bytes:mem,count:size});return id}Module["_SDL_RWFromConstMem"]=_SDL_RWFromConstMem;_SDL_RWFromConstMem.sig="iii";function _SDL_RWFromMem(a0,a1){return _SDL_RWFromConstMem(a0,a1)}Module["_SDL_RWFromMem"]=_SDL_RWFromMem;_SDL_RWFromMem.sig="iii";function _SDL_GetNumAudioDrivers(){return 1}Module["_SDL_GetNumAudioDrivers"]=_SDL_GetNumAudioDrivers;function _SDL_GetCurrentAudioDriver(){return allocate(intArrayFromString("Emscripten Audio"),ALLOC_NORMAL)}Module["_SDL_GetCurrentAudioDriver"]=_SDL_GetCurrentAudioDriver;function _SDL_GetAudioDriver(index){return _SDL_GetCurrentAudioDriver()}Module["_SDL_GetAudioDriver"]=_SDL_GetAudioDriver;function _SDL_EnableUNICODE(on){var ret=SDL.unicode||0;SDL.unicode=on;return ret}Module["_SDL_EnableUNICODE"]=_SDL_EnableUNICODE;_SDL_EnableUNICODE.sig="ii";function _SDL_AddTimer(interval,callback,param){return window.setTimeout(function(){wasmTable.get(callback)(interval,param)},interval)}Module["_SDL_AddTimer"]=_SDL_AddTimer;_SDL_AddTimer.sig="iiii";function _SDL_RemoveTimer(id){window.clearTimeout(id);return true}Module["_SDL_RemoveTimer"]=_SDL_RemoveTimer;_SDL_RemoveTimer.sig="ii";function _SDL_CreateThread(){throw"SDL threads cannot be supported in the web platform because they assume shared state. See emscripten_create_worker etc. for a message-passing concurrency model that does let you run code in another thread."}Module["_SDL_CreateThread"]=_SDL_CreateThread;function _SDL_WaitThread(){throw"SDL_WaitThread"}Module["_SDL_WaitThread"]=_SDL_WaitThread;function _SDL_GetThreadID(){throw"SDL_GetThreadID"}Module["_SDL_GetThreadID"]=_SDL_GetThreadID;function _SDL_ThreadID(){return 0}Module["_SDL_ThreadID"]=_SDL_ThreadID;function _SDL_AllocRW(){throw"SDL_AllocRW: TODO"}Module["_SDL_AllocRW"]=_SDL_AllocRW;function _SDL_CondBroadcast(){throw"SDL_CondBroadcast: TODO"}Module["_SDL_CondBroadcast"]=_SDL_CondBroadcast;function _SDL_CondWaitTimeout(){throw"SDL_CondWaitTimeout: TODO"}Module["_SDL_CondWaitTimeout"]=_SDL_CondWaitTimeout;function _SDL_WM_IconifyWindow(){throw"SDL_WM_IconifyWindow TODO"}Module["_SDL_WM_IconifyWindow"]=_SDL_WM_IconifyWindow;function _Mix_SetPostMix(){warnOnce("Mix_SetPostMix: TODO")}Module["_Mix_SetPostMix"]=_Mix_SetPostMix;function _Mix_VolumeChunk(chunk,volume){throw"Mix_VolumeChunk: TODO"}Module["_Mix_VolumeChunk"]=_Mix_VolumeChunk;function _Mix_SetPosition(channel,angle,distance){throw"Mix_SetPosition: TODO"}Module["_Mix_SetPosition"]=_Mix_SetPosition;function _Mix_QuerySpec(){throw"Mix_QuerySpec: TODO"}Module["_Mix_QuerySpec"]=_Mix_QuerySpec;function _Mix_FadeInChannelTimed(){throw"Mix_FadeInChannelTimed"}Module["_Mix_FadeInChannelTimed"]=_Mix_FadeInChannelTimed;function _Mix_FadeOutChannel(){throw"Mix_FadeOutChannel"}Module["_Mix_FadeOutChannel"]=_Mix_FadeOutChannel;function _Mix_Linked_Version(){throw"Mix_Linked_Version: TODO"}Module["_Mix_Linked_Version"]=_Mix_Linked_Version;function _SDL_SaveBMP_RW(){throw"SDL_SaveBMP_RW: TODO"}Module["_SDL_SaveBMP_RW"]=_SDL_SaveBMP_RW;function _SDL_WM_SetIcon(){}Module["_SDL_WM_SetIcon"]=_SDL_WM_SetIcon;function _SDL_HasRDTSC(){return 0}Module["_SDL_HasRDTSC"]=_SDL_HasRDTSC;function _SDL_HasMMX(){return 0}Module["_SDL_HasMMX"]=_SDL_HasMMX;function _SDL_HasMMXExt(){return 0}Module["_SDL_HasMMXExt"]=_SDL_HasMMXExt;function _SDL_Has3DNow(){return 0}Module["_SDL_Has3DNow"]=_SDL_Has3DNow;function _SDL_Has3DNowExt(){return 0}Module["_SDL_Has3DNowExt"]=_SDL_Has3DNowExt;function _SDL_HasSSE(){return 0}Module["_SDL_HasSSE"]=_SDL_HasSSE;function _SDL_HasSSE2(){return 0}Module["_SDL_HasSSE2"]=_SDL_HasSSE2;function _SDL_HasAltiVec(){return 0}Module["_SDL_HasAltiVec"]=_SDL_HasAltiVec;function _glutPostRedisplay(){if(GLUT.displayFunc&&!GLUT.requestedAnimationFrame){GLUT.requestedAnimationFrame=true;Browser.requestAnimationFrame(function(){GLUT.requestedAnimationFrame=false;Browser.mainLoop.runIter(function(){wasmTable.get(GLUT.displayFunc)()})})}}Module["_glutPostRedisplay"]=_glutPostRedisplay;_glutPostRedisplay.sig="v";var GLUT={initTime:null,idleFunc:null,displayFunc:null,keyboardFunc:null,keyboardUpFunc:null,specialFunc:null,specialUpFunc:null,reshapeFunc:null,motionFunc:null,passiveMotionFunc:null,mouseFunc:null,buttons:0,modifiers:0,initWindowWidth:256,initWindowHeight:256,initDisplayMode:18,windowX:0,windowY:0,windowWidth:0,windowHeight:0,requestedAnimationFrame:false,saveModifiers:function(event){GLUT.modifiers=0;if(event["shiftKey"])GLUT.modifiers+=1;if(event["ctrlKey"])GLUT.modifiers+=2;if(event["altKey"])GLUT.modifiers+=4},onMousemove:function(event){var lastX=Browser.mouseX;var lastY=Browser.mouseY;Browser.calculateMouseEvent(event);var newX=Browser.mouseX;var newY=Browser.mouseY;if(newX==lastX&&newY==lastY)return;if(GLUT.buttons==0&&event.target==Module["canvas"]&&GLUT.passiveMotionFunc){event.preventDefault();GLUT.saveModifiers(event);wasmTable.get(GLUT.passiveMotionFunc)(lastX,lastY)}else if(GLUT.buttons!=0&&GLUT.motionFunc){event.preventDefault();GLUT.saveModifiers(event);wasmTable.get(GLUT.motionFunc)(lastX,lastY)}},getSpecialKey:function(keycode){var key=null;switch(keycode){case 8:key=120;break;case 46:key=111;break;case 112:key=1;break;case 113:key=2;break;case 114:key=3;break;case 115:key=4;break;case 116:key=5;break;case 117:key=6;break;case 118:key=7;break;case 119:key=8;break;case 120:key=9;break;case 121:key=10;break;case 122:key=11;break;case 123:key=12;break;case 37:key=100;break;case 38:key=101;break;case 39:key=102;break;case 40:key=103;break;case 33:key=104;break;case 34:key=105;break;case 36:key=106;break;case 35:key=107;break;case 45:key=108;break;case 16:case 5:key=112;break;case 6:key=113;break;case 17:case 3:key=114;break;case 4:key=115;break;case 18:case 2:key=116;break;case 1:key=117;break}return key},getASCIIKey:function(event){if(event["ctrlKey"]||event["altKey"]||event["metaKey"])return null;var keycode=event["keyCode"];if(48<=keycode&&keycode<=57)return keycode;if(65<=keycode&&keycode<=90)return event["shiftKey"]?keycode:keycode+32;if(96<=keycode&&keycode<=105)return keycode-48;if(106<=keycode&&keycode<=111)return keycode-106+42;switch(keycode){case 9:case 13:case 27:case 32:case 61:return keycode}var s=event["shiftKey"];switch(keycode){case 186:return s?58:59;case 187:return s?43:61;case 188:return s?60:44;case 189:return s?95:45;case 190:return s?62:46;case 191:return s?63:47;case 219:return s?123:91;case 220:return s?124:47;case 221:return s?125:93;case 222:return s?34:39}return null},onKeydown:function(event){if(GLUT.specialFunc||GLUT.keyboardFunc){var key=GLUT.getSpecialKey(event["keyCode"]);if(key!==null){if(GLUT.specialFunc){event.preventDefault();GLUT.saveModifiers(event);wasmTable.get(GLUT.specialFunc)(key,Browser.mouseX,Browser.mouseY)}}else{key=GLUT.getASCIIKey(event);if(key!==null&&GLUT.keyboardFunc){event.preventDefault();GLUT.saveModifiers(event);wasmTable.get(GLUT.keyboardFunc)(key,Browser.mouseX,Browser.mouseY)}}}},onKeyup:function(event){if(GLUT.specialUpFunc||GLUT.keyboardUpFunc){var key=GLUT.getSpecialKey(event["keyCode"]);if(key!==null){if(GLUT.specialUpFunc){event.preventDefault();GLUT.saveModifiers(event);wasmTable.get(GLUT.specialUpFunc)(key,Browser.mouseX,Browser.mouseY)}}else{key=GLUT.getASCIIKey(event);if(key!==null&&GLUT.keyboardUpFunc){event.preventDefault();GLUT.saveModifiers(event);wasmTable.get(GLUT.keyboardUpFunc)(key,Browser.mouseX,Browser.mouseY)}}}},touchHandler:function(event){if(event.target!=Module["canvas"]){return}var touches=event.changedTouches,main=touches[0],type="";switch(event.type){case"touchstart":type="mousedown";break;case"touchmove":type="mousemove";break;case"touchend":type="mouseup";break;default:return}var simulatedEvent=document.createEvent("MouseEvent");simulatedEvent.initMouseEvent(type,true,true,window,1,main.screenX,main.screenY,main.clientX,main.clientY,false,false,false,false,0,null);main.target.dispatchEvent(simulatedEvent);event.preventDefault()},onMouseButtonDown:function(event){Browser.calculateMouseEvent(event);GLUT.buttons|=1<0?Math.max(delta,1):Math.min(delta,-1);var button=3;if(delta<0){button=4}if(GLUT.mouseFunc){event.preventDefault();GLUT.saveModifiers(event);wasmTable.get(GLUT.mouseFunc)(button,0,Browser.mouseX,Browser.mouseY)}},onFullscreenEventChange:function(event){var width;var height;if(document["fullscreen"]||document["fullScreen"]||document["mozFullScreen"]||document["webkitIsFullScreen"]){width=screen["width"];height=screen["height"]}else{width=GLUT.windowWidth;height=GLUT.windowHeight;document.removeEventListener("fullscreenchange",GLUT.onFullscreenEventChange,true);document.removeEventListener("mozfullscreenchange",GLUT.onFullscreenEventChange,true);document.removeEventListener("webkitfullscreenchange",GLUT.onFullscreenEventChange,true)}Browser.setCanvasSize(width,height,true);if(GLUT.reshapeFunc){wasmTable.get(GLUT.reshapeFunc)(width,height)}_glutPostRedisplay()}};Module["GLUT"]=GLUT;function _glutGetModifiers(){return GLUT.modifiers}Module["_glutGetModifiers"]=_glutGetModifiers;_glutGetModifiers.sig="i";function _glutInit(argcp,argv){GLUT.initTime=Date.now();var isTouchDevice="ontouchstart"in document.documentElement;if(isTouchDevice){window.addEventListener("touchmove",GLUT.touchHandler,true);window.addEventListener("touchstart",GLUT.touchHandler,true);window.addEventListener("touchend",GLUT.touchHandler,true)}window.addEventListener("keydown",GLUT.onKeydown,true);window.addEventListener("keyup",GLUT.onKeyup,true);window.addEventListener("mousemove",GLUT.onMousemove,true);window.addEventListener("mousedown",GLUT.onMouseButtonDown,true);window.addEventListener("mouseup",GLUT.onMouseButtonUp,true);window.addEventListener("mousewheel",GLUT.onMouseWheel,true);window.addEventListener("DOMMouseScroll",GLUT.onMouseWheel,true);Browser.resizeListeners.push(function(width,height){if(GLUT.reshapeFunc){wasmTable.get(GLUT.reshapeFunc)(width,height)}});__ATEXIT__.push(function(){if(isTouchDevice){window.removeEventListener("touchmove",GLUT.touchHandler,true);window.removeEventListener("touchstart",GLUT.touchHandler,true);window.removeEventListener("touchend",GLUT.touchHandler,true)}window.removeEventListener("keydown",GLUT.onKeydown,true);window.removeEventListener("keyup",GLUT.onKeyup,true);window.removeEventListener("mousemove",GLUT.onMousemove,true);window.removeEventListener("mousedown",GLUT.onMouseButtonDown,true);window.removeEventListener("mouseup",GLUT.onMouseButtonUp,true);window.removeEventListener("mousewheel",GLUT.onMouseWheel,true);window.removeEventListener("DOMMouseScroll",GLUT.onMouseWheel,true);Module["canvas"].width=Module["canvas"].height=1})}Module["_glutInit"]=_glutInit;_glutInit.sig="vii";function _glutInitWindowSize(width,height){Browser.setCanvasSize(GLUT.initWindowWidth=width,GLUT.initWindowHeight=height)}Module["_glutInitWindowSize"]=_glutInitWindowSize;_glutInitWindowSize.sig="vii";function _glutInitWindowPosition(x,y){}Module["_glutInitWindowPosition"]=_glutInitWindowPosition;_glutInitWindowPosition.sig="vii";function _glutGet(type){switch(type){case 100:return 0;case 101:return 0;case 102:return Module["canvas"].width;case 103:return Module["canvas"].height;case 200:return Module["canvas"].width;case 201:return Module["canvas"].height;case 500:return 0;case 501:return 0;case 502:return GLUT.initWindowWidth;case 503:return GLUT.initWindowHeight;case 700:var now=Date.now();return now-GLUT.initTime;case 105:return Module.ctx.getContextAttributes().stencil?8:0;case 106:return Module.ctx.getContextAttributes().depth?8:0;case 110:return Module.ctx.getContextAttributes().alpha?8:0;case 120:return Module.ctx.getContextAttributes().antialias?1:0;default:throw"glutGet("+type+") not implemented yet"}}Module["_glutGet"]=_glutGet;function _glutIdleFunc(func){function callback(){if(GLUT.idleFunc){wasmTable.get(GLUT.idleFunc)();safeSetTimeout(callback,4)}}if(!GLUT.idleFunc){safeSetTimeout(callback,0)}GLUT.idleFunc=func}Module["_glutIdleFunc"]=_glutIdleFunc;_glutIdleFunc.sig="vi";function _glutTimerFunc(msec,func,value){safeSetTimeout(function(){wasmTable.get(func)(value)},msec)}Module["_glutTimerFunc"]=_glutTimerFunc;_glutTimerFunc.sig="viii";function _glutDisplayFunc(func){GLUT.displayFunc=func}Module["_glutDisplayFunc"]=_glutDisplayFunc;_glutDisplayFunc.sig="vi";function _glutKeyboardFunc(func){GLUT.keyboardFunc=func}Module["_glutKeyboardFunc"]=_glutKeyboardFunc;_glutKeyboardFunc.sig="vi";function _glutKeyboardUpFunc(func){GLUT.keyboardUpFunc=func}Module["_glutKeyboardUpFunc"]=_glutKeyboardUpFunc;_glutKeyboardUpFunc.sig="vi";function _glutSpecialFunc(func){GLUT.specialFunc=func}Module["_glutSpecialFunc"]=_glutSpecialFunc;_glutSpecialFunc.sig="vi";function _glutSpecialUpFunc(func){GLUT.specialUpFunc=func}Module["_glutSpecialUpFunc"]=_glutSpecialUpFunc;_glutSpecialUpFunc.sig="vi";function _glutReshapeFunc(func){GLUT.reshapeFunc=func}Module["_glutReshapeFunc"]=_glutReshapeFunc;_glutReshapeFunc.sig="vi";function _glutMotionFunc(func){GLUT.motionFunc=func}Module["_glutMotionFunc"]=_glutMotionFunc;_glutMotionFunc.sig="vi";function _glutPassiveMotionFunc(func){GLUT.passiveMotionFunc=func}Module["_glutPassiveMotionFunc"]=_glutPassiveMotionFunc;_glutPassiveMotionFunc.sig="vi";function _glutMouseFunc(func){GLUT.mouseFunc=func}Module["_glutMouseFunc"]=_glutMouseFunc;_glutMouseFunc.sig="vi";function _glutSetCursor(cursor){var cursorStyle="auto";switch(cursor){case 0:break;case 1:break;case 2:cursorStyle="pointer";break;case 3:break;case 4:cursorStyle="help";break;case 5:break;case 6:break;case 7:cursorStyle="wait";break;case 8:cursorStyle="text";break;case 9:case 102:cursorStyle="crosshair";break;case 10:cursorStyle="ns-resize";break;case 11:cursorStyle="ew-resize";break;case 12:cursorStyle="n-resize";break;case 13:cursorStyle="s-resize";break;case 14:cursorStyle="w-resize";break;case 15:cursorStyle="e-resize";break;case 16:cursorStyle="nw-resize";break;case 17:cursorStyle="ne-resize";break;case 18:cursorStyle="se-resize";break;case 19:cursorStyle="sw-resize";break;case 100:break;case 101:cursorStyle="none";break;default:throw"glutSetCursor: Unknown cursor type: "+cursor}Module["canvas"].style.cursor=cursorStyle}Module["_glutSetCursor"]=_glutSetCursor;_glutSetCursor.sig="vi";function _glutCreateWindow(name){var contextAttributes={antialias:(GLUT.initDisplayMode&128)!=0,depth:(GLUT.initDisplayMode&16)!=0,stencil:(GLUT.initDisplayMode&32)!=0,alpha:(GLUT.initDisplayMode&8)!=0};Module.ctx=Browser.createContext(Module["canvas"],true,true,contextAttributes);return Module.ctx?1:0}Module["_glutCreateWindow"]=_glutCreateWindow;_glutCreateWindow.sig="ii";function _glutDestroyWindow(name){Module.ctx=Browser.destroyContext(Module["canvas"],true,true);return 1}Module["_glutDestroyWindow"]=_glutDestroyWindow;_glutDestroyWindow.sig="ii";function _glutReshapeWindow(width,height){Browser.exitFullscreen();Browser.setCanvasSize(width,height,true);if(GLUT.reshapeFunc){wasmTable.get(GLUT.reshapeFunc)(width,height)}_glutPostRedisplay()}Module["_glutReshapeWindow"]=_glutReshapeWindow;_glutReshapeWindow.sig="vi";function _glutPositionWindow(x,y){Browser.exitFullscreen();_glutPostRedisplay()}Module["_glutPositionWindow"]=_glutPositionWindow;_glutPositionWindow.sig="vii";function _glutFullScreen(){GLUT.windowX=0;GLUT.windowY=0;GLUT.windowWidth=Module["canvas"].width;GLUT.windowHeight=Module["canvas"].height;document.addEventListener("fullscreenchange",GLUT.onFullscreenEventChange,true);document.addEventListener("mozfullscreenchange",GLUT.onFullscreenEventChange,true);document.addEventListener("webkitfullscreenchange",GLUT.onFullscreenEventChange,true);Browser.requestFullscreen(false,false)}Module["_glutFullScreen"]=_glutFullScreen;_glutFullScreen.sig="v";function _glutInitDisplayMode(mode){GLUT.initDisplayMode=mode}Module["_glutInitDisplayMode"]=_glutInitDisplayMode;_glutInitDisplayMode.sig="vi";function _glutSwapBuffers(){}Module["_glutSwapBuffers"]=_glutSwapBuffers;_glutSwapBuffers.sig="v";function _glutMainLoop(){_glutReshapeWindow(Module["canvas"].width,Module["canvas"].height);_glutPostRedisplay();throw"unwind"}Module["_glutMainLoop"]=_glutMainLoop;_glutMainLoop.sig="v";function _XOpenDisplay(){return 1}Module["_XOpenDisplay"]=_XOpenDisplay;function _XCreateWindow(display,parent,x,y,width,height,border_width,depth,class_,visual,valuemask,attributes){Browser.setCanvasSize(width,height);return 2}Module["_XCreateWindow"]=_XCreateWindow;function _XChangeWindowAttributes(){}Module["_XChangeWindowAttributes"]=_XChangeWindowAttributes;function _XSetWMHints(){}Module["_XSetWMHints"]=_XSetWMHints;function _XMapWindow(){}Module["_XMapWindow"]=_XMapWindow;function _XStoreName(){}Module["_XStoreName"]=_XStoreName;function _XInternAtom(display,name_,hmm){return 0}Module["_XInternAtom"]=_XInternAtom;function _XSendEvent(){}Module["_XSendEvent"]=_XSendEvent;function _XPending(display){return 0}Module["_XPending"]=_XPending;var EGL={errorCode:12288,defaultDisplayInitialized:false,currentContext:0,currentReadSurface:0,currentDrawSurface:0,contextAttributes:{alpha:false,depth:false,stencil:false,antialias:false},stringCache:{},setErrorCode:function(code){EGL.errorCode=code},chooseConfig:function(display,attribList,config,config_size,numConfigs){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(attribList){for(;;){var param=HEAP32[attribList>>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAP32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};Module["EGL"]=EGL;function _eglGetDisplay(nativeDisplayType){EGL.setErrorCode(12288);return 62e3}Module["_eglGetDisplay"]=_eglGetDisplay;_eglGetDisplay.sig="ii";function _eglInitialize(display,majorVersion,minorVersion){if(display==62e3){if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1}else{EGL.setErrorCode(12296);return 0}}Module["_eglInitialize"]=_eglInitialize;_eglInitialize.sig="iiii";function _eglTerminate(display){if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1}Module["_eglTerminate"]=_eglTerminate;_eglTerminate.sig="ii";function _eglGetConfigs(display,configs,config_size,numConfigs){return EGL.chooseConfig(display,0,configs,config_size,numConfigs)}Module["_eglGetConfigs"]=_eglGetConfigs;_eglGetConfigs.sig="iiiii";function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}Module["_eglChooseConfig"]=_eglChooseConfig;_eglChooseConfig.sig="iiiiii";function _eglGetConfigAttrib(display,config,attribute,value){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12320:HEAP32[value>>2]=EGL.contextAttributes.alpha?32:24;return 1;case 12321:HEAP32[value>>2]=EGL.contextAttributes.alpha?8:0;return 1;case 12322:HEAP32[value>>2]=8;return 1;case 12323:HEAP32[value>>2]=8;return 1;case 12324:HEAP32[value>>2]=8;return 1;case 12325:HEAP32[value>>2]=EGL.contextAttributes.depth?24:0;return 1;case 12326:HEAP32[value>>2]=EGL.contextAttributes.stencil?8:0;return 1;case 12327:HEAP32[value>>2]=12344;return 1;case 12328:HEAP32[value>>2]=62002;return 1;case 12329:HEAP32[value>>2]=0;return 1;case 12330:HEAP32[value>>2]=4096;return 1;case 12331:HEAP32[value>>2]=16777216;return 1;case 12332:HEAP32[value>>2]=4096;return 1;case 12333:HEAP32[value>>2]=0;return 1;case 12334:HEAP32[value>>2]=0;return 1;case 12335:HEAP32[value>>2]=12344;return 1;case 12337:HEAP32[value>>2]=EGL.contextAttributes.antialias?4:0;return 1;case 12338:HEAP32[value>>2]=EGL.contextAttributes.antialias?1:0;return 1;case 12339:HEAP32[value>>2]=4;return 1;case 12340:HEAP32[value>>2]=12344;return 1;case 12341:case 12342:case 12343:HEAP32[value>>2]=-1;return 1;case 12345:case 12346:HEAP32[value>>2]=0;return 1;case 12347:HEAP32[value>>2]=0;return 1;case 12348:HEAP32[value>>2]=1;return 1;case 12349:case 12350:HEAP32[value>>2]=0;return 1;case 12351:HEAP32[value>>2]=12430;return 1;case 12352:HEAP32[value>>2]=4;return 1;case 12354:HEAP32[value>>2]=0;return 1;default:EGL.setErrorCode(12292);return 0}}Module["_eglGetConfigAttrib"]=_eglGetConfigAttrib;_eglGetConfigAttrib.sig="iiiii";function _eglCreateWindowSurface(display,config,win,attrib_list){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006}Module["_eglCreateWindowSurface"]=_eglCreateWindowSurface;_eglCreateWindowSurface.sig="iiiii";function _eglDestroySurface(display,surface){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1}Module["_eglDestroySurface"]=_eglDestroySurface;_eglDestroySurface.sig="iii";function _eglCreateContext(display,config,hmm,contextAttribs){if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion!=2){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}}Module["_eglCreateContext"]=_eglCreateContext;_eglCreateContext.sig="iiiii";function _eglDestroyContext(display,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1}Module["_eglDestroyContext"]=_eglDestroyContext;_eglDestroyContext.sig="iii";function _eglQuerySurface(display,surface,attribute,value){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12328:HEAP32[value>>2]=62002;return 1;case 12376:return 1;case 12375:HEAP32[value>>2]=Module["canvas"].width;return 1;case 12374:HEAP32[value>>2]=Module["canvas"].height;return 1;case 12432:HEAP32[value>>2]=-1;return 1;case 12433:HEAP32[value>>2]=-1;return 1;case 12434:HEAP32[value>>2]=-1;return 1;case 12422:HEAP32[value>>2]=12420;return 1;case 12441:HEAP32[value>>2]=12442;return 1;case 12435:HEAP32[value>>2]=12437;return 1;case 12416:case 12417:case 12418:case 12419:return 1;default:EGL.setErrorCode(12292);return 0}}Module["_eglQuerySurface"]=_eglQuerySurface;_eglQuerySurface.sig="iiiii";function _eglQueryContext(display,context,attribute,value){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12328:HEAP32[value>>2]=62002;return 1;case 12439:HEAP32[value>>2]=12448;return 1;case 12440:HEAP32[value>>2]=EGL.contextAttributes.majorVersion+1;return 1;case 12422:HEAP32[value>>2]=12420;return 1;default:EGL.setErrorCode(12292);return 0}}Module["_eglQueryContext"]=_eglQueryContext;_eglQueryContext.sig="iiiii";function _eglGetError(){return EGL.errorCode}Module["_eglGetError"]=_eglGetError;_eglGetError.sig="i";function _eglQueryString(display,name){if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.setErrorCode(12288);if(EGL.stringCache[name])return EGL.stringCache[name];var ret;switch(name){case 12371:ret=allocateUTF8("Emscripten");break;case 12372:ret=allocateUTF8("1.4 Emscripten EGL");break;case 12373:ret=allocateUTF8("");break;case 12429:ret=allocateUTF8("OpenGL_ES");break;default:EGL.setErrorCode(12300);return 0}EGL.stringCache[name]=ret;return ret}Module["_eglQueryString"]=_eglQueryString;_eglQueryString.sig="iii";function _eglBindAPI(api){if(api==12448){EGL.setErrorCode(12288);return 1}else{EGL.setErrorCode(12300);return 0}}Module["_eglBindAPI"]=_eglBindAPI;_eglBindAPI.sig="ii";function _eglQueryAPI(){EGL.setErrorCode(12288);return 12448}Module["_eglQueryAPI"]=_eglQueryAPI;_eglQueryAPI.sig="i";function _eglWaitClient(){EGL.setErrorCode(12288);return 1}Module["_eglWaitClient"]=_eglWaitClient;_eglWaitClient.sig="i";function _eglWaitNative(nativeEngineId){EGL.setErrorCode(12288);return 1}Module["_eglWaitNative"]=_eglWaitNative;_eglWaitNative.sig="ii";function _eglWaitGL(){return _eglWaitClient()}Module["_eglWaitGL"]=_eglWaitGL;_eglWaitGL.sig="i";function _eglSwapInterval(display,interval){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1}Module["_eglSwapInterval"]=_eglSwapInterval;_eglSwapInterval.sig="iii";function _eglMakeCurrent(display,draw,read,context){if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1}Module["_eglMakeCurrent"]=_eglMakeCurrent;_eglMakeCurrent.sig="iiiii";function _eglGetCurrentContext(){return EGL.currentContext}Module["_eglGetCurrentContext"]=_eglGetCurrentContext;_eglGetCurrentContext.sig="i";function _eglGetCurrentSurface(readdraw){if(readdraw==12378){return EGL.currentReadSurface}else if(readdraw==12377){return EGL.currentDrawSurface}else{EGL.setErrorCode(12300);return 0}}Module["_eglGetCurrentSurface"]=_eglGetCurrentSurface;_eglGetCurrentSurface.sig="ii";function _eglGetCurrentDisplay(){return EGL.currentContext?62e3:0}Module["_eglGetCurrentDisplay"]=_eglGetCurrentDisplay;_eglGetCurrentDisplay.sig="i";function _eglSwapBuffers(){if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0}Module["_eglSwapBuffers"]=_eglSwapBuffers;_eglSwapBuffers.sig="iii";function _eglReleaseThread(){EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.setErrorCode(12288);return 1}Module["_eglReleaseThread"]=_eglReleaseThread;_eglReleaseThread.sig="i";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+1;case 112:return 256+2;case 113:return 256+3;case 114:return 256+4;case 115:return 256+5;case 116:return 256+6;case 117:return 256+7;case 118:return 256+8;case 119:return 256+9;case 120:return 256+10;case 121:return 256+11;case 122:return 256+12;case 123:return 256+13;case 124:return 256+14;case 125:return 256+15;case 126:return 256+16;case 127:return 256+17;case 128:return 256+18;case 129:return 256+19;case 130:return 256+20;case 131:return 256+21;case 132:return 256+22;case 133:return 256+23;case 134:return 256+24;case 135:return 256+25;case 136:return 256+26;case 39:return 256+30;case 37:return 256+29;case 40:return 256+28;case 38:return 256+27;case 16:return 256+31;case 17:return 256+33;case 18:return 256+35;case 9:return 256+37;case 13:return 256+38;case 8:return 256+39;case 45:return 256+40;case 46:return 256+41;case 33:return 256+42;case 34:return 256+43;case 36:return 256+44;case 35:return 256+45;case 96:return 256+46;case 97:return 256+47;case 98:return 256+48;case 99:return 256+49;case 100:return 256+50;case 101:return 256+51;case 102:return 256+52;case 103:return 256+53;case 104:return 256+54;case 105:return 256+55;case 111:return 256+56;case 106:return 256+57;case 109:return 256+58;case 107:return 256+59;case 110:return 256+60;case 144:return 256+63;case 20:return 256+64;case 145:return 256+65;case 19:return 256+66;case 91:return 256+67;case 93:return 256+69;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)(charCode,1)},onKeyChanged:function(keyCode,status){if(!GLFW.active)return;var key=GLFW.DOMToGLFWKeyCode(keyCode);if(key==-1)return;GLFW.active.keys[key]=status;GLFW.active.domKeys[keyCode]=status;if(!GLFW.active.keyFunc)return;wasmTable.get(GLFW.active.keyFunc)(key,status)},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;i0){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},onMouseleave:function(event){if(!GLFW.active)return;if(event.target!=Module["canvas"]||!GLFW.active.cursorEnterFunc)return},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<0?Math.max(delta,1):Math.min(delta,-1);GLFW.wheelPos+=delta;if(!GLFW.active||!GLFW.active.scrollFunc||event.target!=Module["canvas"])return;wasmTable.get(GLFW.active.scrollFunc)(GLFW.wheelPos);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.width,GLFW.active.height)},onFramebufferSizeChanged:function(){if(!GLFW.active)return;if(!GLFW.active.framebufferSizeFunc)return},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;joy0},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)(width,height)},createWindow:function(width,height,title,monitor,share){var i,id;for(i=0;i0)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;i0;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;GLFW.windows[win.id-1]=null;if(GLFW.active.id==win.id)GLFW.active=null;for(var i=0;i>2];if(val){return 0}}return 1}Module["_uuid_is_null"]=_uuid_is_null;function _uuid_parse(inp,uu){inp=UTF8ToString(inp);if(inp.length===36){var i=0;var uuid=new Array(16);inp.toLowerCase().replace(/[0-9a-f]{2}/g,function(byte){if(i<16){uuid[i++]=parseInt(byte,16)}});if(i<16){return-1}else{writeArrayToMemory(uuid,uu);return 0}}else{return-1}}Module["_uuid_parse"]=_uuid_parse;function _uuid_unparse(uu,out,upper){var i=0;var uuid="xxxx-xx-xx-xx-xxxxxx".replace(/[x]/g,function(c){var r=upper?HEAPU8[uu+i>>0].toString(16).toUpperCase():HEAPU8[uu+i>>0].toString(16);r=r.length===1?"0"+r:r;i++;return r});stringToUTF8(uuid,out,37)}Module["_uuid_unparse"]=_uuid_unparse;function _uuid_unparse_lower(uu,out){_uuid_unparse(uu,out)}Module["_uuid_unparse_lower"]=_uuid_unparse_lower;function _uuid_unparse_upper(uu,out){_uuid_unparse(uu,out,true)}Module["_uuid_unparse_upper"]=_uuid_unparse_upper;function _uuid_type(uu){return 4}Module["_uuid_type"]=_uuid_type;function _uuid_variant(uu){return 1}Module["_uuid_variant"]=_uuid_variant;var GLEW={isLinaroFork:1,extensions:null,error:{0:null,1:null,2:null,3:null,4:null,5:null,6:null,7:null,8:null},version:{1:null,2:null,3:null,4:null},errorStringConstantFromCode:function(error){if(GLEW.isLinaroFork){switch(error){case 4:return"OpenGL ES lib expected, found OpenGL lib";case 5:return"OpenGL lib expected, found OpenGL ES lib";case 6:return"Missing EGL version";case 7:return"EGL 1.1 and up are supported";default:break}}switch(error){case 0:return"No error";case 1:return"Missing GL version";case 2:return"GL 1.1 and up are supported";case 3:return"GLX 1.2 and up are supported";default:return null}},errorString:function(error){if(!GLEW.error[error]){var string=GLEW.errorStringConstantFromCode(error);if(!string){string="Unknown error";error=8}GLEW.error[error]=allocate(intArrayFromString(string),ALLOC_NORMAL)}return GLEW.error[error]},versionStringConstantFromCode:function(name){switch(name){case 1:return"1.10.0";case 2:return"1";case 3:return"10";case 4:return"0";default:return null}},versionString:function(name){if(!GLEW.version[name]){var string=GLEW.versionStringConstantFromCode(name);if(!string)return 0;GLEW.version[name]=allocate(intArrayFromString(string),ALLOC_NORMAL)}return GLEW.version[name]},extensionIsSupported:function(name){if(!GLEW.extensions){GLEW.extensions=UTF8ToString(_glGetString(7939)).split(" ")}if(GLEW.extensions.includes(name))return 1;return GLEW.extensions.includes("GL_"+name)}};Module["GLEW"]=GLEW;function _glewInit(){return 0}Module["_glewInit"]=_glewInit;function _glewIsSupported(name){var exts=UTF8ToString(name).split(" ");for(var i=0;i0)};req.onerror=function(error){callback(error)}})}};Module["IDBStore"]=IDBStore;function _emscripten_idb_async_load(db,id,arg,onload,onerror){IDBStore.getFile(UTF8ToString(db),UTF8ToString(id),function(error,byteArray){if(error){if(onerror)wasmTable.get(onerror)(arg);return}var buffer=_malloc(byteArray.length);HEAPU8.set(byteArray,buffer);wasmTable.get(onload)(arg,buffer,byteArray.length);_free(buffer)})}Module["_emscripten_idb_async_load"]=_emscripten_idb_async_load;function _emscripten_idb_async_store(db,id,ptr,num,arg,onstore,onerror){IDBStore.setFile(UTF8ToString(db),UTF8ToString(id),new Uint8Array(HEAPU8.subarray(ptr,ptr+num)),function(error){if(error){if(onerror)wasmTable.get(onerror)(arg);return}if(onstore)wasmTable.get(onstore)(arg)})}Module["_emscripten_idb_async_store"]=_emscripten_idb_async_store;function _emscripten_idb_async_delete(db,id,arg,ondelete,onerror){IDBStore.deleteFile(UTF8ToString(db),UTF8ToString(id),function(error){if(error){if(onerror)wasmTable.get(onerror)(arg);return}if(ondelete)wasmTable.get(ondelete)(arg)})}Module["_emscripten_idb_async_delete"]=_emscripten_idb_async_delete;function _emscripten_idb_async_exists(db,id,arg,oncheck,onerror){IDBStore.existsFile(UTF8ToString(db),UTF8ToString(id),function(error,exists){if(error){if(onerror)wasmTable.get(onerror)(arg);return}if(oncheck)wasmTable.get(oncheck)(arg,exists)})}Module["_emscripten_idb_async_exists"]=_emscripten_idb_async_exists;function _emscripten_idb_load(){throw"Please compile your program with async support in order to use synchronous operations like emscripten_idb_load, etc."}Module["_emscripten_idb_load"]=_emscripten_idb_load;function _emscripten_idb_store(){throw"Please compile your program with async support in order to use synchronous operations like emscripten_idb_store, etc."}Module["_emscripten_idb_store"]=_emscripten_idb_store;function _emscripten_idb_delete(){throw"Please compile your program with async support in order to use synchronous operations like emscripten_idb_delete, etc."}Module["_emscripten_idb_delete"]=_emscripten_idb_delete;function _emscripten_idb_exists(){throw"Please compile your program with async support in order to use synchronous operations like emscripten_idb_exists, etc."}Module["_emscripten_idb_exists"]=_emscripten_idb_exists;function runAndAbortIfError(func){try{return func()}catch(e){abort(e)}}Module["runAndAbortIfError"]=runAndAbortIfError;function _emscripten_sleep(){throw"Please compile your program with async support in order to use asynchronous operations like emscripten_sleep"}Module["_emscripten_sleep"]=_emscripten_sleep;function _emscripten_wget(){throw"Please compile your program with async support in order to use asynchronous operations like emscripten_wget"}Module["_emscripten_wget"]=_emscripten_wget;function _emscripten_wget_data(){throw"Please compile your program with async support in order to use asynchronous operations like emscripten_wget_data"}Module["_emscripten_wget_data"]=_emscripten_wget_data;function _emscripten_scan_registers(){throw"Please compile your program with async support in order to use asynchronous operations like emscripten_scan_registers"}Module["_emscripten_scan_registers"]=_emscripten_scan_registers;function _emscripten_fiber_init(){throw"Please compile your program with async support in order to use asynchronous operations like emscripten_fiber_init"}Module["_emscripten_fiber_init"]=_emscripten_fiber_init;function _emscripten_fiber_init_from_current_context(){throw"Please compile your program with async support in order to use asynchronous operations like emscripten_fiber_init_from_current_context"}Module["_emscripten_fiber_init_from_current_context"]=_emscripten_fiber_init_from_current_context;function _emscripten_fiber_swap(){throw"Please compile your program with async support in order to use asynchronous operations like emscripten_fiber_swap"}Module["_emscripten_fiber_swap"]=_emscripten_fiber_swap;function _emscripten_is_main_browser_thread(){return!ENVIRONMENT_IS_WORKER}Module["_emscripten_is_main_browser_thread"]=_emscripten_is_main_browser_thread;function ___cxa_thread_atexit(a0,a1){return _atexit(a0,a1)}Module["___cxa_thread_atexit"]=___cxa_thread_atexit;___cxa_thread_atexit.sig="iii";function ___cxa_thread_atexit_impl(a0,a1){return _atexit(a0,a1)}Module["___cxa_thread_atexit_impl"]=___cxa_thread_atexit_impl;___cxa_thread_atexit_impl.sig="iii";Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var 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;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var NODEJS_PATH=require("path");NODEFS.staticInit()}ERRNO_CODES={"EPERM":63,"ENOENT":44,"ESRCH":71,"EINTR":27,"EIO":29,"ENXIO":60,"E2BIG":1,"ENOEXEC":45,"EBADF":8,"ECHILD":12,"EAGAIN":6,"EWOULDBLOCK":6,"ENOMEM":48,"EACCES":2,"EFAULT":21,"ENOTBLK":105,"EBUSY":10,"EEXIST":20,"EXDEV":75,"ENODEV":43,"ENOTDIR":54,"EISDIR":31,"EINVAL":28,"ENFILE":41,"EMFILE":33,"ENOTTY":59,"ETXTBSY":74,"EFBIG":22,"ENOSPC":51,"ESPIPE":70,"EROFS":69,"EMLINK":34,"EPIPE":64,"EDOM":18,"ERANGE":68,"ENOMSG":49,"EIDRM":24,"ECHRNG":106,"EL2NSYNC":156,"EL3HLT":107,"EL3RST":108,"ELNRNG":109,"EUNATCH":110,"ENOCSI":111,"EL2HLT":112,"EDEADLK":16,"ENOLCK":46,"EBADE":113,"EBADR":114,"EXFULL":115,"ENOANO":104,"EBADRQC":103,"EBADSLT":102,"EDEADLOCK":16,"EBFONT":101,"ENOSTR":100,"ENODATA":116,"ETIME":117,"ENOSR":118,"ENONET":119,"ENOPKG":120,"EREMOTE":121,"ENOLINK":47,"EADV":122,"ESRMNT":123,"ECOMM":124,"EPROTO":65,"EMULTIHOP":36,"EDOTDOT":125,"EBADMSG":9,"ENOTUNIQ":126,"EBADFD":127,"EREMCHG":128,"ELIBACC":129,"ELIBBAD":130,"ELIBSCN":131,"ELIBMAX":132,"ELIBEXEC":133,"ENOSYS":52,"ENOTEMPTY":55,"ENAMETOOLONG":37,"ELOOP":32,"EOPNOTSUPP":138,"EPFNOSUPPORT":139,"ECONNRESET":15,"ENOBUFS":42,"EAFNOSUPPORT":5,"EPROTOTYPE":67,"ENOTSOCK":57,"ENOPROTOOPT":50,"ESHUTDOWN":140,"ECONNREFUSED":14,"EADDRINUSE":3,"ECONNABORTED":13,"ENETUNREACH":40,"ENETDOWN":38,"ETIMEDOUT":73,"EHOSTDOWN":142,"EHOSTUNREACH":23,"EINPROGRESS":26,"EALREADY":7,"EDESTADDRREQ":17,"EMSGSIZE":35,"EPROTONOSUPPORT":66,"ESOCKTNOSUPPORT":137,"EADDRNOTAVAIL":4,"ENETRESET":39,"EISCONN":30,"ENOTCONN":53,"ETOOMANYREFS":141,"EUSERS":136,"EDQUOT":19,"ESTALE":72,"ENOTSUP":138,"ENOMEDIUM":148,"EILSEQ":25,"EOVERFLOW":61,"ECANCELED":11,"ENOTRECOVERABLE":56,"EOWNERDEAD":62,"ESTRPIPE":135};var 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)}var emSetImmediate;var emClearImmediate;if(typeof setImmediate!=="undefined"){emSetImmediate=setImmediate;emClearImmediate=clearImmediate}else if(typeof addEventListener==="function"){var __setImmediate_id_counter=0;var __setImmediate_queue=[];var __setImmediate_message_id="_si";function __setImmediate_cb(e){if(e.data===__setImmediate_message_id){e.stopPropagation();__setImmediate_queue.shift()();++__setImmediate_id_counter}}addEventListener("message",__setImmediate_cb,true);emSetImmediate=function(func){postMessage(__setImmediate_message_id,"*");return __setImmediate_id_counter+__setImmediate_queue.push(func)-1};emClearImmediate=function(id){var index=id-__setImmediate_id_counter;if(index>=0&&index<__setImmediate_queue.length)__setImmediate_queue[index]=function(){}}}var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i>2]=allocateUTF8OnStack(thisProgram);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus||e=="unwind"){return}var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}finally{calledMain=true}}var dylibsLoaded=false;function run(args){args=args||arguments_;if(runDependencies>0){return}if(!dylibsLoaded){preloadDylibs();dylibsLoaded=true;if(runDependencies>0){return}}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);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){EXITSTATUS=status;if(keepRuntimeAlive()){}else{exitRuntime()}procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}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();
+
+
+ return _createPyodideModule.ready
+}
+);
+})();
+globalThis._createPyodideModule = _createPyodideModule;
diff --git a/static/pyodide/pyodide.asm.wasm b/static/pyodide/pyodide.asm.wasm
new file mode 100644
index 0000000000000000000000000000000000000000..191861b1d39a250ffe12a081564fbf4665a3530c
--- /dev/null
+++ b/static/pyodide/pyodide.asm.wasm
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7e276b3f7535c633663c45efdd7afeeb1312b91c0919123ad999b92b1999df7a
+size 9484381
diff --git a/static/pyodide/pyodide.d.ts b/static/pyodide/pyodide.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c45523257ce216d4282425fa85597107d3fdcecd
--- /dev/null
+++ b/static/pyodide/pyodide.d.ts
@@ -0,0 +1,834 @@
+/**
+ * Is the argument a :any:`PyProxy`?
+ * @param jsobj Object to test.
+ * @returns Is ``jsobj`` a :any:`PyProxy`?
+ */
+declare function isPyProxy(jsobj: any): jsobj is PyProxy;
+type PyProxyCache = {
+ cacheId: number;
+ refcnt: number;
+ leaked?: boolean;
+};
+type PyProxy = PyProxyClass & {
+ [x: string]: any;
+};
+declare class PyProxyClass {
+ $$: {
+ ptr: number;
+ cache: PyProxyCache;
+ destroyed_msg?: string;
+ };
+ $$flags: number;
+ /** @private */
+ constructor();
+ get [Symbol.toStringTag](): string;
+ /**
+ * The name of the type of the object.
+ *
+ * Usually the value is ``"module.name"`` but for builtins or
+ * interpreter-defined types it is just ``"name"``. As pseudocode this is:
+ *
+ * .. code-block:: python
+ *
+ * ty = type(x)
+ * if ty.__module__ == 'builtins' or ty.__module__ == "__main__":
+ * return ty.__name__
+ * else:
+ * ty.__module__ + "." + ty.__name__
+ *
+ */
+ get type(): string;
+ toString(): string;
+ /**
+ * Destroy the ``PyProxy``. This will release the memory. Any further attempt
+ * to use the object will raise an error.
+ *
+ * In a browser supporting `FinalizationRegistry
+ * `_
+ * Pyodide will automatically destroy the ``PyProxy`` when it is garbage
+ * collected, however there is no guarantee that the finalizer will be run in
+ * a timely manner so it is better to ``destroy`` the proxy explicitly.
+ *
+ * @param destroyed_msg The error message to print if use is attempted after
+ * destroying. Defaults to "Object has already been destroyed".
+ */
+ destroy(destroyed_msg?: string): void;
+ /**
+ * Make a new PyProxy pointing to the same Python object.
+ * Useful if the PyProxy is destroyed somewhere else.
+ */
+ copy(): PyProxy;
+ /**
+ * Converts the ``PyProxy`` into a JavaScript object as best as possible. By
+ * default does a deep conversion, if a shallow conversion is desired, you can
+ * use ``proxy.toJs({depth : 1})``. See :ref:`Explicit Conversion of PyProxy
+ * ` for more info.
+ * @param options
+ * @return The JavaScript object resulting from the conversion.
+ */
+ toJs({ depth, pyproxies, create_pyproxies, dict_converter, default_converter }?: {
+ /** How many layers deep to perform the conversion. Defaults to infinite */
+ depth?: number;
+ /**
+ * If provided, ``toJs`` will store all PyProxies created in this list. This
+ * allows you to easily destroy all the PyProxies by iterating the list
+ * without having to recurse over the generated structure. The most common
+ * use case is to create a new empty list, pass the list as `pyproxies`, and
+ * then later iterate over `pyproxies` to destroy all of created proxies.
+ */
+ pyproxies?: PyProxy[];
+ /**
+ * If false, ``toJs`` will throw a ``ConversionError`` rather than
+ * producing a ``PyProxy``.
+ */
+ create_pyproxies?: boolean;
+ /**
+ * A function to be called on an iterable of pairs ``[key, value]``. Convert
+ * this iterable of pairs to the desired output. For instance,
+ * ``Object.fromEntries`` would convert the dict to an object, ``Array.from``
+ * converts it to an array of entries, and ``(it) => new Map(it)`` converts
+ * it to a ``Map`` (which is the default behavior).
+ */
+ dict_converter?: (array: Iterable<[
+ key: string,
+ value: any
+ ]>) => any;
+ /**
+ * Optional argument to convert objects with no default conversion. See the
+ * documentation of :any:`pyodide.to_js`.
+ */
+ default_converter?: (obj: PyProxy, convert: (obj: PyProxy) => any, cacheConversion: (obj: PyProxy, result: any) => void) => any;
+ }): any;
+ /**
+ * Check whether the :any:`PyProxy.length` getter is available on this PyProxy. A
+ * Typescript type guard.
+ */
+ supportsLength(): this is PyProxyWithLength;
+ /**
+ * Check whether the :any:`PyProxy.get` method is available on this PyProxy. A
+ * Typescript type guard.
+ */
+ supportsGet(): this is PyProxyWithGet;
+ /**
+ * Check whether the :any:`PyProxy.set` method is available on this PyProxy. A
+ * Typescript type guard.
+ */
+ supportsSet(): this is PyProxyWithSet;
+ /**
+ * Check whether the :any:`PyProxy.has` method is available on this PyProxy. A
+ * Typescript type guard.
+ */
+ supportsHas(): this is PyProxyWithHas;
+ /**
+ * Check whether the PyProxy is iterable. A Typescript type guard for
+ * :any:`PyProxy.[iterator]`.
+ */
+ isIterable(): this is PyProxyIterable;
+ /**
+ * Check whether the PyProxy is iterable. A Typescript type guard for
+ * :any:`PyProxy.next`.
+ */
+ isIterator(): this is PyProxyIterator;
+ /**
+ * Check whether the PyProxy is awaitable. A Typescript type guard, if this
+ * function returns true Typescript considers the PyProxy to be a ``Promise``.
+ */
+ isAwaitable(): this is PyProxyAwaitable;
+ /**
+ * Check whether the PyProxy is a buffer. A Typescript type guard for
+ * :any:`PyProxy.getBuffer`.
+ */
+ isBuffer(): this is PyProxyBuffer;
+ /**
+ * Check whether the PyProxy is a Callable. A Typescript type guard, if this
+ * returns true then Typescript considers the Proxy to be callable of
+ * signature ``(args... : any[]) => PyProxy | number | bigint | string |
+ * boolean | undefined``.
+ */
+ isCallable(): this is PyProxyCallable;
+}
+type PyProxyWithLength = PyProxy & PyProxyLengthMethods;
+// Controlled by HAS_LENGTH, appears for any object with __len__ or sq_length
+// or mp_length methods
+declare class PyProxyLengthMethods {
+ /**
+ * The length of the object.
+ *
+ * Present only if the proxied Python object has a ``__len__`` method.
+ */
+ get length(): number;
+}
+type PyProxyWithGet = PyProxy & PyProxyGetItemMethods;
+// Controlled by HAS_GET, appears for any class with __getitem__,
+// mp_subscript, or sq_item methods
+declare class PyProxyGetItemMethods {
+ /**
+ * This translates to the Python code ``obj[key]``.
+ *
+ * Present only if the proxied Python object has a ``__getitem__`` method.
+ *
+ * @param key The key to look up.
+ * @returns The corresponding value.
+ */
+ get(key: any): any;
+}
+type PyProxyWithSet = PyProxy & PyProxySetItemMethods;
+// Controlled by HAS_SET, appears for any class with __setitem__, __delitem__,
+// mp_ass_subscript, or sq_ass_item.
+declare class PyProxySetItemMethods {
+ /**
+ * This translates to the Python code ``obj[key] = value``.
+ *
+ * Present only if the proxied Python object has a ``__setitem__`` method.
+ *
+ * @param key The key to set.
+ * @param value The value to set it to.
+ */
+ set(key: any, value: any): void;
+ /**
+ * This translates to the Python code ``del obj[key]``.
+ *
+ * Present only if the proxied Python object has a ``__delitem__`` method.
+ *
+ * @param key The key to delete.
+ */
+ delete(key: any): void;
+}
+type PyProxyWithHas = PyProxy & PyProxyContainsMethods;
+// Controlled by HAS_CONTAINS flag, appears for any class with __contains__ or
+// sq_contains
+declare class PyProxyContainsMethods {
+ /**
+ * This translates to the Python code ``key in obj``.
+ *
+ * Present only if the proxied Python object has a ``__contains__`` method.
+ *
+ * @param key The key to check for.
+ * @returns Is ``key`` present?
+ */
+ has(key: any): boolean;
+}
+type PyProxyIterable = PyProxy & PyProxyIterableMethods;
+// Controlled by IS_ITERABLE, appears for any object with __iter__ or tp_iter,
+// unless they are iterators. See: https://docs.python.org/3/c-api/iter.html
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
+// This avoids allocating a PyProxy wrapper for the temporary iterator.
+declare class PyProxyIterableMethods {
+ /**
+ * This translates to the Python code ``iter(obj)``. Return an iterator
+ * associated to the proxy. See the documentation for `Symbol.iterator
+ * `_.
+ *
+ * Present only if the proxied Python object is iterable (i.e., has an
+ * ``__iter__`` method).
+ *
+ * This will be used implicitly by ``for(let x of proxy){}``.
+ */
+ [Symbol.iterator](): Iterator;
+}
+type PyProxyIterator = PyProxy & PyProxyIteratorMethods;
+// Controlled by IS_ITERATOR, appears for any object with a __next__ or
+// tp_iternext method.
+declare class PyProxyIteratorMethods {
+ /** @private */
+ [Symbol.iterator](): this;
+ /**
+ * This translates to the Python code ``next(obj)``. Returns the next value of
+ * the generator. See the documentation for `Generator.prototype.next
+ * `_.
+ * The argument will be sent to the Python generator.
+ *
+ * This will be used implicitly by ``for(let x of proxy){}``.
+ *
+ * Present only if the proxied Python object is a generator or iterator (i.e.,
+ * has a ``send`` or ``__next__`` method).
+ *
+ * @param any The value to send to the generator. The value will be assigned
+ * as a result of a yield expression.
+ * @returns An Object with two properties: ``done`` and ``value``. When the
+ * generator yields ``some_value``, ``next`` returns ``{done : false, value :
+ * some_value}``. When the generator raises a ``StopIteration(result_value)``
+ * exception, ``next`` returns ``{done : true, value : result_value}``.
+ */
+ next(arg?: any): IteratorResult;
+}
+type PyProxyAwaitable = PyProxy & Promise;
+type PyProxyCallable = PyProxy & PyProxyCallableMethods & ((...args: any[]) => any);
+declare class PyProxyCallableMethods {
+ apply(jsthis: PyProxyClass, jsargs: any): any;
+ call(jsthis: PyProxyClass, ...jsargs: any): any;
+ /**
+ * Call the function with key word arguments.
+ * The last argument must be an object with the keyword arguments.
+ */
+ callKwargs(...jsargs: any): any;
+}
+type PyProxyBuffer = PyProxy & PyProxyBufferMethods;
+declare class PyProxyBufferMethods {
+ /**
+ * Get a view of the buffer data which is usable from JavaScript. No copy is
+ * ever performed.
+ *
+ * Present only if the proxied Python object supports the `Python Buffer
+ * Protocol `_.
+ *
+ * We do not support suboffsets, if the buffer requires suboffsets we will
+ * throw an error. JavaScript nd array libraries can't handle suboffsets
+ * anyways. In this case, you should use the :any:`toJs` api or copy the
+ * buffer to one that doesn't use suboffets (using e.g.,
+ * `numpy.ascontiguousarray
+ * `_).
+ *
+ * If the buffer stores big endian data or half floats, this function will
+ * fail without an explicit type argument. For big endian data you can use
+ * ``toJs``. `DataViews
+ * `_
+ * have support for big endian data, so you might want to pass
+ * ``'dataview'`` as the type argument in that case.
+ *
+ * @param type The type of the :any:`PyBuffer.data ` field in the
+ * output. Should be one of: ``"i8"``, ``"u8"``, ``"u8clamped"``, ``"i16"``,
+ * ``"u16"``, ``"i32"``, ``"u32"``, ``"i32"``, ``"u32"``, ``"i64"``,
+ * ``"u64"``, ``"f32"``, ``"f64``, or ``"dataview"``. This argument is
+ * optional, if absent ``getBuffer`` will try to determine the appropriate
+ * output type based on the buffer `format string
+ * `_.
+ * @returns :any:`PyBuffer `
+ */
+ getBuffer(type?: string): PyBuffer;
+}
+type TypedArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array;
+/**
+ * A class to allow access to a Python data buffers from JavaScript. These are
+ * produced by :any:`PyProxy.getBuffer` and cannot be constructed directly.
+ * When you are done, release it with the :any:`release `
+ * method. See
+ * `Python buffer protocol documentation
+ * `_ for more information.
+ *
+ * To find the element ``x[a_1, ..., a_n]``, you could use the following code:
+ *
+ * .. code-block:: js
+ *
+ * function multiIndexToIndex(pybuff, multiIndex){
+ * if(multindex.length !==pybuff.ndim){
+ * throw new Error("Wrong length index");
+ * }
+ * let idx = pybuff.offset;
+ * for(let i = 0; i < pybuff.ndim; i++){
+ * if(multiIndex[i] < 0){
+ * multiIndex[i] = pybuff.shape[i] - multiIndex[i];
+ * }
+ * if(multiIndex[i] < 0 || multiIndex[i] >= pybuff.shape[i]){
+ * throw new Error("Index out of range");
+ * }
+ * idx += multiIndex[i] * pybuff.stride[i];
+ * }
+ * return idx;
+ * }
+ * console.log("entry is", pybuff.data[multiIndexToIndex(pybuff, [2, 0, -1])]);
+ *
+ * .. admonition:: Contiguity
+ * :class: warning
+ *
+ * If the buffer is not contiguous, the ``data`` TypedArray will contain
+ * data that is not part of the buffer. Modifying this data may lead to
+ * undefined behavior.
+ *
+ * .. admonition:: Readonly buffers
+ * :class: warning
+ *
+ * If ``buffer.readonly`` is ``true``, you should not modify the buffer.
+ * Modifying a readonly buffer may lead to undefined behavior.
+ *
+ * .. admonition:: Converting between TypedArray types
+ * :class: warning
+ *
+ * The following naive code to change the type of a typed array does not
+ * work:
+ *
+ * .. code-block:: js
+ *
+ * // Incorrectly convert a TypedArray.
+ * // Produces a Uint16Array that points to the entire WASM memory!
+ * let myarray = new Uint16Array(buffer.data.buffer);
+ *
+ * Instead, if you want to convert the output TypedArray, you need to say:
+ *
+ * .. code-block:: js
+ *
+ * // Correctly convert a TypedArray.
+ * let myarray = new Uint16Array(
+ * buffer.data.buffer,
+ * buffer.data.byteOffset,
+ * buffer.data.byteLength
+ * );
+ */
+declare class PyBuffer {
+ /**
+ * The offset of the first entry of the array. For instance if our array
+ * is 3d, then you will find ``array[0,0,0]`` at
+ * ``pybuf.data[pybuf.offset]``
+ */
+ offset: number;
+ /**
+ * If the data is readonly, you should not modify it. There is no way
+ * for us to enforce this, but it may cause very weird behavior.
+ */
+ readonly: boolean;
+ /**
+ * The format string for the buffer. See `the Python documentation on
+ * format strings
+ * `_.
+ */
+ format: string;
+ /**
+ * How large is each entry (in bytes)?
+ */
+ itemsize: number;
+ /**
+ * The number of dimensions of the buffer. If ``ndim`` is 0, the buffer
+ * represents a single scalar or struct. Otherwise, it represents an
+ * array.
+ */
+ ndim: number;
+ /**
+ * The total number of bytes the buffer takes up. This is equal to
+ * ``buff.data.byteLength``.
+ */
+ nbytes: number;
+ /**
+ * The shape of the buffer, that is how long it is in each dimension.
+ * The length will be equal to ``ndim``. For instance, a 2x3x4 array
+ * would have shape ``[2, 3, 4]``.
+ */
+ shape: number[];
+ /**
+ * An array of of length ``ndim`` giving the number of elements to skip
+ * to get to a new element in each dimension. See the example definition
+ * of a ``multiIndexToIndex`` function above.
+ */
+ strides: number[];
+ /**
+ * The actual data. A typed array of an appropriate size backed by a
+ * segment of the WASM memory.
+ *
+ * The ``type`` argument of :any:`PyProxy.getBuffer`
+ * determines which sort of ``TypedArray`` this is. By default
+ * :any:`PyProxy.getBuffer` will look at the format string to determine the most
+ * appropriate option.
+ */
+ data: TypedArray;
+ /**
+ * Is it C contiguous?
+ */
+ c_contiguous: boolean;
+ /**
+ * Is it Fortran contiguous?
+ */
+ f_contiguous: boolean;
+ /**
+ * @private
+ */
+ _released: boolean;
+ /**
+ * @private
+ */
+ _view_ptr: number;
+ /**
+ * @private
+ */
+ constructor();
+ /**
+ * Release the buffer. This allows the memory to be reclaimed.
+ */
+ release(): void;
+}
+/**
+ * Load a package or a list of packages over the network. This installs the
+ * package in the virtual filesystem. The package needs to be imported from
+ * Python before it can be used.
+ *
+ * @param names Either a single package name or
+ * URL or a list of them. URLs can be absolute or relative. The URLs must have
+ * file name ``.js`` and there must be a file called
+ * ``.data`` in the same directory. The argument can be a
+ * ``PyProxy`` of a list, in which case the list will be converted to JavaScript
+ * and the ``PyProxy`` will be destroyed.
+ * @param messageCallback A callback, called with progress messages
+ * (optional)
+ * @param errorCallback A callback, called with error/warning messages
+ * (optional)
+ * @async
+ */
+declare function loadPackage(names: string | PyProxy | Array, messageCallback?: (msg: string) => void, errorCallback?: (msg: string) => void): Promise;
+/**
+ * The list of packages that Pyodide has loaded.
+ * Use ``Object.keys(pyodide.loadedPackages)`` to get the list of names of
+ * loaded packages, and ``pyodide.loadedPackages[package_name]`` to access
+ * install location for a particular ``package_name``.
+ */
+declare let loadedPackages: {
+ [key: string]: string;
+};
+/**
+ * A JavaScript error caused by a Python exception.
+ *
+ * In order to reduce the risk of large memory leaks, the ``PythonError``
+ * contains no reference to the Python exception that caused it. You can find
+ * the actual Python exception that caused this error as `sys.last_value
+ * `_.
+ *
+ * See :ref:`type-translations-errors` for more information.
+ *
+ * .. admonition:: Avoid Stack Frames
+ * :class: warning
+ *
+ * If you make a :any:`PyProxy` of ``sys.last_value``, you should be
+ * especially careful to :any:`destroy() ` it when you are
+ * done. You may leak a large amount of memory including the local
+ * variables of all the stack frames in the traceback if you don't. The
+ * easiest way is to only handle the exception in Python.
+ */
+declare class PythonError extends Error {
+ /** The address of the error we are wrapping. We may later compare this
+ * against sys.last_value.
+ * WARNING: we don't own a reference to this pointer, dereferencing it
+ * may be a use-after-free error!
+ * @private
+ */
+ __error_address: number;
+ constructor(message: string, error_address: number);
+}
+/**
+ * An alias to the Python :py:mod:`pyodide` package.
+ *
+ * You can use this to call functions defined in the Pyodide Python package
+ * from JavaScript.
+ */
+declare let pyodide_py: PyProxy; // actually defined in loadPyodide (see pyodide.js)
+/**
+ *
+ * An alias to the global Python namespace.
+ *
+ * For example, to access a variable called ``foo`` in the Python global
+ * scope, use ``pyodide.globals.get("foo")``
+ */
+declare let globals: PyProxy; // actually defined in loadPyodide (see pyodide.js)
+/**
+ *
+ * The Pyodide version.
+ *
+ * It can be either the exact release version (e.g. ``0.1.0``), or
+ * the latest release version followed by the number of commits since, and
+ * the git hash of the current commit (e.g. ``0.1.0-1-bd84646``).
+ */
+declare let version: string; // actually defined in loadPyodide (see pyodide.js)
+/**
+ * Runs a string of Python code from JavaScript, using :any:`pyodide.eval_code`
+ * to evaluate the code. If the last statement in the Python code is an
+ * expression (and the code doesn't end with a semicolon), the value of the
+ * expression is returned.
+ *
+ * .. admonition:: Positional globals argument
+ * :class: warning
+ *
+ * In Pyodide v0.19, this function took the globals parameter as a positional
+ * argument rather than as a named argument. In v0.20 this will still work
+ * but it is deprecated. It will be removed in v0.21.
+ *
+ * @param code Python code to evaluate
+ * @param options
+ * @param options.globals An optional Python dictionary to use as the globals.
+ * Defaults to :any:`pyodide.globals`.
+ * @returns The result of the Python code translated to JavaScript. See the
+ * documentation for :any:`pyodide.eval_code` for more info.
+ */
+declare function runPython(code: string, options?: {
+ globals?: PyProxy;
+}): any;
+/**
+ * Inspect a Python code chunk and use :js:func:`pyodide.loadPackage` to install
+ * any known packages that the code chunk imports. Uses the Python API
+ * :func:`pyodide.find\_imports` to inspect the code.
+ *
+ * For example, given the following code as input
+ *
+ * .. code-block:: python
+ *
+ * import numpy as np x = np.array([1, 2, 3])
+ *
+ * :js:func:`loadPackagesFromImports` will call
+ * ``pyodide.loadPackage(['numpy'])``.
+ *
+ * @param code The code to inspect.
+ * @param messageCallback The ``messageCallback`` argument of
+ * :any:`pyodide.loadPackage` (optional).
+ * @param errorCallback The ``errorCallback`` argument of
+ * :any:`pyodide.loadPackage` (optional).
+ * @async
+ */
+declare function loadPackagesFromImports(code: string, messageCallback?: (msg: string) => void, errorCallback?: (err: string) => void): Promise;
+/**
+ * Run a Python code string with top level await using
+ * :any:`pyodide.eval_code_async` to evaluate the code. Returns a promise which
+ * resolves when execution completes. If the last statement in the Python code
+ * is an expression (and the code doesn't end with a semicolon), the returned
+ * promise will resolve to the value of this expression.
+ *
+ * For example:
+ *
+ * .. code-block:: pyodide
+ *
+ * let result = await pyodide.runPythonAsync(`
+ * from js import fetch
+ * response = await fetch("./packages.json")
+ * packages = await response.json()
+ * # If final statement is an expression, its value is returned to JavaScript
+ * len(packages.packages.object_keys())
+ * `);
+ * console.log(result); // 79
+ *
+ * .. admonition:: Python imports
+ * :class: warning
+ *
+ * Since pyodide 0.18.0, you must call :js:func:`loadPackagesFromImports` to
+ * import any python packages referenced via `import` statements in your
+ * code. This function will no longer do it for you.
+ *
+ * .. admonition:: Positional globals argument
+ * :class: warning
+ *
+ * In Pyodide v0.19, this function took the globals parameter as a
+ * positional argument rather than as a named argument. In v0.20 this will
+ * still work but it is deprecated. It will be removed in v0.21.
+ *
+ * @param code Python code to evaluate
+ * @param options
+ * @param options.globals An optional Python dictionary to use as the globals.
+ * Defaults to :any:`pyodide.globals`.
+ * @returns The result of the Python code translated to JavaScript.
+ * @async
+ */
+declare function runPythonAsync(code: string, options?: {
+ globals?: PyProxy;
+}): Promise;
+/**
+ * Registers the JavaScript object ``module`` as a JavaScript module named
+ * ``name``. This module can then be imported from Python using the standard
+ * Python import system. If another module by the same name has already been
+ * imported, this won't have much effect unless you also delete the imported
+ * module from ``sys.modules``. This calls the {any}`pyodide_py` API
+ * :func:`pyodide.register_js_module`.
+ *
+ * @param name Name of the JavaScript module to add
+ * @param module JavaScript object backing the module
+ */
+declare function registerJsModule(name: string, module: object): void;
+/**
+ * Tell Pyodide about Comlink.
+ * Necessary to enable importing Comlink proxies into Python.
+ */
+declare function registerComlink(Comlink: any): void;
+/**
+ * Unregisters a JavaScript module with given name that has been previously
+ * registered with :js:func:`pyodide.registerJsModule` or
+ * :func:`pyodide.register_js_module`. If a JavaScript module with that name
+ * does not already exist, will throw an error. Note that if the module has
+ * already been imported, this won't have much effect unless you also delete
+ * the imported module from ``sys.modules``. This calls the :any:`pyodide_py` API
+ * :func:`pyodide.unregister_js_module`.
+ *
+ * @param name Name of the JavaScript module to remove
+ */
+declare function unregisterJsModule(name: string): void;
+/**
+ * Convert the JavaScript object to a Python object as best as possible.
+ *
+ * This is similar to :any:`JsProxy.to_py` but for use from JavaScript. If the
+ * object is immutable or a :any:`PyProxy`, it will be returned unchanged. If
+ * the object cannot be converted into Python, it will be returned unchanged.
+ *
+ * See :ref:`type-translations-jsproxy-to-py` for more information.
+ *
+ * @param obj
+ * @param options
+ * @returns The object converted to Python.
+ */
+declare function toPy(obj: any, { depth, defaultConverter }?: {
+ /**
+ * Optional argument to limit the depth of the conversion.
+ */
+ depth: number;
+ /**
+ * Optional argument to convert objects with no default conversion. See the
+ * documentation of :any:`JsProxy.to_py`.
+ */
+ defaultConverter?: (value: any, converter: (value: any) => any, cacheConversion: (input: any, output: any) => any) => any;
+}): any;
+/**
+ * Imports a module and returns it.
+ *
+ * .. admonition:: Warning
+ * :class: warning
+ *
+ * This function has a completely different behavior than the old removed pyimport function!
+ *
+ * ``pyimport`` is roughly equivalent to:
+ *
+ * .. code-block:: js
+ *
+ * pyodide.runPython(`import ${pkgname}; ${pkgname}`);
+ *
+ * except that the global namespace will not change.
+ *
+ * Example:
+ *
+ * .. code-block:: js
+ *
+ * let sysmodule = pyodide.pyimport("sys");
+ * let recursionLimit = sys.getrecursionlimit();
+ *
+ * @param mod_name The name of the module to import
+ * @returns A PyProxy for the imported module
+ */
+declare function pyimport(mod_name: string): PyProxy;
+/**
+ * Unpack an archive into a target directory.
+ *
+ * .. admonition:: Positional globals argument :class: warning
+ *
+ * In Pyodide v0.19, this function took the extract_dir parameter as a
+ * positional argument rather than as a named argument. In v0.20 this will
+ * still work but it is deprecated. It will be removed in v0.21.
+ *
+ * @param buffer The archive as an ArrayBuffer or TypedArray.
+ * @param format The format of the archive. Should be one of the formats
+ * recognized by `shutil.unpack_archive`. By default the options are 'bztar',
+ * 'gztar', 'tar', 'zip', and 'wheel'. Several synonyms are accepted for each
+ * format, e.g., for 'gztar' any of '.gztar', '.tar.gz', '.tgz', 'tar.gz' or
+ * 'tgz' are considered to be synonyms.
+ *
+ * @param options
+ * @param options.extractDir The directory to unpack the archive into. Defaults
+ * to the working directory.
+ */
+declare function unpackArchive(buffer: TypedArray, format: string, options?: {
+ extractDir?: string;
+}): void;
+/**
+ * Sets the interrupt buffer to be ``interrupt_buffer``. This is only useful
+ * when Pyodide is used in a webworker. The buffer should be a
+ * ``SharedArrayBuffer`` shared with the main browser thread (or another
+ * worker). In that case, signal ``signum`` may be sent by writing ``signum``
+ * into the interrupt buffer. If ``signum`` does not satisfy 0 < ``signum`` <
+ * ``NSIG`` it will be silently ignored. NSIG is 65 (internally signals are
+ * indicated by a bitflag).
+ *
+ * You can disable interrupts by calling `setInterruptBuffer(undefined)`.
+ *
+ * If you wish to trigger a ``KeyboardInterrupt``, write ``SIGINT`` (a 2), into
+ * the interrupt buffer.
+ *
+ * By default ``SIGINT`` raises a ``KeyboardInterrupt`` and all other signals
+ * are ignored. You can install custom signal handlers with the signal module.
+ * Even signals that normally have special meaning and can't be overridden like
+ * ``SIGKILL`` and ``SIGSEGV`` are ignored by default and can be used for any
+ * purpose you like.
+ */
+declare function setInterruptBuffer(interrupt_buffer: TypedArray): void;
+/**
+ * Throws a KeyboardInterrupt error if a KeyboardInterrupt has been requested
+ * via the interrupt buffer.
+ *
+ * This can be used to enable keyboard interrupts during execution of JavaScript
+ * code, just as ``PyErr_CheckSignals`` is used to enable keyboard interrupts
+ * during execution of C code.
+ */
+declare function checkInterrupt(): void;
+type PyodideInterface = {
+ globals: typeof globals;
+ FS: typeof FS;
+ pyodide_py: typeof pyodide_py;
+ version: typeof version;
+ loadPackage: typeof loadPackage;
+ loadPackagesFromImports: typeof loadPackagesFromImports;
+ loadedPackages: typeof loadedPackages;
+ isPyProxy: typeof isPyProxy;
+ runPython: typeof runPython;
+ runPythonAsync: typeof runPythonAsync;
+ registerJsModule: typeof registerJsModule;
+ unregisterJsModule: typeof unregisterJsModule;
+ setInterruptBuffer: typeof setInterruptBuffer;
+ checkInterrupt: typeof checkInterrupt;
+ toPy: typeof toPy;
+ pyimport: typeof pyimport;
+ unpackArchive: typeof unpackArchive;
+ registerComlink: typeof registerComlink;
+ PythonError: typeof PythonError;
+ PyBuffer: typeof PyBuffer;
+};
+/**
+ * An alias to the `Emscripten File System API
+ * `_.
+ *
+ * This provides a wide range of POSIX-`like` file/device operations, including
+ * `mount
+ * `_
+ * which can be used to extend the in-memory filesystem with features like `persistence
+ * `_.
+ *
+ * While all the file systems implementations are enabled, only the default
+ * ``MEMFS`` is guaranteed to work in all runtime settings. The implementations
+ * are available as members of ``FS.filesystems``:
+ * ``IDBFS``, ``NODEFS``, ``PROXYFS``, ``WORKERFS``.
+ */
+declare let FS: any;
+/**
+ * Load the main Pyodide wasm module and initialize it.
+ *
+ * Only one copy of Pyodide can be loaded in a given JavaScript global scope
+ * because Pyodide uses global variables to load packages. If an attempt is made
+ * to load a second copy of Pyodide, :any:`loadPyodide` will throw an error.
+ * (This can be fixed once `Firefox adopts support for ES6 modules in webworkers
+ * `_.)
+ *
+ * @returns The :ref:`js-api-pyodide` module.
+ * @memberof globalThis
+ * @async
+ */
+declare function loadPyodide(options?: {
+ /**
+ * The URL from which Pyodide will load the main Pyodide runtime and
+ * packages. Defaults to the url that pyodide is loaded from with the file
+ * name (pyodide.js or pyodide.mjs) removed. It is recommended that you
+ * leave this undefined, providing an incorrect value can cause broken
+ * behavior.
+ */
+ indexURL?: string;
+ /**
+ * The home directory which Pyodide will use inside virtual file system. Default: "/home/pyodide"
+ */
+ homedir?: string;
+ /** Load the full Python standard library.
+ * Setting this to false excludes following modules: distutils.
+ * Default: true
+ */
+ fullStdLib?: boolean;
+ /**
+ * Override the standard input callback. Should ask the user for one line of input.
+ */
+ stdin?: () => string;
+ /**
+ * Override the standard output callback.
+ * Default: undefined
+ */
+ stdout?: (msg: string) => void;
+ /**
+ * Override the standard error output callback.
+ * Default: undefined
+ */
+ stderr?: (msg: string) => void;
+ jsglobals?: object;
+}): Promise;
+export { loadPyodide };
diff --git a/static/pyodide/pyodide.js b/static/pyodide/pyodide.js
new file mode 100644
index 0000000000000000000000000000000000000000..563229b53c12d0761841ea5584ab36e1ed9a7b0e
--- /dev/null
+++ b/static/pyodide/pyodide.js
@@ -0,0 +1,16 @@
+!function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?factory(exports):"function"==typeof define&&define.amd?define(["exports"],factory):factory((global="undefined"!=typeof globalThis?globalThis:global||self).loadPyodide={})}(this,(function(exports){"use strict";
+/*! *****************************************************************************
+ Copyright (c) Microsoft Corporation.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+ ***************************************************************************** */function __awaiter(thisArg,_arguments,P,generator){return new(P||(P=Promise))((function(resolve,reject){function fulfilled(value){try{step(generator.next(value))}catch(e){reject(e)}}function rejected(value){try{step(generator.throw(value))}catch(e){reject(e)}}function step(result){var value;result.done?resolve(result.value):(value=result.value,value instanceof P?value:new P((function(resolve){resolve(value)}))).then(fulfilled,rejected)}step((generator=generator.apply(thisArg,_arguments||[])).next())}))}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var errorStackParser={exports:{}},stackframe={exports:{}};!function(module,exports){module.exports=function(){function _isNumber(n){return!isNaN(parseFloat(n))&&isFinite(n)}function _capitalize(str){return str.charAt(0).toUpperCase()+str.substring(1)}function _getter(p){return function(){return this[p]}}var booleanProps=["isConstructor","isEval","isNative","isToplevel"],numericProps=["columnNumber","lineNumber"],stringProps=["fileName","functionName","source"],arrayProps=["args"],objectProps=["evalOrigin"],props=booleanProps.concat(numericProps,stringProps,arrayProps,objectProps);function StackFrame(obj){if(obj)for(var i=0;i-1&&(line=line.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var sanitizedLine=line.replace(/^\s+/,"").replace(/\(eval code/g,"("),location=sanitizedLine.match(/ (\((.+):(\d+):(\d+)\)$)/),tokens=(sanitizedLine=location?sanitizedLine.replace(location[0],""):sanitizedLine).split(/\s+/).slice(1),locationParts=this.extractLocation(location?location[1]:tokens.pop()),functionName=tokens.join(" ")||void 0,fileName=["eval",""].indexOf(locationParts[0])>-1?void 0:locationParts[0];return new StackFrame({functionName:functionName,fileName:fileName,lineNumber:locationParts[1],columnNumber:locationParts[2],source:line})}),this)},parseFFOrSafari:function(error){return error.stack.split("\n").filter((function(line){return!line.match(SAFARI_NATIVE_CODE_REGEXP)}),this).map((function(line){if(line.indexOf(" > eval")>-1&&(line=line.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),-1===line.indexOf("@")&&-1===line.indexOf(":"))return new StackFrame({functionName:line});var functionNameRegex=/((.*".+"[^@]*)?[^@]*)(?:@)/,matches=line.match(functionNameRegex),functionName=matches&&matches[1]?matches[1]:void 0,locationParts=this.extractLocation(line.replace(functionNameRegex,""));return new StackFrame({functionName:functionName,fileName:locationParts[0],lineNumber:locationParts[1],columnNumber:locationParts[2],source:line})}),this)},parseOpera:function(e){return!e.stacktrace||e.message.indexOf("\n")>-1&&e.message.split("\n").length>e.stacktrace.split("\n").length?this.parseOpera9(e):e.stack?this.parseOpera11(e):this.parseOpera10(e)},parseOpera9:function(e){for(var lineRE=/Line (\d+).*script (?:in )?(\S+)/i,lines=e.message.split("\n"),result=[],i=2,len=lines.length;i/,"$2").replace(/\([^)]*\)/g,"")||void 0;functionCall.match(/\(([^)]*)\)/)&&(argsRaw=functionCall.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var args=void 0===argsRaw||"[arguments not available]"===argsRaw?void 0:argsRaw.split(",");return new StackFrame({functionName:functionName,args:args,fileName:locationParts[0],lineNumber:locationParts[1],columnNumber:locationParts[2],source:line})}),this)}})}(errorStackParser);var ErrorStackParser=errorStackParser.exports;let Module={noImageDecoding:!0,noAudioDecoding:!0,noWasmDecoding:!1,preloadedWasm:{},preRun:[]},API={};Module.API=API;let Hiwire={};Module.hiwire=Hiwire;let Tests={};function setStandardStreams(stdin,stdout,stderr){stdout&&(Module.print=stdout),stderr&&(Module.printErr=stderr),stdin&&Module.preRun.push((function(){Module.FS.init(function(stdin){const encoder=new TextEncoder;let input=new Uint8Array(0),inputIndex=-1;function stdinWrapper(){try{if(-1===inputIndex){let text=stdin();if(null==text)return null;if("string"!=typeof text)throw new TypeError(`Expected stdin to return string, null, or undefined, got type ${typeof text}.`);text.endsWith("\n")||(text+="\n"),input=encoder.encode(text),inputIndex=0}if(inputIndex__awaiter(void 0,void 0,void 0,(function*(){return yield import(url)}));else if(globalThis.importScripts)loadScript=url=>__awaiter(void 0,void 0,void 0,(function*(){try{globalThis.importScripts(url)}catch(e){if(!(e instanceof TypeError))throw e;yield import(url)}}));else{if(!IN_NODE)throw new Error("Cannot determine runtime environment");loadScript=function(url){return __awaiter(this,void 0,void 0,(function*(){url.includes("://")?nodeVmMod.runInThisContext(yield(yield nodeFetch(url)).text()):yield import(nodePathMod.resolve(url))}))}}function isPyProxy(jsobj){return!!jsobj&&void 0!==jsobj.$$&&"PyProxy"===jsobj.$$.type}API.isPyProxy=isPyProxy,globalThis.FinalizationRegistry?Module.finalizationRegistry=new FinalizationRegistry((([ptr,cache])=>{cache.leaked=!0,pyproxy_decref_cache(cache);try{Module._Py_DecRef(ptr)}catch(e){API.fatal_error(e)}})):Module.finalizationRegistry={register(){},unregister(){}};let trace_pyproxy_alloc,trace_pyproxy_dealloc,pyproxy_alloc_map=new Map;function _getPtr(jsobj){let ptr=jsobj.$$.ptr;if(0===ptr)throw new Error(jsobj.$$.destroyed_msg);return ptr}Module.pyproxy_alloc_map=pyproxy_alloc_map,Module.enable_pyproxy_allocation_tracing=function(){trace_pyproxy_alloc=function(proxy){pyproxy_alloc_map.set(proxy,Error().stack)},trace_pyproxy_dealloc=function(proxy){pyproxy_alloc_map.delete(proxy)}},Module.disable_pyproxy_allocation_tracing=function(){trace_pyproxy_alloc=function(proxy){},trace_pyproxy_dealloc=function(proxy){}},Module.disable_pyproxy_allocation_tracing(),Module.pyproxy_new=function(ptrobj,cache){let target,flags=Module._pyproxy_getflags(ptrobj),cls=Module.getPyProxyClass(flags);if(256&flags?(target=Reflect.construct(Function,[],cls),delete target.length,delete target.name,target.prototype=void 0):target=Object.create(cls.prototype),!cache){cache={cacheId:Hiwire.new_value(new Map),refcnt:0}}cache.refcnt++,Object.defineProperty(target,"$$",{value:{ptr:ptrobj,type:"PyProxy",cache:cache}}),Module._Py_IncRef(ptrobj);let proxy=new Proxy(target,PyProxyHandlers);return trace_pyproxy_alloc(proxy),Module.finalizationRegistry.register(proxy,[ptrobj,cache],proxy),proxy};let pyproxyClassMap=new Map;Module.getPyProxyClass=function(flags){const FLAG_TYPE_PAIRS=[[1,PyProxyLengthMethods],[2,PyProxyGetItemMethods],[4,PyProxySetItemMethods],[8,PyProxyContainsMethods],[16,PyProxyIterableMethods],[32,PyProxyIteratorMethods],[64,PyProxyAwaitableMethods],[128,PyProxyBufferMethods],[256,PyProxyCallableMethods]];let result=pyproxyClassMap.get(flags);if(result)return result;let descriptors={};for(let[feature_flag,methods]of FLAG_TYPE_PAIRS)flags&feature_flag&&Object.assign(descriptors,Object.getOwnPropertyDescriptors(methods.prototype));descriptors.constructor=Object.getOwnPropertyDescriptor(PyProxyClass.prototype,"constructor"),Object.assign(descriptors,Object.getOwnPropertyDescriptors({$$flags:flags}));let new_proto=Object.create(PyProxyClass.prototype,descriptors);function NewPyProxyClass(){}return NewPyProxyClass.prototype=new_proto,pyproxyClassMap.set(flags,NewPyProxyClass),NewPyProxyClass},Module.PyProxy_getPtr=_getPtr;function pyproxy_decref_cache(cache){if(cache&&(cache.refcnt--,0===cache.refcnt)){let cache_map=Hiwire.pop_value(cache.cacheId);for(let proxy_id of cache_map.values()){const cache_entry=Hiwire.pop_value(proxy_id);cache.leaked||Module.pyproxy_destroy(cache_entry,"This borrowed attribute proxy was automatically destroyed in the process of destroying the proxy it was borrowed from. Try using the 'copy' method.")}}}Module.pyproxy_destroy=function(proxy,destroyed_msg){if(0===proxy.$$.ptr)return;let ptrobj=_getPtr(proxy);Module.finalizationRegistry.unregister(proxy),destroyed_msg=destroyed_msg||"Object has already been destroyed";let proxy_repr,proxy_type=proxy.type;try{proxy_repr=proxy.toString()}catch(e){if(e.pyodide_fatal_error)throw e}proxy.$$.ptr=0,destroyed_msg+=`\nThe object was of type "${proxy_type}" and `,destroyed_msg+=proxy_repr?`had repr "${proxy_repr}"`:"an error was raised when trying to generate its repr",proxy.$$.destroyed_msg=destroyed_msg,pyproxy_decref_cache(proxy.$$.cache);try{Module._Py_DecRef(ptrobj),trace_pyproxy_dealloc(proxy)}catch(e){API.fatal_error(e)}},Module.callPyObjectKwargs=function(ptrobj,...jsargs){let kwargs=jsargs.pop(),num_pos_args=jsargs.length,kwargs_names=Object.keys(kwargs),kwargs_values=Object.values(kwargs),num_kwargs=kwargs_names.length;jsargs.push(...kwargs_values);let idresult,idargs=Hiwire.new_value(jsargs),idkwnames=Hiwire.new_value(kwargs_names);try{idresult=Module.__pyproxy_apply(ptrobj,idargs,num_pos_args,idkwnames,num_kwargs)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(idargs),Hiwire.decref(idkwnames)}0===idresult&&Module._pythonexc2js();let result=Hiwire.pop_value(idresult);return result&&"coroutine"===result.type&&result._ensure_future&&result._ensure_future(),result},Module.callPyObject=function(ptrobj,...jsargs){return Module.callPyObjectKwargs(ptrobj,...jsargs,{})};class PyProxyClass{constructor(){throw new TypeError("PyProxy is not a constructor")}get[Symbol.toStringTag](){return"PyProxy"}get type(){let ptrobj=_getPtr(this);return Hiwire.pop_value(Module.__pyproxy_type(ptrobj))}toString(){let jsref_repr,ptrobj=_getPtr(this);try{jsref_repr=Module.__pyproxy_repr(ptrobj)}catch(e){API.fatal_error(e)}return 0===jsref_repr&&Module._pythonexc2js(),Hiwire.pop_value(jsref_repr)}destroy(destroyed_msg){Module.pyproxy_destroy(this,destroyed_msg)}copy(){let ptrobj=_getPtr(this);return Module.pyproxy_new(ptrobj,this.$$.cache)}toJs({depth:depth=-1,pyproxies:pyproxies,create_pyproxies:create_pyproxies=!0,dict_converter:dict_converter,default_converter:default_converter}={}){let idresult,proxies_id,ptrobj=_getPtr(this),dict_converter_id=0,default_converter_id=0;proxies_id=create_pyproxies?pyproxies?Hiwire.new_value(pyproxies):Hiwire.new_value([]):0,dict_converter&&(dict_converter_id=Hiwire.new_value(dict_converter)),default_converter&&(default_converter_id=Hiwire.new_value(default_converter));try{idresult=Module._python2js_custom(ptrobj,depth,proxies_id,dict_converter_id,default_converter_id)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(proxies_id),Hiwire.decref(dict_converter_id),Hiwire.decref(default_converter_id)}return 0===idresult&&Module._pythonexc2js(),Hiwire.pop_value(idresult)}supportsLength(){return!!(1&this.$$flags)}supportsGet(){return!!(2&this.$$flags)}supportsSet(){return!!(4&this.$$flags)}supportsHas(){return!!(8&this.$$flags)}isIterable(){return!!(48&this.$$flags)}isIterator(){return!!(32&this.$$flags)}isAwaitable(){return!!(64&this.$$flags)}isBuffer(){return!!(128&this.$$flags)}isCallable(){return!!(256&this.$$flags)}}class PyProxyLengthMethods{get length(){let length,ptrobj=_getPtr(this);try{length=Module._PyObject_Size(ptrobj)}catch(e){API.fatal_error(e)}return-1===length&&Module._pythonexc2js(),length}}class PyProxyGetItemMethods{get(key){let idresult,ptrobj=_getPtr(this),idkey=Hiwire.new_value(key);try{idresult=Module.__pyproxy_getitem(ptrobj,idkey)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(idkey)}if(0===idresult){if(!Module._PyErr_Occurred())return;Module._pythonexc2js()}return Hiwire.pop_value(idresult)}}class PyProxySetItemMethods{set(key,value){let errcode,ptrobj=_getPtr(this),idkey=Hiwire.new_value(key),idval=Hiwire.new_value(value);try{errcode=Module.__pyproxy_setitem(ptrobj,idkey,idval)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(idkey),Hiwire.decref(idval)}-1===errcode&&Module._pythonexc2js()}delete(key){let errcode,ptrobj=_getPtr(this),idkey=Hiwire.new_value(key);try{errcode=Module.__pyproxy_delitem(ptrobj,idkey)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(idkey)}-1===errcode&&Module._pythonexc2js()}}class PyProxyContainsMethods{has(key){let result,ptrobj=_getPtr(this),idkey=Hiwire.new_value(key);try{result=Module.__pyproxy_contains(ptrobj,idkey)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(idkey)}return-1===result&&Module._pythonexc2js(),1===result}}class PyProxyIterableMethods{[Symbol.iterator](){let iterptr,ptrobj=_getPtr(this),token={};try{iterptr=Module._PyObject_GetIter(ptrobj)}catch(e){API.fatal_error(e)}0===iterptr&&Module._pythonexc2js();let result=function*(iterptr,token){try{let item;for(;item=Module.__pyproxy_iter_next(iterptr);)yield Hiwire.pop_value(item)}catch(e){API.fatal_error(e)}finally{Module.finalizationRegistry.unregister(token),Module._Py_DecRef(iterptr)}Module._PyErr_Occurred()&&Module._pythonexc2js()}(iterptr,token);return Module.finalizationRegistry.register(result,[iterptr,void 0],token),result}}class PyProxyIteratorMethods{[Symbol.iterator](){return this}next(arg){let status,done,idarg=Hiwire.new_value(arg),stackTop=Module.stackSave(),res_ptr=Module.stackAlloc(4);try{status=Module.__pyproxyGen_Send(_getPtr(this),idarg,res_ptr)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(idarg)}let idresult=Module.HEAPU32[0+(res_ptr>>2)];return Module.stackRestore(stackTop),-1===status&&Module._pythonexc2js(),done=0===status,{done:done,value:Hiwire.pop_value(idresult)}}}let PyProxyHandlers={isExtensible:()=>!0,has:(jsobj,jskey)=>!!Reflect.has(jsobj,jskey)||"symbol"!=typeof jskey&&(jskey.startsWith("$")&&(jskey=jskey.slice(1)),function(jsobj,jskey){let result,ptrobj=_getPtr(jsobj),idkey=Hiwire.new_value(jskey);try{result=Module.__pyproxy_hasattr(ptrobj,idkey)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(idkey)}return-1===result&&Module._pythonexc2js(),0!==result}(jsobj,jskey)),get(jsobj,jskey){if(jskey in jsobj||"symbol"==typeof jskey)return Reflect.get(jsobj,jskey);jskey.startsWith("$")&&(jskey=jskey.slice(1));let idresult=function(jsobj,jskey){let idresult,ptrobj=_getPtr(jsobj),idkey=Hiwire.new_value(jskey),cacheId=jsobj.$$.cache.cacheId;try{idresult=Module.__pyproxy_getattr(ptrobj,idkey,cacheId)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(idkey)}return 0===idresult&&Module._PyErr_Occurred()&&Module._pythonexc2js(),idresult}(jsobj,jskey);return 0!==idresult?Hiwire.pop_value(idresult):void 0},set(jsobj,jskey,jsval){let descr=Object.getOwnPropertyDescriptor(jsobj,jskey);if(descr&&!descr.writable)throw new TypeError(`Cannot set read only field '${jskey}'`);return"symbol"==typeof jskey?Reflect.set(jsobj,jskey,jsval):(jskey.startsWith("$")&&(jskey=jskey.slice(1)),function(jsobj,jskey,jsval){let errcode,ptrobj=_getPtr(jsobj),idkey=Hiwire.new_value(jskey),idval=Hiwire.new_value(jsval);try{errcode=Module.__pyproxy_setattr(ptrobj,idkey,idval)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(idkey),Hiwire.decref(idval)}-1===errcode&&Module._pythonexc2js()}(jsobj,jskey,jsval),!0)},deleteProperty(jsobj,jskey){let descr=Object.getOwnPropertyDescriptor(jsobj,jskey);if(descr&&!descr.writable)throw new TypeError(`Cannot delete read only field '${jskey}'`);return"symbol"==typeof jskey?Reflect.deleteProperty(jsobj,jskey):(jskey.startsWith("$")&&(jskey=jskey.slice(1)),function(jsobj,jskey){let errcode,ptrobj=_getPtr(jsobj),idkey=Hiwire.new_value(jskey);try{errcode=Module.__pyproxy_delattr(ptrobj,idkey)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(idkey)}-1===errcode&&Module._pythonexc2js()}(jsobj,jskey),!descr||!!descr.configurable)},ownKeys(jsobj){let idresult,ptrobj=_getPtr(jsobj);try{idresult=Module.__pyproxy_ownKeys(ptrobj)}catch(e){API.fatal_error(e)}0===idresult&&Module._pythonexc2js();let result=Hiwire.pop_value(idresult);return result.push(...Reflect.ownKeys(jsobj)),result},apply:(jsobj,jsthis,jsargs)=>jsobj.apply(jsthis,jsargs)};class PyProxyAwaitableMethods{_ensure_future(){if(this.$$.promise)return this.$$.promise;let resolveHandle,rejectHandle,errcode,ptrobj=_getPtr(this),promise=new Promise(((resolve,reject)=>{resolveHandle=resolve,rejectHandle=reject})),resolve_handle_id=Hiwire.new_value(resolveHandle),reject_handle_id=Hiwire.new_value(rejectHandle);try{errcode=Module.__pyproxy_ensure_future(ptrobj,resolve_handle_id,reject_handle_id)}catch(e){API.fatal_error(e)}finally{Hiwire.decref(reject_handle_id),Hiwire.decref(resolve_handle_id)}return-1===errcode&&Module._pythonexc2js(),this.$$.promise=promise,this.destroy(),promise}then(onFulfilled,onRejected){return this._ensure_future().then(onFulfilled,onRejected)}catch(onRejected){return this._ensure_future().catch(onRejected)}finally(onFinally){return this._ensure_future().finally(onFinally)}}class PyProxyCallableMethods{apply(jsthis,jsargs){return Module.callPyObject(_getPtr(this),...jsargs)}call(jsthis,...jsargs){return Module.callPyObject(_getPtr(this),...jsargs)}callKwargs(...jsargs){if(0===jsargs.length)throw new TypeError("callKwargs requires at least one argument (the key word argument object)");let kwargs=jsargs[jsargs.length-1];if(void 0!==kwargs.constructor&&"Object"!==kwargs.constructor.name)throw new TypeError("kwargs argument is not an object");return Module.callPyObjectKwargs(_getPtr(this),...jsargs)}}PyProxyCallableMethods.prototype.prototype=Function.prototype;let baseURL,type_to_array_map=new Map([["i8",Int8Array],["u8",Uint8Array],["u8clamped",Uint8ClampedArray],["i16",Int16Array],["u16",Uint16Array],["i32",Int32Array],["u32",Uint32Array],["i32",Int32Array],["u32",Uint32Array],["i64",globalThis.BigInt64Array],["u64",globalThis.BigUint64Array],["f32",Float32Array],["f64",Float64Array],["dataview",DataView]]);class PyProxyBufferMethods{getBuffer(type){let ArrayType;if(type&&(ArrayType=type_to_array_map.get(type),void 0===ArrayType))throw new Error(`Unknown type ${type}`);let errcode,HEAPU32=Module.HEAPU32,orig_stack_ptr=Module.stackSave(),buffer_struct_ptr=Module.stackAlloc(HEAPU32[0+(Module._buffer_struct_size>>2)]),this_ptr=_getPtr(this);try{errcode=Module.__pyproxy_get_buffer(buffer_struct_ptr,this_ptr)}catch(e){API.fatal_error(e)}-1===errcode&&Module._pythonexc2js();let startByteOffset=HEAPU32[0+(buffer_struct_ptr>>2)],minByteOffset=HEAPU32[1+(buffer_struct_ptr>>2)],maxByteOffset=HEAPU32[2+(buffer_struct_ptr>>2)],readonly=!!HEAPU32[3+(buffer_struct_ptr>>2)],format_ptr=HEAPU32[4+(buffer_struct_ptr>>2)],itemsize=HEAPU32[5+(buffer_struct_ptr>>2)],shape=Hiwire.pop_value(HEAPU32[6+(buffer_struct_ptr>>2)]),strides=Hiwire.pop_value(HEAPU32[7+(buffer_struct_ptr>>2)]),view_ptr=HEAPU32[8+(buffer_struct_ptr>>2)],c_contiguous=!!HEAPU32[9+(buffer_struct_ptr>>2)],f_contiguous=!!HEAPU32[10+(buffer_struct_ptr>>2)],format=Module.UTF8ToString(format_ptr);Module.stackRestore(orig_stack_ptr);let success=!1;try{let bigEndian=!1;void 0===ArrayType&&([ArrayType,bigEndian]=Module.processBufferFormatString(format," In this case, you can pass an explicit type argument."));let alignment=parseInt(ArrayType.name.replace(/[^0-9]/g,""))/8||1;if(bigEndian&&alignment>1)throw new Error("Javascript has no native support for big endian buffers. In this case, you can pass an explicit type argument. For instance, `getBuffer('dataview')` will return a `DataView`which has native support for reading big endian data. Alternatively, toJs will automatically convert the buffer to little endian.");let numBytes=maxByteOffset-minByteOffset;if(0!==numBytes&&(startByteOffset%alignment!=0||minByteOffset%alignment!=0||maxByteOffset%alignment!=0))throw new Error(`Buffer does not have valid alignment for a ${ArrayType.name}`);let data,numEntries=numBytes/alignment,offset=(startByteOffset-minByteOffset)/alignment;data=0===numBytes?new ArrayType:new ArrayType(HEAPU32.buffer,minByteOffset,numEntries);for(let i of strides.keys())strides[i]/=alignment;return success=!0,Object.create(PyBuffer.prototype,Object.getOwnPropertyDescriptors({offset:offset,readonly:readonly,format:format,itemsize:itemsize,ndim:shape.length,nbytes:numBytes,shape:shape,strides:strides,data:data,c_contiguous:c_contiguous,f_contiguous:f_contiguous,_view_ptr:view_ptr,_released:!1}))}finally{if(!success)try{Module._PyBuffer_Release(view_ptr),Module._PyMem_Free(view_ptr)}catch(e){API.fatal_error(e)}}}}class PyBuffer{constructor(){throw new TypeError("PyBuffer is not a constructor")}release(){if(!this._released){try{Module._PyBuffer_Release(this._view_ptr),Module._PyMem_Free(this._view_ptr)}catch(e){API.fatal_error(e)}this._released=!0,this.data=null}}}const package_uri_regexp=/^.*?([^\/]*)\.whl$/;function _uri_to_package_name(package_uri){let match=package_uri_regexp.exec(package_uri);if(match){return match[1].toLowerCase().split("-").slice(0,-4).join("-")}}function addPackageToLoad(name,toLoad,toLoadShared){if(name=name.toLowerCase(),toLoad.has(name))return;const pkg_info=API.packages[name];if(!pkg_info)throw new Error(`No known package with name '${name}'`);if(pkg_info.shared_library?toLoadShared.set(name,"default channel"):toLoad.set(name,"default channel"),void 0===loadedPackages[name])for(let dep_name of pkg_info.depends)addPackageToLoad(dep_name,toLoad,toLoadShared)}function downloadPackage(name,channel){return __awaiter(this,void 0,void 0,(function*(){let file_name;if("default channel"===channel){if(!(name in API.packages))throw new Error(`Internal error: no entry for package named ${name}`);file_name=API.packages[name].file_name}else file_name=channel;return yield _loadBinaryFile(baseURL,file_name)}))}function installPackage(name,buffer){return __awaiter(this,void 0,void 0,(function*(){let pkg=API.packages[name];pkg||(pkg={file_name:".whl",install_dir:"site",shared_library:!1,depends:[],imports:[]});const filename=pkg.file_name,dynlibs=API.package_loader.unpack_buffer.callKwargs({buffer:buffer,filename:filename,target:pkg.install_dir,calculate_dynlibs:!0});for(const dynlib of dynlibs)yield loadDynlib(dynlib,pkg.shared_library);loadedPackages[name]=pkg}))}function createLock(){let _lock=Promise.resolve();return function(){return __awaiter(this,void 0,void 0,(function*(){const old_lock=_lock;let releaseLock;return _lock=new Promise((resolve=>releaseLock=resolve)),yield old_lock,releaseLock}))}}const acquireDynlibLock=createLock();function loadDynlib(lib,shared){return __awaiter(this,void 0,void 0,(function*(){let byteArray;byteArray=Module.FS.lookupPath(lib).node.mount.type==Module.FS.filesystems.MEMFS?Module.FS.filesystems.MEMFS.getFileDataAsTypedArray(Module.FS.lookupPath(lib).node):Module.FS.readFile(lib);const releaseDynlibLock=yield acquireDynlibLock();try{const module=yield Module.loadWebAssemblyModule(byteArray,{loadAsync:!0,nodelete:!0,allowUndefined:!0});Module.preloadedWasm[lib]=module,Module.preloadedWasm[lib.split("/").pop()]=module,shared&&Module.loadDynamicLibrary(lib,{global:!0,nodelete:!0})}catch(e){if(e.message.includes("need to see wasm magic number"))return void console.warn(`Failed to load dynlib ${lib}. We probably just tried to load a linux .so file or something.`);throw e}finally{releaseDynlibLock()}}))}Tests.loadDynlib=loadDynlib;const acquirePackageLock=createLock();function loadPackage(names,messageCallback,errorCallback){return __awaiter(this,void 0,void 0,(function*(){messageCallback=messageCallback||console.log,errorCallback=errorCallback||console.error,isPyProxy(names)&&(names=names.toJs()),Array.isArray(names)||(names=[names]);const[toLoad,toLoadShared]=function(names,errorCallback){const toLoad=new Map,toLoadShared=new Map;for(let name of names){const pkgname=_uri_to_package_name(name);void 0!==pkgname?toLoad.has(pkgname)&&toLoad.get(pkgname)!==name?errorCallback(`Loading same package ${pkgname} from ${name} and ${toLoad.get(pkgname)}`):toLoad.set(pkgname,name):addPackageToLoad(name,toLoad,toLoadShared)}return[toLoad,toLoadShared]}(names,errorCallback);for(const[pkg,uri]of[...toLoad,...toLoadShared]){const loaded=loadedPackages[pkg];void 0!==loaded&&(toLoad.delete(pkg),toLoadShared.delete(pkg),loaded===uri||"default channel"===uri?messageCallback(`${pkg} already loaded from ${loaded}`):errorCallback(`URI mismatch, attempting to load package ${pkg} from ${uri} while it is already loaded from ${loaded}. To override a dependency, load the custom package first.`))}if(0===toLoad.size&&0===toLoadShared.size)return void messageCallback("No new packages to load");const packageNames=[...toLoad.keys(),...toLoadShared.keys()].join(", "),releaseLock=yield acquirePackageLock();try{messageCallback(`Loading ${packageNames}`);const sharedLibraryLoadPromises={},packageLoadPromises={};for(const[name,channel]of toLoadShared)loadedPackages[name]?toLoadShared.delete(name):sharedLibraryLoadPromises[name]=downloadPackage(name,channel);for(const[name,channel]of toLoad)loadedPackages[name]?toLoad.delete(name):packageLoadPromises[name]=downloadPackage(name,channel);const loaded=[],failed={},sharedLibraryInstallPromises={},packageInstallPromises={};for(const[name,channel]of toLoadShared)sharedLibraryInstallPromises[name]=sharedLibraryLoadPromises[name].then((buffer=>__awaiter(this,void 0,void 0,(function*(){yield installPackage(name,buffer),loaded.push(name),loadedPackages[name]=channel})))).catch((err=>{console.warn(err),failed[name]=err}));yield Promise.all(Object.values(sharedLibraryInstallPromises));for(const[name,channel]of toLoad)packageInstallPromises[name]=packageLoadPromises[name].then((buffer=>__awaiter(this,void 0,void 0,(function*(){yield installPackage(name,buffer),loaded.push(name),loadedPackages[name]=channel})))).catch((err=>{console.warn(err),failed[name]=err}));if(yield Promise.all(Object.values(packageInstallPromises)),Module.reportUndefinedSymbols(),loaded.length>0){const successNames=loaded.join(", ");messageCallback(`Loaded ${successNames}`)}if(Object.keys(failed).length>0){const failedNames=Object.keys(failed).join(", ");messageCallback(`Failed to load ${failedNames}`);for(const[name,err]of Object.entries(failed))console.warn(`The following error occurred while loading ${name}:`),console.error(err)}API.importlib.invalidate_caches()}finally{releaseLock()}}))}let loadedPackages={};function ensureCaughtObjectIsError(e){if("string"==typeof e)e=new Error(e);else if("object"!=typeof e||null===e||"string"!=typeof e.stack||"string"!=typeof e.message){let msg=`A value of type ${typeof e} with tag ${Object.prototype.toString.call(e)} was thrown as an error!`;try{msg+=`\nString interpolation of the thrown value gives """${e}""".`}catch(e){msg+="\nString interpolation of the thrown value fails."}try{msg+=`\nThe thrown value's toString method returns """${e.toString()}""".`}catch(e){msg+="\nThe thrown value's toString method fails."}e=new Error(msg)}return e}API.dump_traceback=function(){Module.__Py_DumpTraceback(1,Module._PyGILState_GetThisThreadState())};let fatal_error_occurred=!1;API.fatal_error=function(e){if(!e||!e.pyodide_fatal_error){if(fatal_error_occurred)return console.error("Recursive call to fatal_error. Inner error was:"),void console.error(e);(e="number"==typeof e?convertCppException(e):ensureCaughtObjectIsError(e)).pyodide_fatal_error=!0,fatal_error_occurred=!0,console.error("Pyodide has suffered a fatal error. Please report this to the Pyodide maintainers."),console.error("The cause of the fatal error was:"),API.inTestHoist?(console.error(e.toString()),console.error(e.stack)):console.error(e);try{API.dump_traceback();for(let key of Object.keys(API.public_api))key.startsWith("_")||"version"===key||Object.defineProperty(API.public_api,key,{enumerable:!0,configurable:!0,get:()=>{throw new Error("Pyodide already fatally failed and can no longer be used.")}});API.on_fatal&&API.on_fatal(e)}catch(err2){console.error("Another error occurred while handling the fatal error:"),console.error(err2)}throw e}};class CppException extends Error{constructor(ty,msg){super(msg),this.ty=ty}}function convertCppException(ptr){const[exc_type_name,is_exception_subclass,adjusted_ptr]=function(ptr){const base_exception_type=Module._exc_type(),caught_exception_type=new Module.ExceptionInfo(ptr).get_type(),stackTop=Module.stackSave(),exceptionThrowBuf=Module.stackAlloc(4);Module.HEAP32[exceptionThrowBuf/4]=ptr;const exc_type_name=Module.demangle(Module.UTF8ToString(Module._exc_typename(caught_exception_type))),is_exception_subclass=!!Module.___cxa_can_catch(base_exception_type,caught_exception_type,exceptionThrowBuf),adjusted_ptr=Module.HEAP32[exceptionThrowBuf/4];return Module.stackRestore(stackTop),[exc_type_name,is_exception_subclass,adjusted_ptr]}(ptr);let msg;if(is_exception_subclass){const msgPtr=Module._exc_what(adjusted_ptr);msg=Module.UTF8ToString(msgPtr)}else msg=`The exception is an object of type ${exc_type_name} at address ${ptr} which does not inherit from std::exception`;return new CppException(exc_type_name,msg)}function isPyodideFrame(frame){const fileName=frame.fileName||"";if(fileName.includes("pyodide.asm"))return!0;if(fileName.includes("wasm-function"))return!0;if(!fileName.includes("pyodide.js"))return!1;let funcName=frame.functionName||"";return funcName.startsWith("Object.")&&(funcName=funcName.slice("Object.".length)),!(funcName in API.public_api)||"PythonError"===funcName||(frame.functionName=funcName,!1)}Object.defineProperty(CppException.prototype,"name",{get(){return`${this.constructor.name} ${this.ty}`}}),Tests.convertCppException=convertCppException,Module.handle_js_error=function(e){if(e&&e.pyodide_fatal_error)throw e;if(e instanceof Module._PropagatePythonError)return;let stack,weirdCatch,restored_error=!1;e instanceof API.PythonError&&(restored_error=Module._restore_sys_last_exception(e.__error_address));try{stack=ErrorStackParser.parse(e)}catch(_){weirdCatch=!0}if(weirdCatch&&(e=ensureCaughtObjectIsError(e)),!restored_error){let eidx=Hiwire.new_value(e),err=Module._JsProxy_create(eidx);Module._set_error(err),Module._Py_DecRef(err),Hiwire.decref(eidx)}if(!weirdCatch){if(function(frame){if(!isPyodideFrame(frame))return!1;const funcName=frame.functionName;return"PythonError"===funcName||"new_error"===funcName}(stack[0]))for(;isPyodideFrame(stack[0]);)stack.shift();for(const frame of stack){if(isPyodideFrame(frame))break;const funcnameAddr=Module.stringToNewUTF8(frame.functionName||"???"),fileNameAddr=Module.stringToNewUTF8(frame.fileName||"???.js");Module.__PyTraceback_Add(funcnameAddr,fileNameAddr,frame.lineNumber),Module._free(funcnameAddr),Module._free(fileNameAddr)}}};class PythonError extends Error{constructor(message,error_address){const oldLimit=Error.stackTraceLimit;Error.stackTraceLimit=1/0,super(message),Error.stackTraceLimit=oldLimit,this.__error_address=error_address}}Object.defineProperty(PythonError.prototype,"name",{value:PythonError.name}),API.PythonError=PythonError;class _PropagatePythonError extends Error{constructor(){API.fail_test=!0,super("If you are seeing this message, an internal Pyodide error has occurred. Please report it to the Pyodide maintainers.")}}Object.defineProperty(_PropagatePythonError.prototype,"name",{value:_PropagatePythonError.name}),Module._PropagatePythonError=_PropagatePythonError;let runPythonPositionalGlobalsDeprecationWarned=!1;function runPython(code,options={}){return API.isPyProxy(options)&&(options={globals:options},runPythonPositionalGlobalsDeprecationWarned||(console.warn("Passing a PyProxy as the second argument to runPython is deprecated and will be removed in v0.21. Use 'runPython(code, {globals : some_dict})' instead."),runPythonPositionalGlobalsDeprecationWarned=!0)),options.globals||(options.globals=API.globals),API.pyodide_py.eval_code(code,options.globals)}function loadPackagesFromImports(code,messageCallback,errorCallback){return __awaiter(this,void 0,void 0,(function*(){let imports,pyimports=API.pyodide_py.find_imports(code);try{imports=pyimports.toJs()}finally{pyimports.destroy()}if(0===imports.length)return;let packageNames=API._import_name_to_package_name,packages=new Set;for(let name of imports)packageNames.has(name)&&packages.add(packageNames.get(name));packages.size&&(yield loadPackage(Array.from(packages),messageCallback,errorCallback))}))}function runPythonAsync(code,options={}){return __awaiter(this,void 0,void 0,(function*(){return API.isPyProxy(options)&&(options={globals:options},runPythonPositionalGlobalsDeprecationWarned||(console.warn("Passing a PyProxy as the second argument to runPythonAsync is deprecated and will be removed in v0.21. Use 'runPythonAsync(code, {globals : some_dict})' instead."),runPythonPositionalGlobalsDeprecationWarned=!0)),options.globals||(options.globals=API.globals),yield API.pyodide_py.eval_code_async(code,options.globals)}))}function registerJsModule(name,module){API.pyodide_py.register_js_module(name,module)}function registerComlink(Comlink){API._Comlink=Comlink}function unregisterJsModule(name){API.pyodide_py.unregister_js_module(name)}function toPy(obj,{depth:depth,defaultConverter:defaultConverter}={depth:-1}){switch(typeof obj){case"string":case"number":case"boolean":case"bigint":case"undefined":return obj}if(!obj||API.isPyProxy(obj))return obj;let obj_id=0,py_result=0,result=0;try{obj_id=Hiwire.new_value(obj);try{py_result=Module.js2python_convert(obj_id,{depth:depth,defaultConverter:defaultConverter})}catch(e){throw e instanceof Module._PropagatePythonError&&Module._pythonexc2js(),e}if(Module._JsProxy_Check(py_result))return obj;result=Module._python2js(py_result),0===result&&Module._pythonexc2js()}finally{Hiwire.decref(obj_id),Module._Py_DecRef(py_result)}return Hiwire.pop_value(result)}function pyimport(mod_name){return API.importlib.import_module(mod_name)}API.runPython=runPython,API.runPythonAsync=runPythonAsync;let FS,runPythonInternal_dict,unpackArchivePositionalExtractDirDeprecationWarned=!1;function unpackArchive(buffer,format,options={}){"string"==typeof options&&(unpackArchivePositionalExtractDirDeprecationWarned||(console.warn("Passing a string as the third argument to unpackArchive is deprecated and will be removed in v0.21. Instead use { extract_dir : 'some_path' }"),unpackArchivePositionalExtractDirDeprecationWarned=!0),options={extractDir:options});let extract_dir=options.extractDir;API.package_loader.unpack_buffer.callKwargs({buffer:buffer,format:format,extract_dir:extract_dir})}function setInterruptBuffer(interrupt_buffer){Module.HEAP8[Module._Py_EMSCRIPTEN_SIGNAL_HANDLING]=!!interrupt_buffer,Module.Py_EmscriptenSignalBuffer=interrupt_buffer}function checkInterrupt(){Module.__PyErr_CheckSignals()&&Module._pythonexc2js()}function makePublicAPI(){FS=Module.FS;let namespace={globals:undefined,FS:FS,pyodide_py:undefined,version:"",loadPackage:loadPackage,loadPackagesFromImports:loadPackagesFromImports,loadedPackages:loadedPackages,isPyProxy:isPyProxy,runPython:runPython,runPythonAsync:runPythonAsync,registerJsModule:registerJsModule,unregisterJsModule:unregisterJsModule,setInterruptBuffer:setInterruptBuffer,checkInterrupt:checkInterrupt,toPy:toPy,pyimport:pyimport,unpackArchive:unpackArchive,registerComlink:registerComlink,PythonError:PythonError,PyBuffer:PyBuffer,_module:Module,_api:API};return API.public_api=namespace,namespace}function finalizeBootstrap(config){runPythonInternal_dict=API._pyodide._base.eval_code("{}"),API.importlib=API.runPythonInternal("import importlib; importlib");let import_module=API.importlib.import_module;API.sys=import_module("sys"),API.sys.path.insert(0,config.homedir);let globals=API.runPythonInternal("import __main__; __main__.__dict__"),builtins=API.runPythonInternal("import builtins; builtins.__dict__");var builtins_dict;API.globals=(builtins_dict=builtins,new Proxy(globals,{get:(target,symbol)=>"get"===symbol?key=>{let result=target.get(key);return void 0===result&&(result=builtins_dict.get(key)),result}:"has"===symbol?key=>target.has(key)||builtins_dict.has(key):Reflect.get(target,symbol)}));let importhook=API._pyodide._importhook;importhook.register_js_finder(),importhook.register_js_module("js",config.jsglobals);let pyodide=makePublicAPI();return importhook.register_js_module("pyodide_js",pyodide),API.pyodide_py=import_module("pyodide"),API.package_loader=import_module("pyodide._package_loader"),API.version=API.pyodide_py.__version__,pyodide.pyodide_py=API.pyodide_py,pyodide.version=API.version,pyodide.globals=API.globals,pyodide}function loadPyodide(options={}){return __awaiter(this,void 0,void 0,(function*(){if(loadPyodide.inProgress)throw new Error("Pyodide is already loading.");options.indexURL||(options.indexURL=function(){let err;try{throw new Error}catch(e){err=e}const fileName=ErrorStackParser.parse(err)[0].fileName;return fileName.slice(0,fileName.lastIndexOf("/"))}()),loadPyodide.inProgress=!0;const default_config={fullStdLib:!0,jsglobals:globalThis,stdin:globalThis.prompt?globalThis.prompt:void 0,homedir:"/home/pyodide"};let config=Object.assign(default_config,options);config.indexURL.endsWith("/")||(config.indexURL+="/"),yield function(){return __awaiter(this,void 0,void 0,(function*(){IN_NODE&&(nodePathMod=(yield import("path")).default,nodeFsPromisesMod=yield import("fs/promises"),nodeFetch=(yield import("node-fetch")).default,nodeVmMod=(yield import("vm")).default)}))}();let packageIndexReady=function(indexURL){return __awaiter(this,void 0,void 0,(function*(){let package_json;if(baseURL=indexURL,IN_NODE){const package_string=yield nodeFsPromisesMod.readFile(`${indexURL}packages.json`);package_json=JSON.parse(package_string)}else{let response=yield fetch(`${indexURL}packages.json`);package_json=yield response.json()}if(!package_json.packages)throw new Error("Loaded packages.json does not contain the expected key 'packages'.");API.packages=package_json.packages,API._import_name_to_package_name=new Map;for(let name of Object.keys(API.packages))for(let import_name of API.packages[name].imports)API._import_name_to_package_name.set(import_name,name)}))}(config.indexURL),pyodide_py_tar_promise=_loadBinaryFile(config.indexURL,"pyodide_py.tar");var path;setStandardStreams(config.stdin,config.stdout,config.stderr),path=config.homedir,Module.preRun.push((function(){try{Module.FS.mkdirTree(path)}catch(e){console.error(`Error occurred while making a home directory '${path}':`),console.error(e),console.error("Using '/' for a home directory instead"),path="/"}Module.ENV.HOME=path,Module.FS.chdir(path)}));let moduleLoaded=new Promise((r=>Module.postRun=r));Module.locateFile=path=>config.indexURL+path;const scriptSrc=`${config.indexURL}pyodide.asm.js`;yield loadScript(scriptSrc),yield _createPyodideModule(Module),yield moduleLoaded,Module.locateFile=path=>{throw new Error("Didn't expect to load any more file_packager files!")};!function(pyodide_py_tar){let stream=Module.FS.open("/pyodide_py.tar","w");Module.FS.write(stream,pyodide_py_tar,0,pyodide_py_tar.byteLength,void 0,!0),Module.FS.close(stream);const code_ptr=Module.stringToNewUTF8('\nfrom sys import version_info\npyversion = f"python{version_info.major}.{version_info.minor}"\nimport shutil\nshutil.unpack_archive("/pyodide_py.tar", f"/lib/{pyversion}/site-packages/")\ndel shutil\nimport importlib\nimportlib.invalidate_caches()\ndel importlib\n ');if(Module._PyRun_SimpleString(code_ptr))throw new Error("OOPS!");Module._free(code_ptr),Module.FS.unlink("/pyodide_py.tar")}(yield pyodide_py_tar_promise),Module._pyodide_init();let pyodide=finalizeBootstrap(config);return yield packageIndexReady,config.fullStdLib&&(yield loadPackage(["distutils"])),pyodide.runPython("print('Python initialization complete')"),pyodide}))}API.saveState=()=>API.pyodide_py._state.save_state(),API.restoreState=state=>API.pyodide_py._state.restore_state(state),API.runPythonInternal=function(code){return API._pyodide._base.eval_code(code,runPythonInternal_dict)},globalThis.loadPyodide=loadPyodide,exports.loadPyodide=loadPyodide,Object.defineProperty(exports,"__esModule",{value:!0})}));
+//# sourceMappingURL=pyodide.js.map
diff --git a/static/pyodide/pyodide.js.map b/static/pyodide/pyodide.js.map
new file mode 100644
index 0000000000000000000000000000000000000000..cc3ea0bc3267e8251dba6892ddce48a638439c97
--- /dev/null
+++ b/static/pyodide/pyodide.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"pyodide.js","sources":["../src/js/node_modules/tslib/tslib.es6.js","../src/js/node_modules/stackframe/stackframe.js","../src/js/node_modules/error-stack-parser/error-stack-parser.js","../src/js/module.ts","../src/js/compat.ts","../src/js/pyproxy.gen.ts","../src/js/load-package.ts","../src/js/error_handling.gen.ts","../src/js/api.ts","../src/js/pyodide.ts","../src/js/pyodide.umd.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function() {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function() {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n var objectProps = ['evalOrigin'];\n\n var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n\n function StackFrame(obj) {\n if (!obj) return;\n for (var i = 0; i < props.length; i++) {\n if (obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function() {\n return this.args;\n },\n setArgs: function(v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n getEvalOrigin: function() {\n return this.evalOrigin;\n },\n setEvalOrigin: function(v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n\n toString: function() {\n var fileName = this.getFileName() || '';\n var lineNumber = this.getLineNumber() || '';\n var columnNumber = this.getColumnNumber() || '';\n var functionName = this.getFunctionName() || '';\n if (this.getIsEval()) {\n if (fileName) {\n return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return '[eval]:' + lineNumber + ':' + columnNumber;\n }\n if (functionName) {\n return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return fileName + ':' + lineNumber + ':' + columnNumber;\n }\n };\n\n StackFrame.fromString = function StackFrame$$fromString(str) {\n var argsStartIndex = str.indexOf('(');\n var argsEndIndex = str.lastIndexOf(')');\n\n var functionName = str.substring(0, argsStartIndex);\n var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n var locationString = str.substring(argsEndIndex + 1);\n\n if (locationString.indexOf('@') === 0) {\n var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n var fileName = parts[1];\n var lineNumber = parts[2];\n var columnNumber = parts[3];\n }\n\n return new StackFrame({\n functionName: functionName,\n args: args || undefined,\n fileName: fileName,\n lineNumber: lineNumber || undefined,\n columnNumber: columnNumber || undefined\n });\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) {\n return function(v) {\n this[p] = Boolean(v);\n };\n })(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) {\n return function(v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n this[p] = Number(v);\n };\n })(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) {\n return function(v) {\n this[p] = String(v);\n };\n })(stringProps[k]);\n }\n\n return StackFrame;\n}));\n","(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(\\),.*$)/g, '');\n }\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(');\n\n // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n\n // remove the parenthesized location from the line, if it was matched\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n var tokens = sanitizedLine.split(/\\s+/).slice(1);\n // if a location was matched, pass it to extractLocation() otherwise pop the last token\n var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n var functionName = tokens.join(' ') || undefined;\n var fileName = ['eval', ''].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n })\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return filtered.map(function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(//, '$2')\n .replace(/\\([^)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n}));\n","/**\n * The Emscripten Module.\n *\n * @private\n */\nexport let Module: any = {};\nModule.noImageDecoding = true;\nModule.noAudioDecoding = true;\nModule.noWasmDecoding = false; // we preload wasm using the built in plugin now\nModule.preloadedWasm = {};\nModule.preRun = [];\n\nexport let API: any = {};\nModule.API = API;\nexport let Hiwire: any = {};\nModule.hiwire = Hiwire;\n\n// Put things that are exposed only for testing purposes here.\nexport let Tests: any = {};\nAPI.tests = Tests;\n\n/**\n *\n * @param stdin\n * @param stdout\n * @param stderr\n * @private\n */\nexport function setStandardStreams(\n stdin?: () => string,\n stdout?: (a: string) => void,\n stderr?: (a: string) => void\n) {\n // For stdout and stderr, emscripten provides convenient wrappers that save us the trouble of converting the bytes into a string\n if (stdout) {\n Module.print = stdout;\n }\n\n if (stderr) {\n Module.printErr = stderr;\n }\n\n // For stdin, we have to deal with the low level API ourselves\n if (stdin) {\n Module.preRun.push(function () {\n Module.FS.init(createStdinWrapper(stdin), null, null);\n });\n }\n}\n\nfunction createStdinWrapper(stdin: () => string) {\n // When called, it asks the user for one whole line of input (stdin)\n // Then, it passes the individual bytes of the input to emscripten, one after another.\n // And finally, it terminates it with null.\n const encoder = new TextEncoder();\n let input = new Uint8Array(0);\n let inputIndex = -1; // -1 means that we just returned null\n function stdinWrapper() {\n try {\n if (inputIndex === -1) {\n let text = stdin();\n if (text === undefined || text === null) {\n return null;\n }\n if (typeof text !== \"string\") {\n throw new TypeError(\n `Expected stdin to return string, null, or undefined, got type ${typeof text}.`\n );\n }\n if (!text.endsWith(\"\\n\")) {\n text += \"\\n\";\n }\n input = encoder.encode(text);\n inputIndex = 0;\n }\n\n if (inputIndex < input.length) {\n let character = input[inputIndex];\n inputIndex++;\n return character;\n } else {\n inputIndex = -1;\n return null;\n }\n } catch (e) {\n // emscripten will catch this and set an IOError which is unhelpful for\n // debugging.\n console.error(\"Error thrown in stdin:\");\n console.error(e);\n throw e;\n }\n }\n return stdinWrapper;\n}\n\n/**\n * Make the home directory inside the virtual file system,\n * then change the working directory to it.\n *\n * @param path\n * @private\n */\nexport function setHomeDirectory(path: string) {\n Module.preRun.push(function () {\n const fallbackPath = \"/\";\n try {\n Module.FS.mkdirTree(path);\n } catch (e) {\n console.error(`Error occurred while making a home directory '${path}':`);\n console.error(e);\n console.error(`Using '${fallbackPath}' for a home directory instead`);\n path = fallbackPath;\n }\n Module.ENV.HOME = path;\n Module.FS.chdir(path);\n });\n}\n","// Detect if we're in node\ndeclare var process: any;\n\nexport const IN_NODE =\n typeof process !== \"undefined\" &&\n process.release &&\n process.release.name === \"node\" &&\n typeof process.browser ===\n \"undefined\"; /* This last condition checks if we run the browser shim of process */\n\nlet nodePathMod: any;\nlet nodeFetch: any;\nlet nodeVmMod: any;\n/** @private */\nexport let nodeFsPromisesMod: any;\n\ndeclare var globalThis: {\n importScripts: (url: string) => void;\n document?: any;\n};\n\n/**\n * If we're in node, it's most convenient to import various node modules on\n * initialization. Otherwise, this does nothing.\n * @private\n */\nexport async function initNodeModules() {\n if (!IN_NODE) {\n return;\n }\n // @ts-ignore\n nodePathMod = (await import(/* webpackIgnore: true */ \"path\")).default;\n nodeFsPromisesMod = await import(/* webpackIgnore: true */ \"fs/promises\");\n // @ts-ignore\n nodeFetch = (await import(/* webpackIgnore: true */ \"node-fetch\")).default;\n // @ts-ignore\n nodeVmMod = (await import(/* webpackIgnore: true */ \"vm\")).default;\n}\n\n/**\n * Load a binary file, only for use in Node. If the path explicitly is a URL,\n * then fetch from a URL, else load from the file system.\n * @param indexURL base path to resolve relative paths\n * @param path the path to load\n * @returns An ArrayBuffer containing the binary data\n * @private\n */\nasync function node_loadBinaryFile(\n indexURL: string,\n path: string\n): Promise